Skip to Content

执行后端与参数

后端决定状态表示和门运算实现,设备决定在 CPU 或可用 GPU 上执行。相同线路在不同后端上应保持相同的量子语义,但精度、性能和可用功能可能不同。

import numpy as np from unitarylab import Circuit qc = Circuit(2) result = qc.execute( initial_state=None, backend="torch", device="cpu", dtype=np.complex128, shots=1, seed=42, backend_options=None, )
后端与设备适用场景
torch + cpu(默认)大多数场景
torch + gpuCUDA 或 Apple MPS
numpy + cpu纯 NumPy 环境
cpp + cpuC++ 门核 CPU 加速
cpp + gpu可选 CUDA C++ 后端
tensornet + cpu大比特数、低纠缠 MPS 模拟

参数说明

参数默认值说明
initial_stateNone状态向量或后端支持的初态;默认 $
backend"torch"torch、numpy、cpp 或 tensornet
device"cpu"cpu 或后端支持的 gpu
dtypenp.complex128状态和门运算的复数精度
shots1整条含测量线路的重复执行次数
seed42线路测量随机种子;None 表示不固定
backend_optionsNone后端专属配置字典

CUDA C++ 后端通过 pip install "unitarylab[cuda]" 安装,需要兼容的 NVIDIA 驱动,不要求本地 CUDA Toolkit。Apple MPS 不支持 complex128,应使用 np.complex64。

seed=42 使线路内测量可复现;传 None 使用非固定随机采样。TensorNet 的 backend_options 支持 max_bond、cutoff 和 routing(auto、swap、mpo)。

result = qc.execute( backend="tensornet", backend_options={"max_bond": 128, "cutoff": 1e-10, "routing": "auto"}, )
TensorNet 选项说明
max_bondMPS 最大键维;越大通常越精确,也越耗内存
cutoff奇异值截断阈值
routing双比特门路由策略:auto、swap 或 mpo

TensorNet 适合一维局域、低纠缠线路;高纠缠线路的键维可能快速增长,不能只凭量子比特数判断性能。

选择与排错

  • 首次运行使用默认 torch + cpu,先确认结果正确。
  • 需要纯 NumPy 依赖路径时使用 numpy;需要已编译门核时使用 cpp。
  • GPU 不可用、dtype 不受支持或可选扩展未安装时会在执行阶段报错,不会自动改用其他设备。
  • complex64 占用更少内存但数值误差更大;涉及深线路或误差比较时优先使用 complex128。
  • 比较后端时固定线路、初态、dtype、shots 和 seed。

相关页面

最后更新于