逻辑门以及量子程序时钟周期统计?

?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_QPANDAint 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_QPANDAint 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

★如有疑问可上量子互动论坛,与我们的大神进行交流讨论。

来源:本源量子计算

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2019年7月1日
下一篇 2019年7月1日

相关推荐