cudaq spec 10,常见量子编程模式

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() ;
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值