QLLVM 入门指南:基于 LLVM 的经典-量子混合编译器
一、QLLVM 是什么
QLLVM 是一个基于 LLVM 构建的经典-量子混合编译框架,具备卓越的可扩展性以及与经典高性能计算生态的无缝集成能力。
它能做什么
- 把量子程序(Qiskit/Cirq/openQASM 等)和 C++/CUDA 程序放在一起编译,生成一个可执行文件
解决什么问题
- 量子编程框架存在的生态碎片化问题,前端接口不统一、后端硬件强耦合、编译能力重复构建,且与 HPC 生态脱节
- 现有“量-超-智”融合方案存在的局限性问题,CUDA Quantum 对传统 HPC 场景支持不足,Qiskit Runtime 通信延迟大、无法实现编译层全局优化
- 现有 LLVM/MLIR 路径在物理比特映射等关键环节支持不成熟问题,多数量子编译器以“量子为中心”,未将 CUDA、OpenMP/MPI 等纳入统一编译视图
核心优势
- ✅ 统一编译:量子+经典代码一次性编译,无需胶水代码
- ✅ 多前端支持:Qiskit、Cirq、Qpanda、openQASM
- ✅ 多后端输出:openQASM 2.0、OriginIR、qcis
- ✅ 支持 C++/CUDA 与量子程序混合编译
- ✅ 无量子硬件也能跑(内置模拟器)
- ✅ 开放性与互操作性:基于 LLVM 开放标准,硬件无关、平台中立,避免厂商生态锁定
- ✅ 全栈性能优化:内置 SABRE 物理比特映射算法
- ✅ 模块化设计:框架采用模块化架构,便于后续功能扩展
二、安装方式
方式一:VSCode 插件(推荐)
如果不想折腾编译环境,可以直接用 VSCode 插件。
安装步骤:
- 打开 VSCode,进入扩展面板(
Ctrl+Shift+X) - 搜索
qcflow-publisher.qcoder-chat - 点击安装
安装后会自动带上编译插件,不需要额外配置。
使用:
- 左侧侧边栏打开 Qcoder
- 在代码区域写量子程序
- 点击编译按钮
- 点击运行按钮
- 输出结果在下方显示
方式二:从源码安装
如果需要命令行使用,可以从源码编译。
详细安装要求参考官方文档:qllvm-documentation.readthedocs.io
三、基本用法
3.1 编译纯量子程序
qllvm test_bell.qasm -qrt nisq -qpu qasm-backend -O1
这条命令会编译 test_bell.qasm,输出优化后的量子电路文件 test_bell_compiled.qasm。
参数说明:
-qrt nisq:运行时模式,目前用 nisq-qpu qasm-backend:后端选择,qasm-backend 是模拟器-O1:优化级别,可选 O0/O1/O2/O3
3.2 编译 C++ 和量子混合程序
qllvm main.cpp bell.qasm -o hybrid_bell
./hybrid_bell
前提是 main.cpp 里调用了量子电路接口。具体接口写法可以参考仓库 examples/hybrid/ 目录下的示例。
3.3 编译 C++ + CUDA + 量子混合程序
cd examples/hybrid_cuda
qllvm main.cpp kernel.cu circuit.qasm -o hybrid_app -cuda-arch sm_86
./hybrid_app -shots 1024
这里:
-cuda-arch sm_86:指定 CUDA 架构,根据本地 GPU 修改- 需要本地已安装
CUDA工具链
以上示例均来自官方仓库:github.com/QCFlow/QLLV…
更详细的使用示例请参考:
四、常见问题
Q1:没有量子硬件能不能用?
可以。qasm-backend 是模拟器,在经典计算机上运行量子电路。
Q2:支持哪些量子编程框架?
前端支持 Qiskit、Cirq、Qpanda、openQASM。也就是说你可以用这些框架写量子程序,然后通过 QLLVM 编译成目标指令。
Q3:插件和命令行有什么区别?
- 插件:适合快速体验、教学、不关心底层配置
- 命令行:适合集成到现有构建流程、脚本自动化
Q4:编译报错怎么办?
- 先确认依赖是否完整(
LLVM、CUDA如果需要) - 查看官方文档的安装部分
- 在 GitHub 提交 Issue
五、更多资源
- 官方文档:qllvm-documentation.readthedocs.io
- GitHub 仓库:github.com/QCFlow/QLLV…
- Gitee 仓库:gitee.com/QCFlow/QLLV…
- Issues 反馈:github.com/QCFlow/QLLV…
以上是 QLLVM 的基本使用方法。如果有具体的使用问题,建议先看官方文档,或者直接提交 Issue。