hi~
继上篇推送的
量子门的有效性
小编再次为大家带来
逻辑门及量子程序时钟周期统计
快快前来get一下吧!
在上一篇文章中,小编为大家介绍了QPanda 2的工具组件:判断量子芯片元数据提供的量子门的有效性。
在元数据提供的量子门信息无法满足量子门有效性的情况下,就无法把任意单门或双门转换为量子芯片元数据支持的量子门。我们可以通过:
SingleGateTypeValidator和DoubleGateTypeValidator两个类来判断量子门有效性。
接下来,我们今天主要讲的是逻辑门以及量子程序时钟周期统计。
逻辑门统计
简介
逻辑门的统计是指统计量子程序、量子线路、量子循环控制或量子条件控制中所有的量子逻辑门(这里也会将测量门统计进去)个数方法。
接口介绍
QGateCounter类是统计一个量子程序(量子线路、量子循环控制、量子条件控制)中量子逻辑门个数的工具类。我们先用QPanda 2构建一个量子程序:
auto qubits = qAllocMany(4); auto cbits = cAllocMany(4); QProg prog; prog << X(qubits[0]) << Y(qubits[1]) << H(qubits[0]) << RX(qubits[0], 3.14) << Measure(qubits[1], cbits[0]);
然后调用QGateCounter类统计量子逻辑门的个数,
QGateCounter t; t.traversal(prog); size_t num = t.count(prog);;
我们还可以使用QPanda 2封装的一个接口:
size_t num = getQGateNumber(prog);
注解
统计QCircuit、QWhileProg、QIfProg中量子逻辑门的个数和QProg类似。
实例
1、初始化虚拟机环境:使用init接口初始化一个量子虚拟机,向量子虚拟机申请4个量子比特和4个经典寄存器;
2、构建量子程序:构建一个量子线路prog,通过 << 操作符把量子逻辑门插入到prog中;
3、调用量子逻辑门统计接口:调用getQGateNumber量子逻辑门统计接口,就可以得到计算结果了。
#include "Core/QPanda.h" USING_QPANDA int main(void) { init(); auto qubits = qAllocMany(4); auto cbits = cAllocMany(4); QProg prog; prog << X(qubits[0]) << Y(qubits[1]) << H(qubits[0]) << RX(qubits[0], 3.14) << Measure(qubits[1], cbits[0]); size_t num = getQGateNumber(prog); std::cout << "QGate number: " << num << std::endl; finalize(); return; }
运行结果:
QGate number: 5
统计量子程序时钟周期
简介
已知每个量子逻辑门在运行时所需时间的条件下,估算一个量子程序运行所需要的时间。每个量子逻辑门的时间设置在项目的元数据配置文件QPandaConfig.xml中, 如果未设置则会给定一个默认值,单量子门的默认时间为2,双量子门的时间为5。
配置文件可仿照下面设置
<QGate> <SingleGate> <Gate time = "2">rx</Gate> <Gate time = "2">Ry</Gate> <Gate time = "2">RZ</Gate> <Gate time = "2">S</Gate> <Gate time = "2">H</Gate> <Gate time = "2">X1</Gate> </SingleGate> <DoubleGate> <Gate time = "5">CNOT</Gate> <Gate time = "5">CZ</Gate> <Gate time = "5">ISWAP</Gate> </DoubleGate> </QGate>
接口介绍
QProgClockCycle 类是QPanda 2提供的一个统计量子程序时钟周期的工具类,我们先用QPanda 2构建一个量子程序:
auto qubits = qvm->allocateQubits(4); auto prog = CreateEmptyQProg(); prog << H(qubits[0]) << CNOT(qubits[0], qubits[1]) << iSWAP(qubits[1], qubits[2]) << RX(qubits[3], PI/4);
然后调用QProgClockCycle类得到量子程序的时钟周期,
QProgClockCycle t(qvm); t.traversal(prog); auto time = t.count();
我们还可以使用QPanda 2封装的一个接口:
auto time = getQProgClockCycle(qvm, prog);
实例
1、初始化虚拟机环境:使用init接口初始化一个量子虚拟机,向量子虚拟机申请4个量子比特;
2、构建量子程序:构建一个量子线路prog,通过 << 操作符把量子逻辑门插入到prog中;
3、调用统计量子程序时钟周期接口:调用getQProgClockCycle统计量子程序时钟周期接口,就可以得到计算结果了。
#include "Core/QPanda.h" USING_QPANDA int main(void) { auto qvm = initQuantumMachine(); auto qubits = qvm->allocateQubits(4); auto prog = CreateEmptyQProg(); prog << H(qubits[0]) << CNOT(qubits[0], qubits[1]) << iSWAP(qubits[1], qubits[2]) << RX(qubits[3], PI/4); auto time = getQProgClockCycle(qvm, prog); std::cout << "clockCycle : " << time << std::endl; qvm->finalize(); delete qvm; return 0; }
运行结果:
clockCycle : 14
★以上即为QPanda 2逻辑门以及量子程序时钟周期统计部分的详细内容介绍。
★感兴趣的欢迎加入"QPanda 2开发交流群"。(关注“本源量子”公众号,回复“加群”,联系小编即可)
★PC端学习量子计算请登录learn-quantum.com
★掌上学习请下载"本源溯知APP"
★如有疑问可上量子互动论坛,与我们的大神进行交流讨论。
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved