# quantum_engine **Repository Path**: aurawing/quantum_engine ## Basic Information - **Project Name**: quantum_engine - **Description**: C语言实现的高性能量子模拟计算引擎 - **Primary Language**: C - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-09-24 - **Last Updated**: 2026-04-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 编译: ```bash make clean && make ``` ## 运行: ```bash ./quantum_engine ``` ## 配置文件说明 (`config/config.yaml`) 程序启动时会读取 `config/config.yaml` 文件来配置运行参数。如果文件不存在,将使用以下默认值。 | 参数名 | 类型 | 默认值 | 说明 | | :--- | :--- | :--- | :--- | | `listen_port` | int | 8080 | HTTP服务器监听的端口。 | | `data_type` | string | "complex64_native" | 使用的计算数据类型,目前固定为 `complex64_native`。 | | `bind_core_from` | int | 0 | 工作线程绑定的起始CPU核心ID。 | | `bind_core_to` | int | 7 | 工作线程绑定的结束CPU核心ID。线程总数为 `to - from + 1`。 | | `max_qubit_n` | int | 32 | 引擎支持的最大量子比特数。程序将按此数量预分配内存。 | | `batch_state_n` | int | 26 | 并行计算任务的分批大小(2的N次方)。这是一个性能调优参数,影响任务粒度。 | ## API使用示例: 1. 初始化量子线路,执行后马上返回,程序在后台进行计算,后续通过下面的result接口获取计算结果: ```bash curl -X POST http://localhost:8080/initialize \ -H "Content-Type: application/json" \ -d '{"nqubits":3,"gates":[{"name":"h","qubits":[0],"params":null,"ctrl_state":0,"num_ctrl_qubits":0,"num_qubits":1}]}' ``` 2. 获取全部计算结果: ```bash curl http://localhost:8080/result ``` 3. 获取指定状态空间索引的计算结果: ```bash curl http://localhost:8080/result?index=&index= ``` ## 注意事项: - 需要支持C11标准的编译器 - 需要pthread库支持 - 建议在多核CPU上运行以发挥并行计算优势 - 对于大量量子比特,需要足够的内存(32位需要约34GB) ## 测试线路 1. 一个简单的31比特测试线路,依次对第0比特应用H门,对第0比特应用X门,对第1、0比特应用CX门 ```bash curl -X POST http://172.22.192.1:8080/initialize -H "Content-Type: application/json" -d '{ "nqubits": 31, "gates": [ { "name": "h", "qubits": [ 0 ], "params": [], "ctrl_state": null, "num_ctrl_qubits": null, "num_qubits": 1 }, { "name": "x", "qubits": [ 0 ], "params": [], "ctrl_state": null, "num_ctrl_qubits": null, "num_qubits": 1 }, { "name": "cx", "qubits": [ 1, 0 ], "params": [], "ctrl_state": 1, "num_ctrl_qubits": 1, "num_qubits": 2 } ] }' ``` 2. 一个简单的6比特block encoder线路: ```bash curl -X POST http://127.0.0.1:8080/initialize -H "Content-Type: application/json" -d '{ "nqubits": 6, "gates": [ { "name": "h", "qubits": [ 0 ], "params": [], "ctrl_state": null, "num_ctrl_qubits": null, "num_qubits": 1 }, { "name": "h", "qubits": [ 1 ], "params": [], "ctrl_state": null, "num_ctrl_qubits": null, "num_qubits": 1 }, { "name": "h", "qubits": [ 2 ], "params": [], "ctrl_state": null, "num_ctrl_qubits": null, "num_qubits": 1 }, { "name": "h", "qubits": [ 3 ], "params": [], "ctrl_state": null, "num_ctrl_qubits": null, "num_qubits": 1 }, { "name": "h", "qubits": [ 4 ], "params": [], "ctrl_state": null, "num_ctrl_qubits": null, "num_qubits": 1 }, { "name": "c5ry_o0", "qubits": [ 0, 1, 2, 3, 4, 5 ], "params": [ "0.0" ], "ctrl_state": 0, "num_ctrl_qubits": 5, "num_qubits": 6 }, { "name": "c5ry_o1", "qubits": [ 0, 1, 2, 3, 4, 5 ], "params": [ "0.1" ], "ctrl_state": 1, "num_ctrl_qubits": 5, "num_qubits": 6 }, { "name": "c5ry_o2", "qubits": [ 0, 1, 2, 3, 4, 5 ], "params": [ "0.2" ], "ctrl_state": 2, "num_ctrl_qubits": 5, "num_qubits": 6 }, { "name": "c5ry_o3", "qubits": [ 0, 1, 2, 3, 4, 5 ], "params": [ "0.30000000000000004" ], "ctrl_state": 3, "num_ctrl_qubits": 5, "num_qubits": 6 }, { "name": "c5ry_o4", "qubits": [ 0, 1, 2, 3, 4, 5 ], "params": [ "0.4" ], "ctrl_state": 4, "num_ctrl_qubits": 5, "num_qubits": 6 }, { "name": "c5ry_o5", "qubits": [ 0, 1, 2, 3, 4, 5 ], "params": [ "0.5" ], "ctrl_state": 5, "num_ctrl_qubits": 5, "num_qubits": 6 }, { "name": "c5ry_o6", "qubits": [ 0, 1, 2, 3, 4, 5 ], "params": [ "0.6000000000000001" ], "ctrl_state": 6, "num_ctrl_qubits": 5, "num_qubits": 6 }, { "name": "c5ry_o7", "qubits": [ 0, 1, 2, 3, 4, 5 ], "params": [ "0.7000000000000001" ], "ctrl_state": 7, "num_ctrl_qubits": 5, "num_qubits": 6 }, { "name": "c5ry_o8", "qubits": [ 0, 1, 2, 3, 4, 5 ], "params": [ "0.8" ], "ctrl_state": 8, "num_ctrl_qubits": 5, "num_qubits": 6 }, { "name": "c5ry_o9", "qubits": [ 0, 1, 2, 3, 4, 5 ], "params": [ "0.9" ], "ctrl_state": 9, "num_ctrl_qubits": 5, "num_qubits": 6 }, { "name": "c5ry_o10", "qubits": [ 0, 1, 2, 3, 4, 5 ], "params": [ "1.0" ], "ctrl_state": 10, "num_ctrl_qubits": 5, "num_qubits": 6 }, { "name": "c5ry_o11", "qubits": [ 0, 1, 2, 3, 4, 5 ], "params": [ "1.1" ], "ctrl_state": 11, "num_ctrl_qubits": 5, "num_qubits": 6 }, { "name": "c5ry_o12", "qubits": [ 0, 1, 2, 3, 4, 5 ], "params": [ "1.2000000000000002" ], "ctrl_state": 12, "num_ctrl_qubits": 5, "num_qubits": 6 }, { "name": "c5ry_o13", "qubits": [ 0, 1, 2, 3, 4, 5 ], "params": [ "1.3" ], "ctrl_state": 13, "num_ctrl_qubits": 5, "num_qubits": 6 }, { "name": "c5ry_o14", "qubits": [ 0, 1, 2, 3, 4, 5 ], "params": [ "1.4000000000000001" ], "ctrl_state": 14, "num_ctrl_qubits": 5, "num_qubits": 6 }, { "name": "c5ry_o15", "qubits": [ 0, 1, 2, 3, 4, 5 ], "params": [ "1.5" ], "ctrl_state": 15, "num_ctrl_qubits": 5, "num_qubits": 6 }, { "name": "c5ry_o16", "qubits": [ 0, 1, 2, 3, 4, 5 ], "params": [ "1.6" ], "ctrl_state": 16, "num_ctrl_qubits": 5, "num_qubits": 6 }, { "name": "c5ry_o17", "qubits": [ 0, 1, 2, 3, 4, 5 ], "params": [ "1.7000000000000002" ], "ctrl_state": 17, "num_ctrl_qubits": 5, "num_qubits": 6 }, { "name": "c5ry_o18", "qubits": [ 0, 1, 2, 3, 4, 5 ], "params": [ "1.8" ], "ctrl_state": 18, "num_ctrl_qubits": 5, "num_qubits": 6 }, { "name": "c5ry_o19", "qubits": [ 0, 1, 2, 3, 4, 5 ], "params": [ "1.9000000000000001" ], "ctrl_state": 19, "num_ctrl_qubits": 5, "num_qubits": 6 }, { "name": "c5ry_o20", "qubits": [ 0, 1, 2, 3, 4, 5 ], "params": [ "2.0" ], "ctrl_state": 20, "num_ctrl_qubits": 5, "num_qubits": 6 }, { "name": "c5ry_o21", "qubits": [ 0, 1, 2, 3, 4, 5 ], "params": [ "2.1" ], "ctrl_state": 21, "num_ctrl_qubits": 5, "num_qubits": 6 }, { "name": "c5ry_o22", "qubits": [ 0, 1, 2, 3, 4, 5 ], "params": [ "2.2" ], "ctrl_state": 22, "num_ctrl_qubits": 5, "num_qubits": 6 }, { "name": "c5ry_o23", "qubits": [ 0, 1, 2, 3, 4, 5 ], "params": [ "2.3000000000000003" ], "ctrl_state": 23, "num_ctrl_qubits": 5, "num_qubits": 6 }, { "name": "c5ry_o24", "qubits": [ 0, 1, 2, 3, 4, 5 ], "params": [ "2.4000000000000004" ], "ctrl_state": 24, "num_ctrl_qubits": 5, "num_qubits": 6 }, { "name": "c5ry_o25", "qubits": [ 0, 1, 2, 3, 4, 5 ], "params": [ "2.5" ], "ctrl_state": 25, "num_ctrl_qubits": 5, "num_qubits": 6 }, { "name": "c5ry_o26", "qubits": [ 0, 1, 2, 3, 4, 5 ], "params": [ "2.6" ], "ctrl_state": 26, "num_ctrl_qubits": 5, "num_qubits": 6 }, { "name": "c5ry_o27", "qubits": [ 0, 1, 2, 3, 4, 5 ], "params": [ "2.7" ], "ctrl_state": 27, "num_ctrl_qubits": 5, "num_qubits": 6 }, { "name": "c5ry_o28", "qubits": [ 0, 1, 2, 3, 4, 5 ], "params": [ "2.8000000000000003" ], "ctrl_state": 28, "num_ctrl_qubits": 5, "num_qubits": 6 }, { "name": "c5ry_o29", "qubits": [ 0, 1, 2, 3, 4, 5 ], "params": [ "2.9000000000000004" ], "ctrl_state": 29, "num_ctrl_qubits": 5, "num_qubits": 6 }, { "name": "c5ry_o30", "qubits": [ 0, 1, 2, 3, 4, 5 ], "params": [ "3.0" ], "ctrl_state": 30, "num_ctrl_qubits": 5, "num_qubits": 6 }, { "name": "c5ry", "qubits": [ 0, 1, 2, 3, 4, 5 ], "params": [ "3.1" ], "ctrl_state": 31, "num_ctrl_qubits": 5, "num_qubits": 6 } ] }' 3. 31比特GHZ线路: ```bash curl -X POST http://172.22.192.1:8080/initialize -H "Content-Type: application/json" -d '{ "nqubits": 31, "gates": [ { "name": "h", "qubits": [ 0 ], "params": [], "ctrl_state": null, "num_ctrl_qubits": null, "num_qubits": 1 }, { "name": "cx", "qubits": [ 0, 1 ], "params": [], "ctrl_state": null, "num_ctrl_qubits": 1, "num_qubits": 2 }, { "name": "cx", "qubits": [ 1, 2 ], "params": [], "ctrl_state": null, "num_ctrl_qubits": 1, "num_qubits": 2 }, { "name": "cx", "qubits": [ 2, 3 ], "params": [], "ctrl_state": null, "num_ctrl_qubits": 1, "num_qubits": 2 }, { "name": "cx", "qubits": [ 3, 4 ], "params": [], "ctrl_state": null, "num_ctrl_qubits": 1, "num_qubits": 2 }, { "name": "cx", "qubits": [ 4, 5 ], "params": [], "ctrl_state": null, "num_ctrl_qubits": 1, "num_qubits": 2 }, { "name": "cx", "qubits": [ 5, 6 ], "params": [], "ctrl_state": null, "num_ctrl_qubits": 1, "num_qubits": 2 }, { "name": "cx", "qubits": [ 6, 7 ], "params": [], "ctrl_state": null, "num_ctrl_qubits": 1, "num_qubits": 2 }, { "name": "cx", "qubits": [ 7, 8 ], "params": [], "ctrl_state": null, "num_ctrl_qubits": 1, "num_qubits": 2 }, { "name": "cx", "qubits": [ 8, 9 ], "params": [], "ctrl_state": null, "num_ctrl_qubits": 1, "num_qubits": 2 }, { "name": "cx", "qubits": [ 9, 10 ], "params": [], "ctrl_state": null, "num_ctrl_qubits": 1, "num_qubits": 2 }, { "name": "cx", "qubits": [ 10, 11 ], "params": [], "ctrl_state": null, "num_ctrl_qubits": 1, "num_qubits": 2 }, { "name": "cx", "qubits": [ 11, 12 ], "params": [], "ctrl_state": null, "num_ctrl_qubits": 1, "num_qubits": 2 }, { "name": "cx", "qubits": [ 12, 13 ], "params": [], "ctrl_state": null, "num_ctrl_qubits": 1, "num_qubits": 2 }, { "name": "cx", "qubits": [ 13, 14 ], "params": [], "ctrl_state": null, "num_ctrl_qubits": 1, "num_qubits": 2 }, { "name": "cx", "qubits": [ 14, 15 ], "params": [], "ctrl_state": null, "num_ctrl_qubits": 1, "num_qubits": 2 }, { "name": "cx", "qubits": [ 15, 16 ], "params": [], "ctrl_state": null, "num_ctrl_qubits": 1, "num_qubits": 2 }, { "name": "cx", "qubits": [ 16, 17 ], "params": [], "ctrl_state": null, "num_ctrl_qubits": 1, "num_qubits": 2 }, { "name": "cx", "qubits": [ 17, 18 ], "params": [], "ctrl_state": null, "num_ctrl_qubits": 1, "num_qubits": 2 }, { "name": "cx", "qubits": [ 18, 19 ], "params": [], "ctrl_state": null, "num_ctrl_qubits": 1, "num_qubits": 2 }, { "name": "cx", "qubits": [ 19, 20 ], "params": [], "ctrl_state": null, "num_ctrl_qubits": 1, "num_qubits": 2 }, { "name": "cx", "qubits": [ 20, 21 ], "params": [], "ctrl_state": null, "num_ctrl_qubits": 1, "num_qubits": 2 }, { "name": "cx", "qubits": [ 21, 22 ], "params": [], "ctrl_state": null, "num_ctrl_qubits": 1, "num_qubits": 2 }, { "name": "cx", "qubits": [ 22, 23 ], "params": [], "ctrl_state": null, "num_ctrl_qubits": 1, "num_qubits": 2 }, { "name": "cx", "qubits": [ 23, 24 ], "params": [], "ctrl_state": null, "num_ctrl_qubits": 1, "num_qubits": 2 }, { "name": "cx", "qubits": [ 24, 25 ], "params": [], "ctrl_state": null, "num_ctrl_qubits": 1, "num_qubits": 2 }, { "name": "cx", "qubits": [ 25, 26 ], "params": [], "ctrl_state": null, "num_ctrl_qubits": 1, "num_qubits": 2 }, { "name": "cx", "qubits": [ 26, 27 ], "params": [], "ctrl_state": null, "num_ctrl_qubits": 1, "num_qubits": 2 }, { "name": "cx", "qubits": [ 27, 28 ], "params": [], "ctrl_state": null, "num_ctrl_qubits": 1, "num_qubits": 2 }, { "name": "cx", "qubits": [ 28, 29 ], "params": [], "ctrl_state": null, "num_ctrl_qubits": 1, "num_qubits": 2 }, { "name": "cx", "qubits": [ 29, 30 ], "params": [], "ctrl_state": null, "num_ctrl_qubits": 1, "num_qubits": 2 } ] }' ```