QPanda 2.0 SDK(Quantum Panda 2.0 Software Development Kit)是由本源量子推出的开源量子程序开发工具包。其支持主流的量子逻辑门操作,并且可对不同平台下的量子程序进行针对性优化,可适配多种量子芯片。QPanda 2.0 使用C++语言作为经典宿主语言,并支持以QRunes和QASM书写的量子语言。
目前,QPanda 2.0支持本地仿真运行模式,最高可支持到32位,它集成了量子虚拟机,封装了主流的量子算法。可在无芯片支持的情况下验证量子应用的可靠性和有效性。加上增加了控制流的概念使得量子程序可进行逻辑判断,从而符合高级语言的编程习惯。
在QPanda里,总共由三个过程组成:初始化生成、编译和运行。
初始化 :初始化生成是允许用户设计不同的量子线路来处理对应需要解决的问题。
编译 :而编译则是允许用户重写它们以在不同的后端运行(比如模拟器,量子芯片,不同公司的量子芯片等)。
运行 :即是收集结果的过程,对于运行后的数据采集,取决于程序本身的设计需求去做相应的存储或者转化,运行的结果,也依赖于解决问题的需要而定。有的问题,可能需要依赖上一个量子程序运行结果才能执行下一个量子程序,诸如此类。
考虑到量子计算的蓬勃发展和未来的广泛应用,QPanda 2.0做了很多前瞻性的设计。所以QPanda在设计时做了以下考虑:
QPanda 的目标是兼容所有量子计算机。底层量子计算机现在由于正处快速发展期,所以芯片、测控等实现细节都不确定。QPanda简化并规避了诸多量子计算机的物理细节而为用户提供了标准化的接口。通过QPanda构建的量子计算机,本身是通过经典的程序语言对其进行交互,所以它可以被用于任意的云量子计算机,本地量子计算机,或者是实验中的量子原型机。通过QPanda构建的量子应用则不会受到硬件变动的影响。
QPanda提供了标准化的量子程序(Quantum Program)架构。架构者认为,在量子机器(Quantum Machine)中执行的程序和在经典计算机中执行的程序应该彻底区分开来,特别是涉及到经典控制的部分。物理上,芯片的退相干(Decoherence)时间极为短暂,这使得量子程序中的控制流并非在狭义的CPU中完成,而更有可能会采用极低延时的FPGA或其它嵌入式器件作为其测控系统实现。我们认为,量子机器包含了量子芯片与其测控系统,一个量子程序被视作是对一个原子的操作,直到执行完毕才返回结果给经典计算机。 量子程序的架构包含:量子逻辑门、量子线路、量子分支程序和量子循环程序。在QPandaa里这几种元素均以接口的形式被提供,我们提供了一组这些接口的实现类作为基础的数据接口。用户可以重写这些接口并将实现类进行注册,系统会选择用户的类对默认实现类进行覆盖,并且保持其它结构的不变。
我们提供了标准化的量子机器模型。通常,量子程序是静态加载到量子机器里,并且量子程序本身也是被静态地构建的。这意味我们可以在量子程序被执行前,对量子程序进行静态检查和分析,获取其中的信息(而非执行它)。能检查的要素例如:量子比特是否越界,经典寄存器是否超过硬件允许的范围等等。而能进行的预处理则包含:任意的量子程序被替换到对应真实芯片的拓扑结构和基本逻辑门集合上(硬件兼容),量子程序的运行时长判断,量子程序的优化等等。 量子机器模型还定义了量子程序的标准构建过程。例如从量子比特池中申请空闲比特,从内存中申请空间,将程序加载到量子机器中,或者在已有的量子程序中附加一段新的量子程序。和量子程序的部分类似,量子机器本身的任何架构也是接口化的,用户也可以对接口进行覆写以应对不同硬件的需求。
QPanda项目总共包括:
用于编写量子程序和应用程序的 C++宿主语言工具包。它使用户能够方便连接和执行量子程序。
QRunes是本源量子制定的一套量子计算指令集。
QRunes(QASM) Generator 是一个支持以函数调用方式生成QRunes指令的C++库。
提供了QPanda软件的使用细节,以及一些常见算法的案例。包括算法概要,对应的量子线路图,对应的QPanda代码等,旨在指导用户快速正确的使用QPanda。