CN109961150B - 一种应对退相干的量子程序变换方法及系统 - Google Patents
一种应对退相干的量子程序变换方法及系统 Download PDFInfo
- Publication number
- CN109961150B CN109961150B CN201910240684.5A CN201910240684A CN109961150B CN 109961150 B CN109961150 B CN 109961150B CN 201910240684 A CN201910240684 A CN 201910240684A CN 109961150 B CN109961150 B CN 109961150B
- Authority
- CN
- China
- Prior art keywords
- quantum
- program
- quantum gate
- layer
- succ
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Landscapes
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
- Optical Modulation, Optical Deflection, Nonlinear Optics, Optical Demodulation, Optical Logic Elements (AREA)
Abstract
本发明公开了一种应对退相干的量子程序变换方法及系统,所述方法包括:获取待变换程序,通过解析器,对待变换程序中的头文件以及宏展开,得到一个量子门序列;将量子门序列经并行分析器分析得到分层的量子门束;基于分层的量子门束,通过代码变换器进行程序变换。本发明能够通过程序变换来减少量子比特在运行中处于叠加态的时长,降低量子比特在程序运行时退相干的程度,从而降低量子程序运行时的错误率。
Description
技术领域
本发明涉及量子程序技术领域,尤其涉及一种应对退相干的量子程序变换方法及系统。
背景技术
量子计算是利用量子力学现象(如叠加和纠缠等)进行计算的设备。目前已被证明量子计算可以在量子多项式时间内解决经典计算机中的某些NP难问题,例如Shor算法能在量子多项式时间内求解大数质因子和离散对数难题,使破解RSA公钥成为可能。
在量子计算中,信息存储在量子比特中。与经典比特类似,量子比特也有状态,它可以是|0>或|1>这两种基态,也可以是|0>和|1>的线性组合,称为叠加态。比如,单量子比特的状态|ψ>可表示为:
|ψ>=α|0>+β|1> (1)
α和β为复数,满足|α|2+|β|2=1,故单量子比特状态也可以表示成维度为2的向量(α,β)T,该向量的模长为1。当多个量子比特纠缠在一起时,对应的基态数会呈指数上升。N量子比特纠缠的系统有2N种基态,系统状态可表示为基态的线性叠加。比如双量子比特系统就有|00>,|01>,|10>,|11>四个基态,其状态也可以处于这四个基态的线性叠加,如:
|ψ>=a|00>+b|01>+c|10>+d|11>
a,b,c,d为复数,且满足|a|2+|b|2+|c|2+|d|2=1。该状态同样可表示为一个模长为1、维度为4的向量(a,b,c,d)T。
利用量子比特的叠加性质,量子计算机储存信息的能力会随比特数增加而呈指数级上升。对量子系统的测量操作会使系统随机地坍缩到基态,概率取决于每个基态前的系数。如对于公式(1)中的量子比特,有|α|2的概率坍缩到|0>、|β|2的概率坍缩到|1>。
在量子计算机上运行的量子程序的主体是一段对量子比特的操作序列,每次操作可以改变一个或多个量子比特的状态。量子程序通过操作改变量子比特的状态来实现算法。对量子比特的操作称为量子门。例如图5为一段OpenQASM代码,第1-2行的qreg与creg分别声明了量子比特与经典寄存器,之后的每一行是一个作用于1个或2个量子比特的量子门操作。由于一个量子比特的状态可以表示为一个模长为1的向量,因此一个量子门可以等价于一个矩阵。将量子门作用于量子比特就相当于在量子比特对应的向量右侧乘上量子门代表的矩阵。
量子程序在运行时有很强的并行能力。由于量子程序的主体是一系列量子门,如果两个量子门所要操作的量子比特没有重叠,那么称这两个门可并行,两两相互并行的量子门可以同时执行。例如,图5中第3行是对量子比特q[1]操作的量子门,第4行是对量子比特q[2]操作的量子门,因此这两个量子门可以同时执行。为了减少程序运行的时间,量子计算机可以采用最大并行化策略,即每个时刻执行尽可能多的量子门。基于量子程序的并行性和最大并行化策略,可以将程序表示为分层图。例如图6即为图5代码分层后得到的结果。每一层内的量子门都可以在同一时间点开始执行。
量子程序可以运行在实体量子计算机或者量子程序模拟器上。目前完全公开使用的量子计算机只有IBMQ提供的5量子比特计算机Yorktown与Tenerife;而ProjectQ、Qiskit、ScaffCC、HiQ等平台都提供量子程序模拟器。
目前比较常见的独立量子编程语言有IBMQ推出的量子电路级别的OpenQASM、微软的Q#等;还有可以嵌入Python中供程序员使用的语言ProjectQ、Quil等。高级编程语言被编译器翻译为量子汇编语言或者量子微指令集。其中OpenQASM作为一种量子汇编语言可以在IBMQ提供的量子计算机上运行。
量子计算机在2018年进入NISQ(嘈杂中型量子)阶段。该阶段的量子计算机的特点有:
1)由50到100个量子比特构成。一方面,该量子比特数量已经超过经典计算机在合理时间能模拟的上限,靠经典计算机模拟量子程序的运行需要付出极大的代价。另一方面,该量子比特数还远远不足以在量子计算机层面完成和经典计算机类似的比特纠错功能。因此量子计算机只能在无纠错的环境下完成对大型量子程序的执行。
2)硬件含有大量噪声,导致信息失真。处于叠加态的量子比特会随时间推移和周围的物理环境产生纠缠,导致量子比特中储存的信息失真,这一现象称为退相干。此外由于施加在量子比特上的量子门受限于当前的硬件限制,也会存在一定的错误率,使比特储存的信息在运行过程中失真。在超导量子计算系统中,普通操作的最低错误率在0.1%量级,测量操作的错误率最低在1%量级。
在目前使用最广泛的超导量子计算机中,常见的量子退相干是由能量流失引起的。在超导量子计算机中,对于单个量子比特,状态|0>是能量最低的状态,也是最稳定的状态。所有处于其他状态的系统的能量会随时间流失,逐渐向状态|0>坍缩。量子比特的退相干程度随时间呈指数级上升。量子计算机初始化时,会将所有量子比特置于最稳定的状态|0>。因此这里将量子比特处于|0>以外状态的持续时间称为量子比特的生存期。
程序员往往并不了解量子计算机底层实现的原理,编写的程序可能存在过早地让量子比特从状态|0>进入其他状态。同时,程序员所编写的代码存在空间局部性,在程序的每一部分倾向于集中使用部分比特。这也会使得部分量子比特过早地进入叠加态。而这一现象会不必要地增加量子比特处于叠加态的时间,在退相干的影响下使程序运行时的错误率上升。
因此,如何减少量子比特在运行中处于叠加态的时长,降低量子比特在程序运行时退相干的程度,从而降低量子程序运行时的错误率,是一项亟待解决的问题。
发明内容
有鉴于此,本发明提供了一种应对退相干的量子程序变换方法,能够通过程序变换来减少量子比特在运行中处于叠加态的时长,降低量子比特在程序运行时退相干的程度,从而降低量子程序运行时的错误率。
本发明提供了一种应对退相干的量子程序变换方法,包括:
获取待变换程序;
通过解析器,对所述待变换程序中的头文件以及宏展开,得到一个量子门序列;
将所述量子门序列经并行分析器分析得到分层的量子门束;
基于所述分层的量子门束,通过代码变换器进行程序变换。
优选地,所述获取待变换程序包括:
获取手工编写的所述待变换程序。
优选地,所述获取待变换程序包括:
获取从量子平台转换得到的所述待变换程序。
优选地,所述将所述量子门序列经并行分析器分析得到分层的量子门束,包括:
将所述量子门序列经并行分析器按最大并行化处理进行分层,得到分层的量子门束。
优选地,所述基于所述分层的量子门束,通过代码变换器进行程序变换,包括:
基于所述分层的量子门束,按分层顺序依次访问其中的每一个量子门,若被访问的量子门没有被遍历过,则将其标记,然后调用函数对其进行调整。
一种应对退相干的量子程序变换系统,包括:
获取模块,用于获取待变换程序;
解析模块,用于通过解析器,对所述待变换程序中的头文件以及宏展开,得到一个量子门序列;
分析模块,用于将所述量子门序列经并行分析器分析得到分层的量子门束;
变换模块,用于基于所述分层的量子门束,通过代码变换器进行程序变换。
优选地,所述获取模块在执行获取待变换程序时,具体用于:
获取手工编写的所述待变换程序。
优选地,所述获取模块在执行获取待变换程序时,具体用于:
获取从量子平台转换得到的所述待变换程序。
优选地,所述分析模块在执行将所述量子门序列经并行分析器分析得到分层的量子门束时,具体用于:
将所述量子门序列经并行分析器按最大并行化处理进行分层,得到分层的量子门束。
优选地,所述变化模块在执行基于所述分层的量子门束,通过代码变换器进行程序变换时,具体用于:
基于所述分层的量子门束,按分层顺序依次访问其中的每一个量子门,若被访问的量子门没有被遍历过,则将其标记,然后调用函数对其进行调整。
综上所述,本发明公开了一种应对退相干的量子程序变换方,首先获取待变换程序,然后通过解析器,对待变换程序中的头文件以及宏展开,得到一个量子门序列,将量子门序列经并行分析器分析得到分层的量子门束,基于分层的量子门束,通过代码变换器进行程序变换。本发明能够通过程序变换来减少量子比特在运行中处于叠加态的时长,降低量子比特在程序运行时退相干的程度,从而降低量子程序运行时的错误率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明公开的一种应对退相干的量子程序变换方法实施例1的流程图;
图2为本发明公开的一种应对退相干的量子程序变换方法实施例2的流程图;
图3为本发明公开的一种应对退相干的量子程序变换系统实施例1的结构示意图;
图4为本发明公开的一种应对退相干的量子程序变换系统实施例2的结构示意图;
图5为本发明公开的一段OpenQASM代码;
图6为本发明公开的将OpenQASM代码经过分层处理所得的分层图;
图7为本发明公开的在IBMQ上进行测试的OpenQASM代码;
图8为本发明公开的图7中的测试代码在IBMQ上的测量结果;
图9为本发明公开的在模拟器中的测试算法;
图10为本发明公开的图9中算法在模拟器内的测试结果;
图11为本发明公开的一种Transformer的具体例子;
图12为本发明公开的一种经过变换所得分层图;
图13为本发明公开的对图5所示的代码完成变换后的代码。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
如图1所示,为本发明公开的一种应对退相干的量子程序变换方法实施例1的流程图,所述方法可以包括以下步骤:
S101、获取待变换程序;
当需要应对退相干时,首先获取待进行程序变换的程序。例如,获取待进行程序变换的OpenQASM程序。
S102、通过解析器,对待变换程序中的头文件以及宏展开,得到一个量子门序列;
当获取到待变换程序后,进一步将获取到的待变换程序经过Parser分析器,将程序中的头文件以及宏展开,得到一个量子门的序列。例如,将输入的OpenQASM程序经过Parser分析器,将程序中的头文件以及宏展开,得到一个量子门的序列。
S103、将量子门序列经并行分析器分析得到分层的量子门束;
在得到一个量子门序列后,进一步将量子门序列经并行分析器ParallelismAnalyzer分析得到分层的量子门。
S104、基于分层的量子门束,通过代码变换器进行程序变换。
最后,再利用分层的量子门束信息,由代码变换器实施程序变换。
综上所述,在上述实施例中,首先获取待变换程序,然后通过解析器,对待变换程序中的头文件以及宏展开,得到一个量子门序列,将量子门序列经并行分析器分析得到分层的量子门束,基于分层的量子门束,通过代码变换器进行程序变换。本发明能够通过程序变换来减少量子比特在运行中处于叠加态的时长,降低量子比特在程序运行时退相干的程度,从而降低量子程序运行时的错误率。
具体的,在上述实施例中,所述待变换程序可以通过手工编写得到,或者从量子平台转换得到。例如,OpenQASM程序可以手工编写或者从Qiskit、ScaffCC、ProjectQ等量子平台转换得到。
如图2所示,为本发明公开的一种应对退相干的量子程序变换方法实施例1的流程图,所述方法可以包括以下步骤:
S201、获取待变换程序;
当需要应对退相干时,首先获取待进行程序变换的程序。例如,获取待进行程序变换的OpenQASM程序。
S202、通过解析器,对待变换程序中的头文件以及宏展开,得到一个量子门序列;
当获取到待变换程序后,进一步将获取到的待变换程序经过Parser分析器,将程序中的头文件以及宏展开,得到一个量子门的序列。例如,将输入的OpenQASM程序经过Parser分析器,将程序中的头文件以及宏展开,得到一个量子门的序列。
S203、将量子门序列经并行分析器按最大并行化处理进行分层,得到分层的量子门束;
量子程序有很强的并行能力,可并行的量子门可以同时执行。因此,经过分析器处理后的量子门序列会由并行分析器按最大并行化处理进行分层,处于同一层内的量子门(称为量子门束)都是两两互相可并行的;然后,按照量子门的执行顺序在每一层内尽可能多地放入量子门操作。以图5所示代码转换为图6为例,首先初始化由各个量子比特组成的第0层以及空的第一层,并将图5中的第一条指令h q[1]放入第一层。由于第二条指令h q[2]可与第一层中的所有指令(目前只有h q[1])并行执行,因此可以放入第一层。第三条指令cx q[2],q[3]与指令h q[2]有重叠的量子比特,故不能放在第一层,因此创建第二层并将cx q[2],q[3]置于第二层,该指令结点为第0层的q[2]、q[3]的后继。以此方法将所有指令填入层中得到图6所示的分层的量子门束格式。
S204、基于分层的量子门束,按分层顺序依次访问其中的每一个量子门,若被访问的量子门没有被遍历过,则将其标记,然后调用函数对其进行调整。
将所有量子门执行完分层操作后,将分层结果传递给代码变换器,即可开始对量子程序的变换。
变换算法必须要保证变换后的程序与原程序有相同的语义,即对于程序所涉及的任意一个量子比特,两个程序施加于该量子比特的量子门执行完毕后(进行测量操作前),该量子比特所处的状态(注意这里不考虑误差率)要完全一致。因此,对于每一个量子比特,其所经历的一系列量子门的顺序不能改变,这样量子比特最后的状态才能保证相同。例如在经过了并行分析器得到的图6中,量子比特q[1]在第1层经过了量子门h,在第4层经过了量子门cx,则变换后这个h门必须在cx门之前执行,这样才能保证比特q[1]的状态不变。
代码变换器的算法的执行过程为:按分层顺序依次访问其中的每一个量子门,若该量子门没有被遍历过(visited==False),则将其标记(visited=True),然后调用adjust函数对其进行调整。为表示方便,对于任意一个量子门τ,其在图6形式的分层图中所在的层次数表示为L(τ),其所涉及的量子比特集合表示为qset(τ)。假设调用adjust函数进行调整的量子门为τ,adjust函数的过程如下:
1)创建一个量子比特集合Q,Q=qset(τ);
2)创建一个量子门集合的栈S,并将集合{τ}推入S中。记cur=L(τ);
3)沿cur向下寻找后继层succ。后继层succ>cur应满足:succ层中的所有量子门所涉及的量子比特与Q的交集不为空,且对于任意有cur<k<succ的k层不满足这个性质;
4)创建空量子门集合tmp,将succ层中所有涉及比特与Q交集不为空的量子门加入集合tmp,并从succ层中移除。将集合tmp推入栈S。将tmp中量子门所涉及的量子比特并入集合Q。将tmp中所有量子门的visited标记为True;
5)若succ所表示层已经是程序最后一层或者该层有测量操作,进入下一步,否则cur=succ,返回第3步;
6)令i=1,执行以下循环:
while(栈S不为空):
tmp=S.pop
将tmp与第succ-i层合并
i=i+1
执行完毕后adjust函数结束。
综上所述,衡量算法带来的优化主要从量子程序的准确率和量子比特的生存期两个方面。
目前可公开使用的量子计算模拟器都没有考虑量子计算机在硬件上的噪声问题,量子程序在其上的运行可以达到100%的正确率。
为了检测变换算法对量子程序正确率的提升,需要在IBM提供的真实量子计算机上进行测试。
这里使用贝尔态的准确率来检测本发明算法的效果。使用的测试代码为图7所示的两段OpenQASM代码。其中图7中的(a)为变换前代码,图7中的(b)为对图7中的(a)中的代码使用了本发明的算法后得到的代码。这段代码的功能是将量子比特a[1]与b[0]纠缠成为贝尔态。然后对两个比特进行测量。处于贝尔态的两个量子比特对的测量结果应是|00>和|11>中的一种,且概率各为50%。然而由于量子硬件本身带有噪声,量子门也有一定的错误率,会出现测量结果为|01>和|10>的情况。结果为|01>和|10>占所有测量结果的比例称为错误率。图7中的(a)中的Before所示的代码在产生贝尔态的过程中存在量子比特过早进入叠加态的现象,而经过本发明的算法变换后消除了这一现象,在不改变程序语义的情况下减少了量子比特a[1]的生存期,从而得到图7中的(b)中After所示的代码。为了抹除其他因素的影响,对图7所示的两段代码在IBMQ量子计算机上交替进行了20组测试,每组测试运行其中一份代码1000次。
图8展示出了两段代码在IBMQ提供的量子计算机IBMQ5Tenerife上的测量结果。从测量结果可以看到经过算法变换,错误率从14.24%下降到了12.64%。同比降低了11%。
然而目前的量子计算机存在很高的错误率,同时公开的量子计算机只支持5个量子比特,远远达不到大部分量子算法的需求。而量子程序模拟器虽然不能模拟出量子计算机的噪声,但是可以计算出程序的运行时间和各比特的生存期。由于量子比特的退相干效应,量子比特的生存期也会影响到程序的正确率。因此可以通过量子程序模拟器计算一些知名量子算法变换前后的执行时间(Execution time)、最长量子比特生存期(Longestlifetime)、平均量子比特生存期(Average lifetime)。图9列出了所测试的量子算法。其中3G,DE,4QFT和5QFT来自Qiskit,IBM6来自Project Q。Qiskit还提供了4IQFT算法,同时可以将其扩展到更多比特的NIQFT算法。
图10展示出了模拟的结果。图中数字的单位为一个单比特量子门运行的时间,一般为20ns。
可以看到所有测试算法的量子比特平均生存期和大部分算法的最长生存期经过变换后都减少了,同时本发明的算法还减少了部分算法的总运行时间。3G和DE算法分别只使用了3个和2个量子比特,因此平均生存期减少较小。当算法使用的量子比特增多时,经过变换后量子比特的平均生存期减少得越多。5QFT和IBM6减少了约1/5,而对于NIQFT,4IQFT减少了约1/3,而64IQFT的调用函数adjust变换后平均生存期只有变换前的1/17,效果十分显著。这是程序有空间局部性导致的。
为了更加清楚的描述本发明所提供的技术方案,下面以具体的实例进行说明:
如图11所示,展示了以图5所示的代码经过算法变换的过程作为例子。图5所示的代码经过Parser和并行分析器Parallelism Analyzer的分析后得到图11中的(a),然后对图11中的(a)的格式的代码执行Transformer的变换。首先,对图11中的(a)中标注的A调用adjust函数,按照adjust函数的过程调用一次后会得到图11中的(b);而后在图11中的(b)中Transformer继续对没有遍历过的指令D调用函数adjust,得到图11中的(c);将图11中的(c)内的空层全部去掉即得到图12所示的变换后的分层代码。最后,将每层中的量子门按顺序写出即可得到图13所示的变换完成的程序。这段程序可以直接在IBMQ提供的平台上运行。经过变换后量子比特q[1]的生存期被缩短了,同时总的执行时间从7层减少为了5层。
如图3所示,为本发明公开的一种应对退相干的量子程序变换系统实施例1的结构示意图,所述系统可以包括:
获取模块301,用于获取待变换程序;
当需要应对退相干时,首先获取待进行程序变换的程序。例如,获取待进行程序变换的OpenQASM程序。
解析模块302,用于通过解析器,对待变换程序中的头文件以及宏展开,得到一个量子门序列;
当获取到待变换程序后,进一步将获取到的待变换程序经过Parser分析器,将程序中的头文件以及宏展开,得到一个量子门的序列。例如,将输入的OpenQASM程序经过Parser分析器,将程序中的头文件以及宏展开,得到一个量子门的序列。
分析模块303,用于将量子门序列经并行分析器分析得到分层的量子门束;
在得到一个量子门序列后,进一步将量子门序列经并行分析器ParallelismAnalyzer分析得到分层的量子门。
变换模块304,用于基于分层的量子门束,通过代码变换器进行程序变换。
最后,再利用分层的量子门束信息,由代码变换器实施程序变换。
综上所述,在上述实施例中,首先获取待变换程序,然后通过解析器,对待变换程序中的头文件以及宏展开,得到一个量子门序列,将量子门序列经并行分析器分析得到分层的量子门束,基于分层的量子门束,通过代码变换器进行程序变换。本发明能够通过程序变换来减少量子比特在运行中处于叠加态的时长,降低量子比特在程序运行时退相干的程度,从而降低量子程序运行时的错误率。
具体的,在上述实施例中,所述待变换程序可以通过手工编写得到,或者从量子平台转换得到。例如,OpenQASM程序可以手工编写或者从Qiskit、ScaffCC、ProjectQ等量子平台转换得到。
如图4所示,为本发明公开的一种应对退相干的量子程序变换系统实施例2的结构示意图,所述系统可以包括:
获取模块401,用于获取待变换程序;
当需要应对退相干时,首先获取待进行程序变换的程序。例如,获取待进行程序变换的OpenQASM程序。
解析模块402,用于通过解析器,对待变换程序中的头文件以及宏展开,得到一个量子门序列;
当获取到待变换程序后,进一步将获取到的待变换程序经过Parser分析器,将程序中的头文件以及宏展开,得到一个量子门的序列。例如,将输入的OpenQASM程序经过Parser分析器,将程序中的头文件以及宏展开,得到一个量子门的序列。
分析模块403,用于将量子门序列经并行分析器按最大并行化处理进行分层,得到分层的量子门束;
量子程序有很强的并行能力,可并行的量子门可以同时执行。因此,经过分析器处理后的量子门序列会由并行分析器按最大并行化处理进行分层,处于同一层内的量子门(称为量子门束)都是两两互相可并行的;然后,按照量子门的执行顺序在每一层内尽可能多地放入量子门操作。以图5所示代码转换为图6为例,首先初始化由各个量子比特组成的第0层以及空的第一层,并将图5中的第一条指令h q[1]放入第一层。由于第二条指令h q[2]可与第一层中的所有指令(目前只有h q[1])并行执行,因此可以放入第一层。第三条指令cx q[2],q[3]与指令h q[2]有重叠的量子比特,故不能放在第一层,因此创建第二层并将cx q[2],q[3]置于第二层,该指令结点为第0层的q[2]、q[3]的后继。以此方法将所有指令填入层中得到图6所示的分层的量子门束格式。
变换模块404,用于基于分层的量子门束,按分层顺序依次访问其中的每一个量子门,若被访问的量子门没有被遍历过,则将其标记,然后调用函数对其进行调整。
将所有量子门执行完分层操作后,将分层结果传递给代码变换器,即可开始对量子程序的变换。
变换算法必须要保证变换后的程序与原程序有相同的语义,即对于程序所涉及的任意一个量子比特,两个程序施加于该量子比特的量子门执行完毕后(进行测量操作前),该量子比特所处的状态(注意这里不考虑误差率)要完全一致。因此,对于每一个量子比特,其所经历的一系列量子门的顺序不能改变,这样量子比特最后的状态才能保证相同。例如在经过了并行分析器得到的图6中,量子比特q[1]在第1层经过了量子门h,在第4层经过了量子门cx,则变换后这个h门必须在cx门之前执行,这样才能保证比特q[1]的状态不变。
代码变换器的算法的执行过程为:按分层顺序依次访问其中的每一个量子门,若该量子门没有被遍历过(visited==False),则将其标记(visited=True),然后调用adjust函数对其进行调整。为表示方便,对于任意一个量子门τ,其在图6形式的分层图中所在的层次数表示为L(τ),其所涉及的量子比特集合表示为qset(τ)。假设调用adjust函数进行调整的量子门为τ,adjust函数的过程如下:
1)创建一个量子比特集合Q,Q=qset(τ);
2)创建一个量子门集合的栈S,并将集合{τ}推入S中。记cur=L(τ);
3)沿cur向下寻找后继层succ。后继层succ>cur应满足:succ层中的所有量子门所涉及的量子比特与Q的交集不为空,且对于任意有cur<k<succ的k层不满足这个性质;
4)创建空量子门集合tmp,将succ层中所有涉及比特与Q交集不为空的量子门加入集合tmp,并从succ层中移除。将集合tmp推入栈S。将tmp中量子门所涉及的量子比特并入集合Q。将tmp中所有量子门的visited标记为True;
5)若succ所表示层已经是程序最后一层或者该层有测量操作,进入下一步,否则cur=succ,返回第3步;
6)令i=1,执行以下循环:
while(栈S不为空):
tmp=S.pop
将tmp与第succ-i层合并
i=i+1
执行完毕后adjust函数结束。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (8)
1.一种应对退相干的量子程序变换方法,其特征在于,包括:
获取待变换程序;
通过解析器,对所述待变换程序中的头文件以及宏展开,得到一个量子门序列;
将所述量子门序列经并行分析器分析得到分层的量子门束;
基于所述分层的量子门束,通过代码变换器进行程序变换;
所述基于所述分层的量子门束,通过代码变换器进行程序变换,包括:
基于所述分层的量子门束,按分层顺序依次访问其中的每一个量子门τ,若被访问的量子门没有被遍历过,则将其标记,然后调用函数对其进行调整;
所述函数为adjust函数,所述调用函数对其进行调整包括:
1)创建一个量子比特集合Q,Q=qset(τ);
2)创建一个量子门集合的栈S,并将集合{τ}推入S中;记cur=L(τ);
3)沿cur向下寻找后继层succ,后继层succ>cur应满足:succ层中的所有量子门所涉及的量子比特与Q的交集不为空,且对于任意有cur<k<succ的k层不满足succ层中的所有量子门所涉及的量子比特与Q的交集不为空;
4)创建空量子门集合tmp,将succ层中所有涉及比特与Q交集不为空的量子门加入集合tmp,并从succ层中移除,将集合tmp推入栈S,将tmp中量子门所涉及的量子比特并入集合Q,将tmp中所有量子门的visited标记为True;
5)若succ所表示层已经是程序最后一层或者该层有测量操作,进入下一步,否则cur=succ,返回第3步;
6)令i=1,执行以下循环:
while(栈S不为空):
tmp=S.pop
将tmp与第succ-i层合并
i=i+1
执行完毕后adjust函数结束。
2.根据权利要求1所述的方法,其特征在于,所述获取待变换程序包括:
获取手工编写的所述待变换程序。
3.根据权利要求1所述的方法,其特征在于,所述获取待变换程序包括:
获取从量子平台转换得到的所述待变换程序。
4.根据权利要求1所述的方法,其特征在于,所述将所述量子门序列经并行分析器分析得到分层的量子门束,包括:
将所述量子门序列经并行分析器按最大并行化处理进行分层,得到分层的量子门束。
5.一种应对退相干的量子程序变换系统,其特征在于,包括:
获取模块,用于获取待变换程序;
解析模块,用于通过解析器,对所述待变换程序中的头文件以及宏展开,得到一个量子门序列;
分析模块,用于将所述量子门序列经并行分析器分析得到分层的量子门束;
变换模块,用于基于所述分层的量子门束,通过代码变换器进行程序变换;
所述变换模块在执行基于所述分层的量子门束,通过代码变换器进行程序变换时,具体用于:
基于所述分层的量子门束,按分层顺序依次访问其中的每一个量子门τ,若被访问的量子门没有被遍历过,则将其标记,然后调用函数对其进行调整;
所述函数为adjust函数,所述调用函数对其进行调整包括:
1)创建一个量子比特集合Q,Q=qset(τ);
2)创建一个量子门集合的栈S,并将集合{τ}推入S中;记cur=L(τ);
3)沿cur向下寻找后继层succ,后继层succ>cur应满足:succ层中的所有量子门所涉及的量子比特与Q的交集不为空,且对于任意有cur<k<succ的k层不满足succ层中的所有量子门所涉及的量子比特与Q的交集不为空;
4)创建空量子门集合tmp,将succ层中所有涉及比特与Q交集不为空的量子门加入集合tmp,并从succ层中移除,将集合tmp推入栈S,将tmp中量子门所涉及的量子比特并入集合Q,将tmp中所有量子门的visited标记为True;
5)若succ所表示层已经是程序最后一层或者该层有测量操作,进入下一步,否则cur=succ,返回第3步;
6)令i=1,执行以下循环:
while(栈S不为空):
tmp=S.pop
将tmp与第succ-i层合并
i=i+1
执行完毕后adjust函数结束。
6.根据权利要求5所述的系统,其特征在于,所述获取模块在执行获取待变换程序时,具体用于:
获取手工编写的所述待变换程序。
7.根据权利要求5所述的系统,其特征在于,所述获取模块在执行获取待变换程序时,具体用于:
获取从量子平台转换得到的所述待变换程序。
8.根据权利要求5所述的系统,其特征在于,所述分析模块在执行将所述量子门序列经并行分析器分析得到分层的量子门束时,具体用于:
将所述量子门序列经并行分析器按最大并行化处理进行分层,得到分层的量子门束。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910240684.5A CN109961150B (zh) | 2019-03-27 | 2019-03-27 | 一种应对退相干的量子程序变换方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910240684.5A CN109961150B (zh) | 2019-03-27 | 2019-03-27 | 一种应对退相干的量子程序变换方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109961150A CN109961150A (zh) | 2019-07-02 |
CN109961150B true CN109961150B (zh) | 2021-05-07 |
Family
ID=67025072
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910240684.5A Active CN109961150B (zh) | 2019-03-27 | 2019-03-27 | 一种应对退相干的量子程序变换方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109961150B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110516810B (zh) * | 2019-08-29 | 2022-08-12 | 合肥本源量子计算科技有限责任公司 | 一种量子程序的处理方法、装置、存储介质和电子装置 |
CN110569979B (zh) * | 2019-09-09 | 2022-09-06 | 中国科学技术大学 | 面向嘈杂中型量子设备的逻辑-物理比特重映射方法 |
CN110889506A (zh) * | 2019-10-29 | 2020-03-17 | 合肥本源量子计算科技有限责任公司 | 生成量子指令的方法、设备、系统及电子设备 |
CN113269325B (zh) * | 2021-06-07 | 2022-11-25 | 清华大学 | 基于指令重排的量子程序执行方法及装置 |
CN115409195B (zh) * | 2022-08-25 | 2023-04-25 | 中国人民解放军战略支援部队信息工程大学 | 一种基于qasm编程架构的量子程序可视化推演方法及装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP2954416A1 (en) * | 2013-02-05 | 2015-12-16 | D-Wave Systems Inc. | Systems and methods for error correction in quantum computation |
CN105580363A (zh) * | 2013-02-11 | 2016-05-11 | 刘世昌 | 实现量子计算机、量子通讯、裸视4d全息电视机系统的方法 |
WO2017209791A1 (en) * | 2016-06-02 | 2017-12-07 | Google Llc | Training quantum evolutions using sublogical controls |
CN108647790A (zh) * | 2018-05-16 | 2018-10-12 | 合肥本源量子计算科技有限责任公司 | 用于统一量子计算机和量子虚拟机的接口系统及方法 |
CN109376866A (zh) * | 2018-09-17 | 2019-02-22 | 合肥本源量子计算科技有限责任公司 | 元数据的记录方法及装置、量子程序的运行方法及装置 |
-
2019
- 2019-03-27 CN CN201910240684.5A patent/CN109961150B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP2954416A1 (en) * | 2013-02-05 | 2015-12-16 | D-Wave Systems Inc. | Systems and methods for error correction in quantum computation |
CN105580363A (zh) * | 2013-02-11 | 2016-05-11 | 刘世昌 | 实现量子计算机、量子通讯、裸视4d全息电视机系统的方法 |
WO2017209791A1 (en) * | 2016-06-02 | 2017-12-07 | Google Llc | Training quantum evolutions using sublogical controls |
CN108647790A (zh) * | 2018-05-16 | 2018-10-12 | 合肥本源量子计算科技有限责任公司 | 用于统一量子计算机和量子虚拟机的接口系统及方法 |
CN109376866A (zh) * | 2018-09-17 | 2019-02-22 | 合肥本源量子计算科技有限责任公司 | 元数据的记录方法及装置、量子程序的运行方法及装置 |
Non-Patent Citations (1)
Title |
---|
"A software methodology for compiling quantum programs";T. Hner,等;《Quantum Science and Technology》;20160430;第3卷(第2期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN109961150A (zh) | 2019-07-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109961150B (zh) | 一种应对退相干的量子程序变换方法及系统 | |
Shi et al. | Optimized compilation of aggregated instructions for realistic quantum computers | |
US7861226B1 (en) | Constraint solver to code based test data generation for improving software reliability and security | |
US7386521B2 (en) | Automatic test program generation using extended conditional constraint satisfaction | |
US8181163B2 (en) | Program synthesis and debugging using machine learning techniques | |
US7174540B2 (en) | Component dependency matrices | |
Balzer | Transformational implementation: An example | |
DE102020110536A1 (de) | Verfahren, Systeme, Herstellungsgegenstände und Vorrichtungen für ein kontext- und komplexitätsbewusstes Empfehlungssystem zur verbesserten Softwareentwicklungseffizienz | |
CN110149800B (zh) | 一种用于处理与源程序的源代码相关联的抽象语法树的装置 | |
US20110138369A1 (en) | Feedback-Directed Call Graph Expansion | |
JPH03111971A (ja) | ベクトル化診断方式 | |
CN110569979A (zh) | 面向嘈杂中型量子设备的逻辑-物理比特重映射方法 | |
US9009670B2 (en) | Automated testing of application program interfaces using genetic algorithms | |
Bartlett et al. | An ordering heuristic to develop the binary decision diagram based on structural importance | |
Dimovski | Program verification using symbolic game semantics | |
KR102464359B1 (ko) | 합성 도메인에서 실제 도메인으로 적응하기 위한 이미지 변환 장치 및 방법 | |
Dini et al. | Optimizing parallel Korat using invalid ranges | |
CN113222160B (zh) | 一种量子态的转换方法及装置 | |
Katel et al. | High performance GPU code generation for matrix-matrix multiplication using MLIR: some early results | |
Heinen et al. | Verifying pointer programs using graph grammars | |
US20090259454A1 (en) | Automatic test program generation using extended conditional constraint satisfaction | |
Bofill et al. | A system for solving constraint satisfaction problems with SMT | |
Hsu | The key to a data parallel compiler | |
Quist et al. | Optimizing quantum space using spooky pebble games | |
Larson | Program analysis too loopy? Set the loops aside |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |