10. 常见量子编程模式
10.1. 计算-动作-反计算
[1] CUDA-Q 指定了支持计算-动作-反计算模式的语法和语义:
,其中 U 是计算块,V 是动作块。
[2] 通过针对此模式的特殊语法,CUDA-Q 使编译器实现能够根据程序员的意图进行电路优化。具体而言,U、V 和 U† 的受控版本不会产生所有指令的受控操作,而是可以自由地仅控制 V。
[3] CUDA-Q 规范要求此模式使用以下语法:
C++ 示例:
// 将调用 U V U^dag
cudaq::compute_action (
[&](){
/*U_code*/
},
[&]() {
/*V_code*/
}
);
Python 示例:
def computeF():
...
def actionF():
...
# Can take user-defined functions
cudaq.compute_action(computeF, actionF)
# Can take Pythonic CUDA-Q lambda kernels
computeL = lambda : (h(q), x(q), ry(-np.pi, q[0]))
cudaq.compute_action(computeL, actionF)
[4] 编译器实现必须添加反计算段,并对此代码块的任何受控版本进行优化。
11. 量子平台
[1] CUDA-Q 提供了一个描述底层量子计算资源的抽象。底层量子平台可以包含一个或多个量子处理单元(QPU),每个 QPU 都有自己的量子比特连接性和噪声配置。
[2] CUDA-Q 定义了 cudaq::quantum_platform,旨在公开相关系统信息并支持异步量子内核调用。
[3] cudaq::quantum_platform 提供了一个 API,用于查询可用的量子处理单元(QPU)数量,每个 QPU 被分配一个逻辑整数索引({0,1,2,...})。
[4] 程序员可以指定所需 QPU 的 ID,所有后续的 CUDA-Q 内核执行都将针对该 QPU。
cudaq::quantum_platform 应具有以下结构:
namespace cudaq {
class quantum_platform {
public:
quantum_platform();
~quantum_platform();
using QubitEdge = std::pair<std::size_t, std::size_t>;
using QubitConnectivity = std::vector<QubitEdge>;
std::optional<QubitConnectivity> connectivity();
std::size_t num_qpus() const;
std::size_t get_num_qubits(std::size_t qpu_id = 0) const;
bool is_simulator(std::size_t qpu_id = 0) const;
bool is_remote(std::size_t qpuId = 0);
bool is_emulated(std::size_t qpuId = 0) const;
std::string name() const;
std::size_t get_current_qpu() const ;
void set_current_qpu(const std::size_t device_id);
};
}
CUDA-Q 提供了以下公共函数来与当前的 cudaq::quantum_platform 进行交互:
namespace cudaq {
quantum_platform &get_platform() ;
}
20万+

被折叠的 条评论
为什么被折叠?



