跳转到内容

量子后端

执行器决定任务如何调度,量子后端决定电路如何执行。下面通过本机 Ray Worker 调用 simulator,在 CPU 上模拟电路;接入 QPU 后,Worker 通过对应的 Provider 提交设备请求。

from pivotq import QuantumCircuit, Runtime
circuit = QuantumCircuit(2)
circuit.h(0)
circuit.cx(0, 1)
circuit.measure_all()
with Runtime(executor="ray", address="local") as runtime:
backend = runtime.quantum_backend("simulator", max_qubits=20)
ref = backend.submit(circuit, shots=1024, seed=7)
result = runtime.get(ref)
print(result.counts)
print(result.is_simulated)
后端 实际执行 宽度 counts seed
simulator CPU 状态向量与有限采样 默认上限 20 比特,可显式配置 提供采样计数 支持
已注册的 QPU Provider 由适配器连接相应的量子设备 由 BackendCapabilities 声明 提供原始计数时返回,否则为 None 不支持

存储状态向量所需的内存随量子比特数呈指数增长;增加 max_qubits 不会增加可用内存。模拟器采样为理想结果,不包含设备噪声。

可以提交已绑定参数的 QuantumCircuit,也可以提交上游任务的结果引用;该任务的返回值须为已绑定参数的 QuantumCircuit。pivotq.QuantumCircuit 直接复用 Qiskit 原始类型,已有的 Qiskit 电路同样兼容;电路、参数、编译与序列化入口见电路 API。标准幺正门与可分解的幺正电路可被模拟;支持末尾的全量、部分及置换测量。

当前不支持中途测量、reset、initialize、经典条件、控制流和未绑定参数。使用 assign_parameters() 绑定参数,再提交电路。执行不会修改输入电路;提交后直到任务完成,请勿修改同一个电路对象。

实际 QPU 支持的门集、连接关系和编译方式由设备及其 Provider 决定。通过公共电路校验不代表任意设备都可以执行该电路;Provider 还需完成设备适配与检查。

有显式测量时,返回位串按 c[n−1]…c0 排列,多个经典寄存器展平且不插入空格。未被写入的经典位为 0;部分测量只返回所对应的经典位分布。

没有显式测量时,默认测量全部量子比特,位串按 q[n−1]…q0 排列。例:两比特电路只有 x(0),不含测量时结果为 "01"。

测量置换保留原有映射:若 q0=1, q1=0,并调用 measure(0, 1) 和 measure(1, 0),则返回 "10"。SDK 不会把这种映射静默改成按 qubit 编号输出。

使用部署方提供的 Provider,或在用户代码中实现Provider 协议。注册时声明设备能力,创建后端时传入该 Provider 要求的配置:

def register_qpu(runtime, provider_factory, capabilities, **config):
runtime.register_quantum_backend(
"qpu", provider_factory, capabilities=capabilities,
)
return runtime.quantum_backend("qpu", **config)

这里的 provider_factory、capabilities 和配置来自实际适配器;SDK 不会仅凭设备名称自动完成接入。BackendCapabilities 声明最小/最大比特数、是否模拟和是否支持采样种子;backend.describe() 返回这些静态信息。

注册与创建后端不构造 Provider,也不连接量子设备。提交后,运行时在执行进程中构造实例并调用 run();电路也可以来自上游 CPU 任务引用。读取结果统一使用 runtime.get(backend.submit(circuit, shots=1024))。

Provider 负责原生门编译、物理布局还原及结果读取;SDK 负责保留末尾测量映射并生成统一的 QuantumResult。若需在不同测量基下测量,用户须先在电路中加入相应的基变换。

simulator 返回采样计数,以及对计数归一化后得到的概率。QPU Provider 可以返回设备确认的原始计数或概率;仅提供概率时 counts=None,SDK 不会根据概率伪造原始计数。shots 记录采样次数或设备确认的重复次数,metadata.source 记录 Provider 提供的数据来源。

设备连接、提交或执行失败时会抛出错误,不会自动改用 CPU 模拟。若报错表示任务状态未知,SDK 不会自动重试;任务可能仍在设备上执行,需保留作业标识,核实状态后再决定下一步。