查看原文
其他

QPanda 2教程资源 | 逻辑门以及量子程序时钟周期统计​

OriginQ 本源量子 2021-02-13

hi~

继上篇推送的

量子门的有效性

小编再次为大家带来

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

快快前来get一下吧!



在上一篇文章中,小编为大家介绍了QPanda 2的工具组件:判断量子芯片元数据提供的量子门的有效性。

在元数据提供的量子门信息无法满足量子门有效性的情况下,就无法把任意单门或双门转换为量子芯片元数据支持的量子门。我们可以通过:

SingleGateTypeValidatorDoubleGateTypeValidator两个类来判断量子门有效性。

接下来,我们今天主要讲的是逻辑门以及量子程序时钟周期统计


逻辑门统计



简介

逻辑门的统计是指统计量子程序、量子线路、量子循环控制或量子条件控制中所有的量子逻辑门(这里也会将测量门统计进去)个数方法。

接口介绍

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"

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


往期精彩回顾

QPanda 2教程资源 | 量子门的有效性及判断方法

QPanda 2教程资源 | 量子比特的测量方法:量子测量和概率测量

模拟量子虚拟机的解决方案(下):单振幅和含噪声量子虚拟机

模拟量子虚拟机的解决方案(上):全振幅和部分振幅量子虚拟机

QPanda 2教程资源 | 构建量子程序、QWhile与QIf的方法

QPanda 2最常用的量子计算模型——量子线路

嗨玩本源QPanda 2,从量子逻辑门实例开始学起!

Origin Q发布国内首款量子软件开发包Q-Panda

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存