量子电路处理方法、装置及电子设备转让专利

申请号 : CN202310181527.8

文献号 : CN116187458B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 方堃张慕男

申请人 : 北京百度网讯科技有限公司

摘要 :

本公开提供了一种量子电路处理方法、装置及电子设备,涉及量子计算技术领域,具体涉及量子电路技术领域。具体实现方案为:获取第一量子电路的第一指令列表;基于第一指令列表,获取第一量子电路的操作指令执行顺序的依赖关系;基于依赖关系,按照操作指令所作用的量子位标号从小到大的顺序对第一量子电路的操作指令进行重排序,得到第一量子电路的第二指令列表;基于第二指令列表,对第一量子电路进行等效编译,得到与第一量子电路等效的第二量子电路的第三指令列表,第三指令列表包括:重置操作的操作指令,重置操作的操作指令位于量子测量操作的操作指令之后,第二量子电路的量子比特数量小于第一量子电路的量子比特数量。

权利要求 :

1.一种量子电路处理方法,包括:

获取第一量子电路的第一指令列表,所述第一指令列表包括:量子测量操作的操作指令和量子门操作的操作指令,所述量子测量操作的操作指令位于量子门操作的操作指令之后;

基于所述第一指令列表,获取所述第一量子电路的操作指令执行顺序的依赖关系;所述第一量子电路的操作指令执行顺序的依赖关系指的是所述第一量子电路中当前操作指令执行之前必须执行完成的操作指令;

基于所述依赖关系,按照操作指令所作用的量子位标号从小到大的顺序对所述第一量子电路的操作指令进行重排序,得到所述第一量子电路的第二指令列表;

基于所述第二指令列表,对所述第一量子电路进行等效编译,得到与所述第一量子电路等效的第二量子电路的第三指令列表,所述第三指令列表包括:重置操作的操作指令,所述重置操作的操作指令位于量子测量操作的操作指令之后,所述重置操作用于将量子比特的量子态重置至零态,所述第二量子电路的量子比特数量小于所述第一量子电路的量子比特数量;

所述基于所述第二指令列表,对所述第一量子电路进行等效编译,得到与所述第一量子电路等效的第二量子电路的第三指令列表,包括:针对所述第二指令列表中每一操作指令,基于为所述操作指令所作用的量子位分配的寄存单元对所述操作指令进行等效编译,以将所述操作指令编译成与所述操作指令等效的第二量子电路中的操作指令,得到与所述第一量子电路等效的第二量子电路的第三指令列表;

其中,所述等效编译过程中,在等效编译后的量子测量操作的操作指令之后添加重置操作的操作指令,以将分配给量子测量操作的操作指令所作用的量子位的寄存单元进行回收,并重新分配给所述第二指令列表中未编译的操作指令所作用的量子位。

2.根据权利要求1所述的方法,其中,所述基于所述第一指令列表,获取所述第一量子电路的操作指令执行顺序的依赖关系,包括:获取所述第一指令列表中操作指令所作用的量子位;

基于操作指令所作用的量子位在所述第一量子电路的量子操作中出现的次序,对所述操作指令进行编号,得到所述第一量子电路的操作指令的编号信息;

基于所述操作指令的编号信息,查找所述第一量子电路中与所述操作指令关联的其他操作指令,得到所述依赖关系,所述其他操作指令所作用的量子位包括所述操作指令所作用的量子位,所述其他操作指令的执行顺序在所述操作指令之前。

3.根据权利要求2所述的方法,其中,所述基于所述操作指令的编号信息,查找所述第一量子电路中与所述操作指令关联的其他操作指令,得到所述依赖关系,包括:基于所述操作指令的编号信息,获取目标编号信息,所述目标编号信息中量子位标号与所述操作指令的编号信息中量子位标号相同,所述目标编号信息中量子位在所述第一量子电路的量子操作中出现的次序小于所述操作指令的编号信息中所述量子位在所述第一量子电路的量子操作中出现的次序;

获取所述目标编号信息对应的所述其他操作指令,得到所述依赖关系,所述其他操作指令为所述第一量子电路中执行顺序在所述操作指令之前,且与所述操作指令相邻的操作指令。

4.根据权利要求1所述的方法,其中,所述基于所述依赖关系,按照操作指令所作用的量子位标号从小到大的顺序对所述第一量子电路的操作指令进行重排序,得到所述第一量子电路的第二指令列表,包括:按照操作指令所作用的量子位标号从小到大的顺序对所述第一量子电路的操作指令进行第一重排序,得到所述第一量子电路的第四指令列表,所述第四指令列表中,排序在前的操作指令中目标量子位的标号小于排序在后的操作指令中目标量子位标号,且针对所作用的量子位标号相同的操作指令按照操作指令在所述第一量子电路中的相对顺序排列,所述目标量子位为操作指令中标号小的量子位;

基于所述依赖关系,对所述第四指令列表进行第二重排序,得到所述第二指令列表。

5.根据权利要求4所述的方法,其中,所述基于所述依赖关系,对所述第四指令列表进行第二重排序,得到所述第二指令列表,包括:对所述第四指令列表进行针对操作指令的遍历,并针对当前遍历的操作指令将所述第四指令列表进行拆分,得到第一列表、第二列表和第三列表,所述第一列表为所述第四指令列表中排序在首位的操作指令到与所述当前遍历的操作指令相邻的前一个操作指令构成的列表,所述第二列表为所述当前遍历的操作指令构成的列表,所述第三列表为所述第四指令列表中排序在所述当前遍历的操作指令之后的操作指令构成的列表;

基于所述依赖关系中所述当前遍历的操作指令与所述第一量子电路的操作指令之间的目标依赖关系、所述第一列表、所述第二列表和所述第三列表,对所述第四指令列表进行操作指令的重排;

在所述第四指令列表遍历完成的情况下,基于重排后的所述第四指令列表确定所述第二指令列表。

6.根据权利要求5所述的方法,其中,所述基于所述依赖关系中所述当前遍历的操作指令与所述第一量子电路的操作指令之间的目标依赖关系、所述第一列表、所述第二列表和所述第三列表,对所述第四指令列表进行操作指令的重排,包括:基于所述目标依赖关系和所述第一列表,获取第一目标列表,所述第一目标列表指示所述第一列表中与所述当前遍历的操作指令之间存在所述目标依赖关系的操作指令;

基于所述第一目标列表和第二目标列表,确定第三目标列表,第二目标列表指示所述第四指令列表中与所述当前遍历的操作指令之间存在所述目标依赖关系的操作指令,所述第三目标列表为从所述第二目标列表删除所述第一目标列表后得到的列表;

在所述第三目标列表不为空集的情况下,从所述第三列表中删除所述第三目标列表指示的操作指令,得到第四列表;

将所述第一列表、所述第三目标列表指示的操作指令、所述第二列表和所述第四列表按照从前至后的顺序进行列表拼接,得到重排后的所述第四指令列表。

7.根据权利要求4所述的方法,其中,所述基于所述依赖关系,对所述第四指令列表进行第二重排序之后,还包括:将重排后的所述第四指令列表中量子测量操作的操作指令移动至目标位置,得到所述第二指令列表;

其中,所述目标位置为位于重排后的所述第四指令列表中目标操作指令之后,且与所述目标操作指令相邻的位置,所述目标操作指令所作用的量子位包括所述量子测量操作的操作指令所作用的量子位,所述第二指令列表中排序在所述目标位置之后的操作指令不包括所述量子测量操作的操作指令所作用的量子位。

8.根据权利要求1所述的方法,其中,所述基于所述第二指令列表,对所述第一量子电路进行等效编译,得到与所述第一量子电路等效的第二量子电路的第三指令列表,包括:针对所述第二指令列表中每一操作指令,执行如下操作:

获取所述操作指令所作用的量子位;

基于所述量子位和寄存单元字典,确定为所述量子位分配的第二量子电路的寄存单元的目标标识,所述寄存单元字典包括寄存单元与所述量子位的对应关系;

基于所述目标标识,对所述操作指令进行等效编译,得到与所述操作指令等效的第二量子电路中操作指令,所述第三指令列表包括等效编译得到的所述第二量子电路中操作指令。

9.根据权利要求8所述的方法,其中,所述基于所述量子位和寄存单元字典,确定为所述量子位分配的第二量子电路的寄存单元的目标标识,包括如下至少一项:在查询到所述寄存单元字典中包括所述量子位的对应关系的情况下,将所述量子位对应的寄存单元的标识确定为所述目标标识;

在查询到所述寄存单元字典中未包括所述量子位的对应关系的情况下,基于所述寄存单元字典为所述量子位分配寄存单元,将所述量子位分配的寄存单元的标识确定为所述目标标识,并基于所述量子位分配的寄存单元的标识更新所述寄存单元字典。

10.根据权利要求9所述的方法,其中,所述基于所述寄存单元字典为所述量子位分配寄存单元,包括如下至少一项:在查询到所述寄存单元字典中包括第一寄存单元的标识的情况下,将所述第一寄存单元分配给所述量子位,所述第一寄存单元为未分配给节点的寄存单元;

在查询到所述寄存单元字典中不包括所述第一寄存单元的标识的情况下,获取所述寄存单元字典所表征的寄存单元的数量,基于所述数量确定所创建的第二寄存单元的标识,并将所述第二寄存单元分配给所述量子位。

11.根据权利要求10所述的方法,其中,所述第一寄存单元为未分配给节点的寄存单元中标识最小的寄存单元。

12.根据权利要求8所述的方法,其中,所述基于所述目标标识,对所述操作指令进行等效编译,得到与所述操作指令等效的第二量子电路中操作指令,包括如下至少一项:在所述操作指令为量子门操作的操作指令的情况下,基于所述目标标识,将所述操作指令等效编译成第二量子电路中量子门操作的操作指令;

在所述操作指令为量子测量操作的操作指令的情况下,基于所述目标标识,将所述操作指令等效编译成第二量子电路中量子测量操作的操作指令,更新所述寄存单元字典,以及生成所述第二量子电路中重置操作的操作指令,更新后的所述寄存单元字典指示所述目标标识对应的寄存单元为未分配给量子位的寄存单元。

13.一种量子电路处理装置,包括:

第一获取模块,用于获取第一量子电路的第一指令列表,所述第一指令列表包括:量子测量操作的操作指令和量子门操作的操作指令,所述量子测量操作的操作指令位于量子门操作的操作指令之后;

第二获取模块,用于基于所述第一指令列表,获取所述第一量子电路的操作指令执行顺序的依赖关系;所述第一量子电路的操作指令执行顺序的依赖关系指的是所述第一量子电路中当前操作指令执行之前必须执行完成的操作指令;

重排序模块,用于基于所述依赖关系,按照操作指令所作用的量子位标号从小到大的顺序对所述第一量子电路的操作指令进行重排序,得到所述第一量子电路的第二指令列表;

等效编译模块,用于基于所述第二指令列表,对所述第一量子电路进行等效编译,得到与所述第一量子电路等效的第二量子电路的第三指令列表,所述第三指令列表包括:重置操作的操作指令,所述重置操作的操作指令位于量子测量操作的操作指令之后,所述重置操作用于将量子比特的量子态重置至零态,所述第二量子电路的量子比特数量小于所述第一量子电路的量子比特数量;

所述等效编译模块,具体用于:

针对所述第二指令列表中每一操作指令,基于为所述操作指令所作用的量子位分配的寄存单元对所述操作指令进行等效编译,以将所述操作指令编译成与所述操作指令等效的第二量子电路中的操作指令,得到与所述第一量子电路等效的第二量子电路的第三指令列表;

其中,所述等效编译过程中,在等效编译后的量子测量操作的操作指令之后添加重置操作的操作指令,以将分配给量子测量操作的操作指令所作用的量子位的寄存单元进行回收,并重新分配给所述第二指令列表中未编译的操作指令所作用的量子位。

14.根据权利要求13所述的装置,其中,所述第二获取模块包括:

第一获取子模块,用于获取所述第一指令列表中操作指令所作用的量子位;

编号子模块,用于基于操作指令所作用的量子位在所述第一量子电路的量子操作中出现的次序,对所述操作指令进行编号,得到所述第一量子电路的操作指令的编号信息;

查找子模块,用于基于所述操作指令的编号信息,查找所述第一量子电路中与所述操作指令关联的其他操作指令,得到所述依赖关系,所述其他操作指令所作用的量子位包括所述操作指令所作用的量子位,所述其他操作指令的执行顺序在所述操作指令之前。

15.根据权利要求14所述的装置,其中,所述查找子模块,具体用于:

基于所述操作指令的编号信息,获取目标编号信息,所述目标编号信息中量子位标号与所述操作指令的编号信息中量子位标号相同,所述目标编号信息中量子位在所述第一量子电路的量子操作中出现的次序小于所述操作指令的编号信息中所述量子位在所述第一量子电路的量子操作中出现的次序;

获取所述目标编号信息对应的所述其他操作指令,得到所述依赖关系,所述其他操作指令为所述第一量子电路中执行顺序在所述操作指令之前,且与所述操作指令相邻的操作指令。

16.根据权利要求13所述的装置,其中,所述重排序模块包括:

第一重排序子模块,用于按照操作指令所作用的量子位标号从小到大的顺序对所述第一量子电路的操作指令进行第一重排序,得到所述第一量子电路的第四指令列表,所述第四指令列表中,排序在前的操作指令中目标量子位的标号小于排序在后的操作指令中目标量子位标号,且针对所作用的量子位标号相同的操作指令按照操作指令在所述第一量子电路中的相对顺序排列,所述目标量子位为操作指令中标号小的量子位;

第二重排序子模块,用于基于所述依赖关系,对所述第四指令列表进行第二重排序,得到所述第二指令列表。

17.根据权利要求16所述的装置,其中,所述第二重排序子模块包括:

拆分单元,用于对所述第四指令列表进行针对操作指令的遍历,并针对当前遍历的操作指令将所述第四指令列表进行拆分,得到第一列表、第二列表和第三列表,所述第一列表为所述第四指令列表中排序在首位的操作指令到与所述当前遍历的操作指令相邻的前一个操作指令构成的列表,所述第二列表为所述当前遍历的操作指令构成的列表,所述第三列表为所述第四指令列表中排序在所述当前遍历的操作指令之后的操作指令构成的列表;

重排单元,用于基于所述依赖关系中所述当前遍历的操作指令与所述第一量子电路的操作指令之间的目标依赖关系、所述第一列表、所述第二列表和所述第三列表,对所述第四指令列表进行操作指令的重排;

确定单元,用于在所述第四指令列表遍历完成的情况下,基于重排后的所述第四指令列表确定所述第二指令列表。

18.根据权利要求17所述的装置,其中,所述重排单元,具体用于:

基于所述目标依赖关系和所述第一列表,获取第一目标列表,所述第一目标列表指示所述第一列表中与所述当前遍历的操作指令之间存在所述目标依赖关系的操作指令;

基于所述第一目标列表和第二目标列表,确定第三目标列表,第二目标列表指示所述第四指令列表中与所述当前遍历的操作指令之间存在所述目标依赖关系的操作指令,所述第三目标列表为从所述第二目标列表删除所述第一目标列表后得到的列表;

在所述第三目标列表不为空集的情况下,从所述第三列表中删除所述第三目标列表指示的操作指令,得到第四列表;

将所述第一列表、所述第三目标列表指示的操作指令、所述第二列表和所述第四列表按照从前至后的顺序进行列表拼接,得到重排后的所述第四指令列表。

19.根据权利要求16所述的装置,其中,所述重排序模块还包括:

移动子模块,用于将重排后的所述第四指令列表中量子测量操作的操作指令移动至目标位置,得到所述第二指令列表;

其中,所述目标位置为位于重排后的所述第四指令列表中目标操作指令之后,且与所述目标操作指令相邻的位置,所述目标操作指令所作用的量子位包括所述量子测量操作的操作指令所作用的量子位,所述第二指令列表中排序在所述目标位置之后的操作指令不包括所述量子测量操作的操作指令所作用的量子位。

20.根据权利要求13所述的装置,其中,所述等效编译模块包括:

第二获取子模块,用于针对所述第二指令列表中每一操作指令,获取所述操作指令所作用的量子位;

确定子模块,用于基于所述量子位和寄存单元字典,确定为所述量子位分配的第二量子电路的寄存单元的目标标识,所述寄存单元字典包括寄存单元与所述量子位的对应关系;

等效编译子模块,用于基于所述目标标识,对所述操作指令进行等效编译,得到与所述操作指令等效的第二量子电路中操作指令,所述第三指令列表包括等效编译得到的所述第二量子电路中操作指令。

21.根据权利要求20所述的装置,其中,所述确定子模块包括:

第一确定子单元,用于在查询到所述寄存单元字典中包括所述量子位的对应关系的情况下,将所述量子位对应的寄存单元的标识确定为所述目标标识;

第二确定子单元,用于在查询到所述寄存单元字典中未包括所述量子位的对应关系的情况下,基于所述寄存单元字典为所述量子位分配寄存单元,将所述量子位分配的寄存单元的标识确定为所述目标标识,并基于所述量子位分配的寄存单元的标识更新所述寄存单元字典。

22.根据权利要求21所述的装置,其中,所述第二确定子单元,具体用于:

在查询到所述寄存单元字典中包括第一寄存单元的标识的情况下,将所述第一寄存单元分配给所述量子位,所述第一寄存单元为未分配给节点的寄存单元;

在查询到所述寄存单元字典中不包括所述第一寄存单元的标识的情况下,获取所述寄存单元字典所表征的寄存单元的数量,基于所述数量确定所创建的第二寄存单元的标识,并将所述第二寄存单元分配给所述量子位。

23.根据权利要求22所述的装置,其中,所述第一寄存单元为未分配给节点的寄存单元中标识最小的寄存单元。

24.根据权利要求20所述的装置,其中,所述等效编译子模块,具体用于:

在所述操作指令为量子门操作的操作指令的情况下,基于所述目标标识,将所述操作指令等效编译成第二量子电路中量子门操作的操作指令;

在所述操作指令为量子测量操作的操作指令的情况下,基于所述目标标识,将所述操作指令等效编译成第二量子电路中量子测量操作的操作指令,更新所述寄存单元字典,以及生成所述第二量子电路中重置操作的操作指令,更新后的所述寄存单元字典指示所述目标标识对应的寄存单元为未分配给量子位的寄存单元。

25.一种电子设备,包括:

至少一个处理器;以及

与所述至少一个处理器通信连接的存储器;其中,

所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求1‑12中任一项所述的方法。

26.一种存储有计算机指令的非瞬时计算机可读存储介质,其中,所述计算机指令用于使所述计算机执行根据权利要求1‑12中任一项所述的方法。

27.一种计算机程序产品,包括计算机程序,所述计算机程序在被处理器执行时实现根据权利要求1‑12中任一项所述的方法。

说明书 :

量子电路处理方法、装置及电子设备

技术领域

[0001] 本公开涉及量子计算技术领域,尤其涉及量子电路技术领域,具体涉及一种量子电路处理方法、装置及电子设备。

背景技术

[0002] 量子计算利用量子世界中特有的运行规律,提供了一条全新的并且非常有前景的信息处理方式。在诸多特定问题上,量子算法可以带来超越经典算法的优势。例如,利用秀尔(Shor)算法,可以对大整数进行高效的分解,利用格罗弗(Grover)算法,可以更快的进行数据搜索。随着量子理论的发展,不断有新的量子算法被提出,如何高效的对这些算法进行模拟或者在真正的量子硬件上运行始终是一个重要的问题。
[0003] 目前,量子算法的经典模拟或者真机运行主要受限于量子比特的数量。在经典模拟上,由于描述量子态的列向量的长度随对应比特数呈指数增长(例如一个n比特的量子态n的列向量长度为2),经典计算机很难模拟大规模的量子算法。受计算机内存和处理器能力的限制,现有的量子电路模拟方式最多能支持模拟几十个量子比特的算法。

发明内容

[0004] 本公开提供了一种量子电路处理方法、装置及电子设备。
[0005] 根据本公开的第一方面,提供了一种量子电路处理方法,包括:
[0006] 获取第一量子电路的第一指令列表,所述第一指令列表包括:量子测量操作的操作指令和量子门操作的操作指令,所述量子测量操作的操作指令位于量子门操作的操作指令之后;
[0007] 基于所述第一指令列表,获取所述第一量子电路的操作指令执行顺序的依赖关系;
[0008] 基于所述依赖关系,按照操作指令所作用的量子位标号从小到大的顺序对所述第一量子电路的操作指令进行重排序,得到所述第一量子电路的第二指令列表;
[0009] 基于所述第二指令列表,对所述第一量子电路进行等效编译,得到与所述第一量子电路等效的第二量子电路的第三指令列表,所述第三指令列表包括:重置操作的操作指令,所述重置操作的操作指令位于量子测量操作的操作指令之后,所述重置操作用于将量子比特的量子态重置至零态,所述第二量子电路的量子比特数量小于所述第一量子电路的量子比特数量。
[0010] 根据本公开的第二方面,提供了一种量子电路处理装置,包括:
[0011] 第一获取模块,用于获取第一量子电路的第一指令列表,所述第一指令列表包括:量子测量操作的操作指令和量子门操作的操作指令,所述量子测量操作的操作指令位于量子门操作的操作指令之后;
[0012] 第二获取模块,用于基于所述第一指令列表,获取所述第一量子电路的操作指令执行顺序的依赖关系;
[0013] 重排序模块,用于基于所述依赖关系,按照操作指令所作用的量子位标号从小到大的顺序对所述第一量子电路的操作指令进行重排序,得到所述第一量子电路的第二指令列表;
[0014] 等效编译模块,用于基于所述第二指令列表,对所述第一量子电路进行等效编译,得到与所述第一量子电路等效的第二量子电路的第三指令列表,所述第三指令列表包括:重置操作的操作指令,所述重置操作的操作指令位于量子测量操作的操作指令之后,所述重置操作用于将量子比特的量子态重置至零态,所述第二量子电路的量子比特数量小于所述第一量子电路的量子比特数量。
[0015] 根据本公开的第三方面,提供了一种电子设备,包括:
[0016] 至少一个处理器;以及
[0017] 与至少一个处理器通信连接的存储器;其中,
[0018] 存储器存储有可被至少一个处理器执行的指令,该指令被至少一个处理器执行,以使至少一个处理器能够执行第一方面中的任一项方法。
[0019] 根据本公开的第四方面,提供了一种存储有计算机指令的非瞬时计算机可读存储介质,该计算机指令用于使计算机执行第一方面中的任一项方法。
[0020] 根据本公开的第五方面,提供了一种计算机程序产品,包括计算机程序,该计算机程序在被处理器执行时实现第一方面中的任一项方法。
[0021] 根据本公开的技术解决了相关技术中量子电路的经典模拟和真机运行比较难的问题,使得能够实现对大规模量子比特的量子电路进行经典模拟和真机运行。
[0022] 应当理解,本部分所描述的内容并非旨在标识本公开的实施例的关键或重要特征,也不用于限制本公开的范围。本公开的其它特征将通过以下的说明书而变得容易理解。

附图说明

[0023] 附图用于更好地理解本方案,不构成对本公开的限定。其中:
[0024] 图1是根据本公开第一实施例的量子电路处理方法的流程示意图;
[0025] 图2是一示例的静态量子电路的结构示意图;
[0026] 图3是一示例的包括经典控制量子操作的量子电路的结构示意图;
[0027] 图4是基于推迟测量原理处理后得到的静态量子电路的结构示意图;
[0028] 图5是一示例的动态量子电路的结构示意图;
[0029] 图6是各量子操作编号后的静态量子电路的结构示意图;
[0030] 图7是另一示例的静态量子电路的结构示意图;
[0031] 图8是另一示例的动态量子电路的结构示意图;
[0032] 图9是静态量子电路和动态量子电路的运行结果对比图;
[0033] 图10是根据本公开第二实施例的量子电路处理装置的结构示意图;
[0034] 图11是用来实施本公开的实施例的示例电子设备的示意性框图。

具体实施方式

[0035] 以下结合附图对本公开的示范性实施例做出说明,其中包括本公开实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本公开的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
[0036] 第一实施例
[0037] 如图1所示,本公开提供一种量子电路处理方法,包括如下步骤:
[0038] 步骤S101:获取第一量子电路的第一指令列表,所述第一指令列表包括:量子测量操作的操作指令和量子门操作的操作指令,所述量子测量操作的操作指令位于量子门操作的操作指令之后。
[0039] 本实施例中,量子电路处理方法涉及量子计算技术领域,尤其涉及量子电路技术领域,其可以广泛应用于量子电路的经典模拟和真机运行场景下。本公开实施例的量子电路处理方法,可以由本公开实施例的量子电路处理装置执行。本公开实施例的量子电路处理装置可以配置在任意电子设备中,以执行本公开实施例的量子电路处理方法。
[0040] 受计算机内存和处理器能力的限制,现有的量子电路模拟方式最多能支持模拟几十个量子比特的算法。比如,笔记本能模拟20‑30个左右的量子比特,大型超级计算机和集群可以最多模拟30‑40个左右的量子比特。在真机运行上,由于当前量子芯片的可扩展性问题尚未解决,导致量子计算机能提供的量子比特数非常有限。因此,量子电路优化是量子计算领域中的一个基本问题。
[0041] 量子电路优化是通过一定的技术手段,可以将给定的量子电路进行简化,以降低其经典模拟和真机运行的要求,进而加速量子算法的研究和量子计算在实际场景下的落地。
[0042] 而本实施例的量子电路处理可以为量子电路优化的处理,其目的在于通过对量子电路进行优化编译,可以使得编译得到的量子电路在量子比特数上对原量子电路进行大量简化。一方面,可以进一步提升量子算法经典模拟的规模,加强经典计算机对量子算法的验证能力,另一方面,也可以降低量子算法在真机运行上的比特数要求,弥补当前量子芯片可扩展性问题的不足。
[0043] 以下详细介绍量子电路模型。
[0044] 目前,量子计算实现方式可以基于量子电路模型,即通过在量子比特上作用一系列的量子门完成量子态的演化,并在电路末端进行量子测量以获取计算结果。
[0045] 目前,使用比较多的量子电路是静态量子电路,即仅在电路末端包含量子测量操作的量子电路。随着近期硬件方向的快速发展,主要是量子比特相干时间的显著提升,以及高保真度中间态测量与重置操作的实现,包含电路中间测量以及重置操作的动态量子电路越来越受到业界的重视。
[0046] 由于引入了电路的中间测量,动态量子电路可以在量子比特的相干时间内,将量子计算和实时的经典计算与通信有效的结合起来。这一特性使得通过量子电路模型可以实现的计算任务的多样性大大增加。例如,利用动态量子电路的中间测量,可以在电路运行中实现前反馈操作,即根据中间测量获得的结果决定接下来要作用什么量子门,亦或抛弃当前的计算结果,重新开始计算任务。这样的功能在实现量子纠错中是非常重要的。因此可以预见的是,动态量子电路在未来将会成为各类量子算法以及量子应用的重要组成部分。
[0047] 此外,由于动态量子电路中的量子比特可以被重置并在后续计算过程中继续被使用,因此与静态量子电路相比,在运行相同的量子算法的情况下,动态量子电路可以有效地减少计算任务所需的量子比特数,且理论上计算能力不受任何影响。例如在静态量子电路中需要n量子比特的Berstein‑Vazirani算法,在动态量子电路仅需2个量子比特即可实现。
[0048] 可以看出,动态量子电路具有很多优势,并且越来越受到业界的重视。但目前应用较多的依然是静态量子电路,因此引入动态量子电路的一个核心的问题在于:给定一个静态量子电路,如何获得与其等效的动态量子电路。本实施例可以将静态量子电路等效编译为动态量子电路,同时可以大幅度减少整个计算任务所用的量子比特数,从而有助于实现动态量子电路的诸多优势。
[0049] 量子电路图可以表示了量子电路模型计算的全部过程。
[0050] 图2是一示例的静态量子电路的结构示意图,如图2所示,可以用一根水平线表示一个量子比特系统,从上至下依次对量子比特的量子位进行标号,其中,量子位的标号往往从零开始。
[0051] 量子电路图中时间演化的方向从左到右,最左端为初始的量子态,其中,通常每个量子比特初始化为零态,之后对初始态依次作用不同的量子门操作以完成量子态的演化。同时可以对某些量子位进行量子测量,获得测量结果。
[0052] 如果一个量子电路中不包含重置、中间量子测量等操作,且所有测量操作都位于量子电路的最末端,则此类量子电路称为静态量子电路,一个静态量子电路的示例如图2所示。
[0053] 量子电路图中除了初始量子态以外的其余部分,通常可以按照量子门的作用顺序用一个有序的指令列表进行表示,指令列表中每个元素代表一个操作指令,该操作指令可以为量子门操作指令或者量子测量操作指令。
[0054] 每一个单比特量子门(如H,X,Y,Z,S,T,Rx,Ry,Rz等)表示为一个包含四个元素的操作指令[name,which_qubit,parameters,condition],其中name为量子门的名称,which_qubit为量子门作用的量子位,parameters为量子门的参数(如没有参数则默认为None),condition表示该量子门操作受哪一个量子位测量结果的控制(标准量子电路中该参数默认为None)。例如,[Rx,2,pi,None]表示对量子位2上的量子比特作用一个Rx旋转门,旋转角度为pi。
[0055] 每一个双比特量子门(如控制非门CNOT,控制Z门CZ)表示为一个包含四个元素的指令[name,which_qubit,parameters,condition]。其中,name为量子门的名称,which_qubit为控制位和受控位构成的列表,parameters为量子门的参数(如没有参数则默认为None),标准量子电路中condition参数默认为None。例如,[SWAP,[1,2],None,None]表示在量子位1和2之间作用SWAP门;[CNOT,[1,3],None,None]表示对量子位1和量子位3作用控制非门,其中量子位1为控制位,量子位3为受控位。
[0056] 每一个计算基下的测量表示为一个包含四个元素的指令[measure,which_qubit,None,None]。例如,[measure,2,None,None]表示对量子位2进行计算基下的测量。
[0057] 按照如上的指令表示规则,图2中的静态量子电路可以表示为如下的有序指令列表:static_circuit=[[H,0,None,None],[H,1,None,None],[H,2,None,None],[CNOT,[0,1],None,None],[SWAP,[1,2],None,None],[Rx,0,α,None],[Ry,1,β,None],[Rz,2,γ,None],[measure,0,None,None],[measure,1,None,None],[measure,2,None,None]]。
[0058] 经典控制量子操作:除静态量子电路中的上述类型的操作外,量子电路的操作中还可能出现对一部分量子比特进行量子测量,并根据测量的结果来调控其余的量子比特的演化,这类操作称为经典控制量子操作。一个包含经典控制量子操作的量子电路示例如图3所示,其中,量子操作301即为经典控制量子操作。
[0059] 每一个经典控制量子门的操作表示为一个包含四个元素的指令[name,which_qubit,parameters,condition],其中name为量子门的名称,which_qubit为量子门作用的量子比特的量子位,parameters为量子门的参数(如没有参数则默认为None),condition表示该量子门操作受哪一个量子位测量结果的控制。例如,图3中量子操作301的经典受控量子X门可以表示为[X,2,None,1],即作用在量子位2的量子比特上的Pauli X门,受控条件为量子位1上的量子比特的测量结果,测量结果为0则不作用量子门,测量结果为1则作用量子门。
[0060] 对于量子电路中的经典控制量子操作,一般较难在真实量子计算机上运行,因此需要通过推迟测量原理将其进行转化。
[0061] 推迟测量原理为:任何在量子电路中间阶段的测量总可以被移至电路的末端;如果该测量结果被用于该电路的某一阶段的话,则经典控制量子操作可以被量子控制操作所代替。例如,图3所示的量子电路,经过推迟测量处理后得到的静态量子电路可以表示为如下图4所示。
[0062] 在一些应用场景中,可以允许在量子电路的中间对某些量子比特进行测量,并在测量获得结果后将这些量子比特重置为|0>态,以供后续计算继续使用。而包含了电路中间测量以及重置操作的量子电路称为动态量子电路。
[0063] 每一个重置操作指令可以表示为一个包含四个元素的指令[reset,which_qubit,None,None],其中,which_qubit为需要重置的量子比特的量子位,经过重置操作后,该量子比特的量子位可供后续计算继续使用。
[0064] 如图5所示为一示例的动态量子电路的结构示意图,图5中的动态量子电路是与图4所示的静态量子电路等效的,其中,图5中量子操作的符号R即表示重置操作,按照如上的指令表示规则,图5中的动态量子电路可以表示为如下的有序指令列表:dynamic_circuit=[[H,0,None,None],[H,1,None,None],[CNOT,[0,1],None,None],[H,0,None,None],[measure,0,None,None],[reset,0,None,None],[H,0,None,None],[SWAP,[0,1],None,None],[H,0,None,None],[H,1,None,None],[CNOT,[1,0],None,None],[measure,0,None,None],[measure,1,None,None],[reset,0,None,None],[reset,1,None,None]]。
[0065] 在步骤S101中,第一量子电路可以为静态量子电路,按照第一量子电路中量子操作的作用顺序用一个有序的指令列表表示,该指令列表即为第一指令列表,其内可以包括第一量子电路的操作指令,包括量子测量操作的操作指令和量子门操作的操作指令。对于任何经典控制量子操作,总可以通过推迟测量原理转化为量子控制操作,因此所输入的静态量子电路中不包含经典控制量子操作。
[0066] 可以获取预先存储的第一量子电路的第一指令列表,也可以获取用户输入的第一量子电路的第一指令列表,这里不进行具体限定。
[0067] 步骤S102:基于所述第一指令列表,获取所述第一量子电路的操作指令执行顺序的依赖关系。
[0068] 该步骤中,针对一操作指令,其依赖关系可以指的是执行当前操作指令前必须执行完成的操作指令。
[0069] 可以基于第一指令列表中操作指令所作用的量子位,确定各个操作指令执行顺序的依赖关系。若不同操作指令所作用的量子位存在交集,则这些操作指令在执行顺序上存在依赖关系。比如,第一操作指令在第一指令列表中排列顺序在第二操作指令的排列顺序之前,两者所作用的量子位存在交集,如均作用了量子位0,则执行第二操作指令前必须执行完成第一操作指令,两个操作指令之间存在依赖关系。
[0070] 在一可选实施方式中,针对每个操作指令,可以反向遍历(即从后往前遍历)第一指令列表,获取与该操作指令所作用的量子位存在交集的其他操作指令,该操作指令的依赖关系则可以包括排序在该操作指令之前,且量子位与之存在交集的其他操作指令。
[0071] 在另一可选实施方式中,可以获取第一指令列表中操作指令所作用的量子位;基于操作指令所作用的量子位在第一量子电路的量子操作中出现的次序,对操作指令进行编号,得到第一量子电路的操作指令的编号信息;基于操作指令的编号信息,查找第一量子电路中与操作指令关联的其他操作指令,得到依赖关系。
[0072] 步骤S103:基于所述依赖关系,按照操作指令所作用的量子位标号从小到大的顺序对所述第一量子电路的操作指令进行重排序,得到所述第一量子电路的第二指令列表。
[0073] 该步骤中,在获得第一量子电路的操作指令执行顺序的依赖关系之后,可以对第一量子电路的操作指令进行顺序优化即重排序。
[0074] 可以根据依赖关系,对第一指令列表中的操作指令按照预设优先原则进行重排序,以实现第一量子电路的操作指令的重排序,其中,预设优先原则可以为行序优先原则,行序优先原则指示按照操作指令所作用的量子位标号从小到大的顺序进行排序,即先排序作用量子位0的操作指令,再排序作用量子位1的操作指令,以此类推。
[0075] 也就是说,在考虑到第一量子电路的操作指令执行顺序的依赖关系的同时,让量子操作尽量按行的顺序进行执行,以将某一量子比特上所有操作尽可能快地执行完,并对该量子比特进行量子测量。
[0076] 在一可选实施方式中,可以先对第一指令列表中的操作指令按照行序优先原则进行重排序,之后在重排序的基础上,再考虑操作指令之间的依赖关系,即基于操作指令之间的依赖关系,再对操作指令进行重排序,得到第一量子电路的第二指令列表。也即可以通过两次重排序,来实现第一量子电路的操作指令按照相应顺序进行排序。
[0077] 在另一可选实施方式中,可以在一次重排序过程中,在考虑操作指令之间依赖关系的同时,对第一指令列表中的操作指令按照行序优先原则进行重排序,得到第二指令列表。
[0078] 通过对操作指令的重排序,使得重排序得到的第二指令列表中操作指令,在考虑到操作指令之间依赖关系的同时,让量子操作尽量按行序优先原则指示的排序顺序进行执行。这样,一方面不会破坏与原有量子电路的等价性,另一方面也为后续的等效编译(即第一量子电路至第二量子电路的等效编译)进行预处理,保障编译出来的动态量子电路需要的比特数尽可能少。
[0079] 步骤S104:基于所述第二指令列表,对所述第一量子电路进行等效编译,得到与所述第一量子电路等效的第二量子电路的第三指令列表,所述第三指令列表包括:重置操作的操作指令,所述重置操作的操作指令位于量子测量操作的操作指令之后,所述重置操作用于将量子比特的量子态重置至零态,所述第二量子电路的量子比特数量小于所述第一量子电路的量子比特数量。
[0080] 该步骤中,在对第一指令列表进行预处理得到第二指令列表的基础上,可以针对第二指令列表中每一操作指令,对该操作指令进行等效编译,以将操作指令编译成与该操作指令等效的第二量子电路中的操作指令。其中,该第二量子电路可以为动态量子电路。
[0081] 在进行等效编译时,可以获取第二指令列表中操作指令所作用的量子位,为该量子位分配寄存单元,该寄存单元可以对应第二量子电路中的量子比特。也即可以将操作指令映射到一个动态量子电路上,具体可以将第一量子电路中每个量子位(即第二指令列表中操作指令所作用的量子位)上的运算动态加载至第二量子电路的寄存单元中。
[0082] 在将量子测量操作的操作指令等效编译后,可以将量子测量操作的操作指令对应的寄存单元回收,可以在量子测量操作的操作指令之后添加重置操作的操作指令,通过重置操作指令,可以将分配给量子位的寄存单元进行回收,以供后续计算使用。这样可以保证所等效编译出来的动态量子电路宽度尽可能小。
[0083] 本实施例中,通过获取所输入的静态量子电路的操作指令之间的依赖关系,在考虑到量子电路的操作指令之间依赖关系的同时,让量子操作尽量按行的顺序进行执行,以将某一量子比特上所有操作尽可能快地执行完,并对该量子比特进行量子测量,这样通过对操作指令的重排序的预处理,且通过在等效编译时,在量子测量操作的操作指令之后添加重置操作的操作指令,以供后续量子位的量子比特计算使用,从而可以使得对静态量子电路编译后得到的动态量子电路所需的比特数尽可能小,以使得能够实现对大规模量子比特的量子电路进行经典模拟和真机运行,从而可以很好地应用于大规模量子算法的经典模拟中。
[0084] 并且,基于不同架构设计的量子计算机,其所能提供的量子比特数与各类操作的实现能力也不同。通过等效编译,可以使得量子电路在真实量子计算机上的运行方案更为灵活,可以根据实际的硬件条件,在动态量子电路和静态量子电路之间灵活地进行选择。例如,对于相干时间较短,但易于扩展量子比特数的超导量子计算机,更适合运行宽度较大、深度较小的静态量子电路;而对于相干时间较长,但扩展性相对较差的基于离子阱架构的量子计算机,则更适合运行宽度较小、深度较大的动态量子电路。
[0085] 可选的,所述步骤S102具体包括:
[0086] 获取所述第一指令列表中操作指令所作用的量子位;
[0087] 基于操作指令所作用的量子位在所述第一量子电路的量子操作中出现的次序,对所述操作指令进行编号,得到所述第一量子电路的操作指令的编号信息;
[0088] 基于所述操作指令的编号信息,查找所述第一量子电路中与所述操作指令关联的其他操作指令,得到所述依赖关系,所述其他操作指令所作用的量子位包括所述操作指令所作用的量子位,所述其他操作指令的执行顺序在所述操作指令之前。
[0089] 本实施方式中,可以为静态量子电路中的各量子操作进行编号,并根据编号寻找各量子操作执行顺序之间的依赖关系。
[0090] 可以通过循环遍历输入的静态量子电路的第一指令列表static_circuit,获取操作指令所作用的量子位,并针对量子位为其中的每个操作指令进行编号,得到编号信息。
[0091] 操作指令的编号信息可以通过编号参数(为cmd_index参数)表示,可以将cmd_index参数添加至操作指令中。该参数的具体格式可以为一个列表,存储的元素为二元数组,即cmd_index=[[which_qubit,gate_index],…],其中,which_qubit表示该操作指令所作用的量子位,gate_index表示该操作指令在which_qubit量子位上作用的次序,添加完该参数后,量子电路的指令列表中每个操作指令变为一个包含五元素的列表,即gate=[name,which_qubit,parameters,condition,cmd_index]。
[0092] 对于每一个单量子比特门,cmd_index列表中的元素包含一个二元数组,例如图4中量子位2上作用的第二个H门,添加cmd_index参数后其操作指令变为:[H,2,None,None,[2,3]];对于每一个双量子比特门,cmd_index列表中的元素包含两个二元数组,分别标记该双量子比特门作用的量子位及其在所作用量子位上出现的次序,例如图4中量子位1和2上作用的SWAP门,添加cmd_index参数后其操作指令变为:[SWAP,[1,2],None,None,[[1,3],[2,2]]]。将图4所示静态电路中各量子操作编号后的结果如图6所示。
[0093] 对量子操作进行编号的具体过程如下:
[0094] 输入:静态量子电路列表static_circuit;
[0095] 输出:为每个操作添加cmd_index参数后的static_circuit列表。
[0096] 步骤1:通过循环遍历static_circuit列表,对当前遍历到的元素gate进行判断;
[0097] 步骤2.1:如果当前元素为单量子比特的量子操作(包括单量子比特门操作和量子测量操作),将其作用的量子位which_qubit记录为qubit_index;初始化变量gate_index=1,对static_circuit列表中当前元素gate之前的所有元素进行遍历;如果当前遍历到的元素作用的量子位which_qubit列表中包含qubit_index的值,则将变量gate_index加1;如果当前遍历到的元素作用的量子位which_qubit列表中不包含which_qubit,则继续遍历下一元素;遍历完成后,为当前元素gate添加cmd_index参数,即gate=[name,which_qubit,parameters,condition,[which_qubit,gate_index]];
[0098] 步骤2.2:如果当前元素为双量子比特门操作,将其作用的量子位which_qubit列表中的两个值分别记录为qubit_index_0和qubit_index_1;初始化两个变量gate_index_0=1,gate_index_1=1,对static_circuit列表中当前元素gate之前的所有元素进行遍历;如果当前遍历到的元素作用的量子位which_qubit列表中包含qubit_0,则将变量gate_index_0加1;如果不包含,则不进行操作;如果当前遍历到的元素作用的量子位which_qibut列表中包含qubit_1,则将变量gate_index_1加1;如果不包含,则继续遍历下一元素;
遍历完成后,为当前元素gate添加cmd_index参数,即gate=[name,which_qubit,parameters,condition,cmd_index=[[qubit_0,gate_index_0],[qubit_1,gate_index_
1]];
[0099] 步骤3:遍历完整个static_circuit列表,返回为每个操作指令添加cmd_index参数后的static_circuit列表。
[0100] 之后,可以基于操作指令的编号信息,查找第一量子电路中与操作指令关联的其他操作指令,操作指令的依赖关系包括与该操作指令关联的其他操作指令。该操作指令的依赖关系可以包括排序在该操作指令之前,且与该操作指令作用相同量子位的所有其他操作指令,也可以仅包括执行当前操作指令前必须执行完成的最近邻的操作指令,这里不进行具体限定。
[0101] 本实施方式中,通过基于操作指令所作用的量子位为静态量子电路中的各量子操作进行编号,并根据编号寻找各量子操作执行顺序之间的依赖关系,从而可以简单地实现第一量子电路的操作指令执行顺序的依赖关系的确定。
[0102] 可选的,所述基于所述操作指令的编号信息,查找所述第一量子电路中与所述操作指令关联的其他操作指令,得到所述依赖关系,包括:
[0103] 基于所述操作指令的编号信息,获取目标编号信息,所述目标编号信息中量子位标号与所述操作指令的编号信息中量子位标号相同,所述目标编号信息中量子位在所述第一量子电路的量子操作中出现的次序小于所述操作指令的编号信息中所述量子位在所述第一量子电路的量子操作中出现的次序;
[0104] 获取所述目标编号信息对应的所述其他操作指令,得到所述依赖关系,所述其他操作指令为所述第一量子电路中执行顺序在所述操作指令之前,且与所述操作指令相邻的操作指令。
[0105] 本实施方式中,通过查找执行当前操作指令前必须执行完成的最近邻的操作指令,来实现第一量子电路的操作指令执行顺序的依赖关系的确定。
[0106] 可以基于操作指令的编号信息,查找目标编号信息,当前操作指令前必须执行完成的最近邻的操作指令的编号信息中可以包括该目标编号信息,之后可以基于该目标编号信息,确定该操作指令的依赖关系,该依赖关系可以包括当前操作指令前必须执行完成的最近邻的操作指令的编号信息。
[0107] 在一可选实施方式中,可以通过循环遍历已经为各元素添加cmd_index参数的静态量子电路的指令列表static_circuit,为列表中的每个操作指令添加依赖关系参数,称之为domain参数。该参数的具体形式为一个列表,即domain=[cmd_index,…],其中存储的所有cmd_index为执行当前操作前必须执行完成的操作的cmd_index值。
[0108] 可以仅考虑执行当前操作前必须执行完成的最近邻的操作,添加完该参数后,列表中每个操作指令变为一个包含六元素的列表,即gate=[name,which_qubit,parameters,condition,cmd_index,domain]。
[0109] 对于每个单量子比特的量子操作,其domain参数列表中仅包含一个其他操作指令的cmd_index值,该其他操作指令可能为单量子比特的量子操作或双量子比特门操作。如果该其他操作指令为单量子比特的量子操作,则该操作指令的domain参数仅包含一个二元数组,例如图6中量子位0上编号为[0,4]的测量操作,执行该操作前只需执行目标编号信息为[0,3]的H门,因此该测量操作添加完domain参数后操作指令变为:[measure,0,None,None,[0,4],[[0,3]]];如果该其他操作指令为双量子比特门,则该操作指令的domain参数包含两个二元数组,这两个二元数组包含在一个列表中,表示为一个操作指令的编号信息,例如图6中量子位0上编号为[0,3]的H门,执行该操作前需要执行量子位0和量子位1间作用的标号为[[0,2],[1,2]]的CNOT门,因此该H门添加domain参数后指令列表变为:[H,0,None,None,[0,3],[[[0,2],[1,2]]]]。
[0110] 对于每个双量子比特门,可以分别记录执行该量子门前其作用的两个量子位上必须执行完成的操作,即每个双量子比特门的domain参数包含两个其他操作指令的cmd_index值,可以将每个其他操作指令的cmd_index值分别存为一个单独的列表。该其他操作指令可能为单双量子比特操作,如果这两个其他操作指令为同一个双量子比特门,则将该门的cmd_index值存储两次,也即同样存储为两个单独的列表。
[0111] 例如图6中量子位0和1间作用的标号为[[0,2],[1,2]]的CNOT门,执行该CNOT门前需要分别执行量子位0上标号为[0,1]的H门和量子位1上标号为[1,1]的H门,因此该CNOT门添加domain参数后的操作指令变为:[CNOT,[0,1],None,None,[[0,2],[1,2]],[[0,1],[1,1]]]。
[0112] 而图6中量子位1和2之间作用的标号为[[1,3],[2,2]]的SWAP门,执行该SWAP门前需要执行量子位0和1之间的标号为[[0,2],[1,2]]的CNOT门以及量子位2上标号为[2,1]的H门,因此该SWAP门添加domain参数后的指令列表变为:[SWAP,[1,2],None,None,[[1,3],[2,2]],[[[0,2],[1,2]],[2,1]]]。
[0113] 如果执行某个操作前无需执行其他操作,则该操作指令的domain参数为一个空列表,例如图6中量子位1上作用的标号为[1,1]的H门,添加domain参数后其操作指令变为:[H,1,None,None,[1,1],[]]。
[0114] 输入:添加cmd_index参数的静态量子电路的指令列表static_circuit;
[0115] 输出:为每个操作指令添加domain参数后的static_circuit列表。
[0116] 步骤1:通过循环遍历static_circuit列表,每遍历到一个元素均为其添加domain参数,初始值为一个空列表,随后根据当前元素gate进行判断;
[0117] 步骤2.1:如果当前元素为单量子比特的量子操作,将其作用的量子位which_qubit记录为qubit_index;随后对static_circuit列表中当前元素gate之前的所有元素通过循环进行倒序遍历;如果遍历到的当前元素作用的量子位which_qubit列表包含qubit_index的值,则将当前遍历到的元素的cmd_index的值添加到gate操作的domain参数中,同时跳出循环遍历;如果遍历到的当前元素作用的量子位which_qubit列表不包含qubit_index的值,则继续遍历下一个元素;
[0118] 步骤2.2:如果当前元素为双量子比特门,分别将其作用的量子位which_qubit列表中的两个值记录为qubit_index_0和qubit_index_1,同时初始化两个布尔类型的变量qubit_0_done=False,qubit_1_done=False;随后对static_circuit列表中当前元素gate之前的所有元素通过循环进倒序遍历;如果遍历到的当前元素作用的量子位which_qubit列表包含qubit_index_0的值,且qubit_0_done的值为False,则将当前遍历到的元素的cmd_index的值添加到gate操作的domain参数中,同时将qubit_0_done的值修改为True;如果遍历到的当前元素作用的量子位which_qubit列表中不包含qubit_index_0的值,或qubit_0_done的值为True,则不进行操作;如果遍历到的当前元素作用的量子位which_qubit列表包含qubit_index_1的值,且qubit_1_done的值为False,则将当前遍历到的元素的cmd_index的值添加到gate操作的domain参数中,同时将qubit_1_done的值修改为True;
如果遍历到的当前元素作用的量子位which_qubit列表中不包含qubit_index_0的值,或qubit_1_done的值为True,则不进行操作;如果qubit_0_done和qubit_1_done的值均为True,则跳出循环,否则继续遍历下一个元素;
[0119] 步骤3:循环遍历完static_circuit列表后,返回为每个操作指令添加domain参数后的static_circuit列表。
[0120] 本实施方式中,通过查找执行当前操作指令前必须执行完成的最近邻的操作指令,从而可以简便地实现第一量子电路的操作指令执行顺序的依赖关系的确定。
[0121] 可选的,所述步骤S103具体包括:
[0122] 按照操作指令所作用的量子位标号从小到大的顺序对所述第一量子电路的操作指令进行第一重排序,得到所述第一量子电路的第四指令列表,所述第四指令列表中,排序在前的操作指令中目标量子位的标号小于排序在后的操作指令中目标量子位标号,且针对所作用的量子位标号相同的操作指令按照操作指令在所述第一量子电路中的相对顺序排列,所述目标量子位为操作指令中标号小的量子位;
[0123] 基于所述依赖关系,对所述第四指令列表进行第二重排序,得到所述第二指令列表。
[0124] 本实施方式中,可以先对第一指令列表中的操作指令按照行序优先原则进行重排序,之后在重排序的基础上,再考虑操作指令之间的依赖关系,即基于操作指令之间的依赖关系,再对操作指令进行重排序,得到第二指令列表。也即可以通过两次重排序,来实现操作指令按照相应顺序进行排序。
[0125] 第一重排序过程中,可以对量子电路的指令列表中各操作指令作用的目标量子位进行比较,目标量子位序号小的操作指令排在前面;对于目标量子位序号相同的指令,则按照其在原量子电路的指令列表中的相对顺序进行排列,相应可以得到默认排序下的指令列表即第四指令列表。其中,对于单量子比特的量子操作,目标量子位取其所作用的量子位which_qubit的值;对于双量子比特门,目标量子位序号则取其作用的which_qubit列表中较小的一个量子位的值。
[0126] 注意到默认排序并没有考虑到操作节点之间的依赖关系,只是一种理想的排序方式。可以在默认排序的基础上,按照操作指令之间的依赖关系进行第二重排序,得到第二指令列表。
[0127] 在一可选实施方式中,可以通过不同操作指令之间的调换将第四指令列表中操作指令进行第二重排序,使得针对每个操作指令,其存在依赖关系的其他操作指令均排序在该操作指令之前,且第二重排序后的操作指令的排序为默认排序。
[0128] 在另一可选实施方式中,可以针对操作指令,通过获取排序在该操作指令之后且与之存在依赖关系的操作指令的列表,并通过不同列表的排序方式,来实现第四指令列表中操作指令的第二重排序。
[0129] 其中,不同列表可以包括排序在该操作指令之前的操作指令的列表、排序在该操作指令之后且与之存在依赖关系的操作指令的列表、该操作指令构成的列表、以及排序在该操作指令之后且与之不存在依赖关系的操作指令的列表。
[0130] 本实施方式中,通过先对第一指令列表中的操作指令按照行序优先原则进行重排序,之后在重排序的基础上,再考虑操作指令之间的依赖关系,即基于操作指令之间的依赖关系,再对操作指令进行重排序,得到第二指令列表。也即可以通过两次重排序,来实现操作指令按照相应顺序进行排序。如此,可以简化对操作指令进行重排序的过程。
[0131] 可选的,所述基于所述依赖关系,对所述第四指令列表进行第二重排序,得到所述第二指令列表,包括:
[0132] 对所述第四指令列表进行针对操作指令的遍历,并针对当前遍历的操作指令将所述第四指令列表进行拆分,得到第一列表、第二列表和第三列表,所述第一列表为所述第四指令列表中排序在首位的操作指令到与所述当前遍历的操作指令相邻的前一个操作指令构成的列表,所述第二列表为所述当前遍历的操作指令构成的列表,所述第三列表为所述第四指令列表中排序在所述当前遍历的操作指令之后的操作指令构成的列表;
[0133] 基于所述依赖关系中所述当前遍历的操作指令与所述第一量子电路的操作指令之间的目标依赖关系、所述第一列表、所述第二列表和所述第三列表,对所述第四指令列表进行操作指令的重排;
[0134] 在所述第四指令列表遍历完成的情况下,基于重排后的所述第四指令列表确定所述第二指令列表。
[0135] 本实施方式中,可以针对操作指令,通过获取排序在该操作指令之后且与之存在依赖关系的操作指令的列表,并通过不同列表的排序方式,来实现第四指令列表中操作指令的第二重排序。
[0136] 具体的,可以对第四指令列表进行针对操作指令的遍历,针对当前遍历的操作指令将第四指令列表进行拆分,得到第一列表、第二列表和第三列表。比如,当前遍历的操作指令为第j个指令,则第一列表为第四指令列表中排序在第1到第j‑1个操作指令构成的列表,第二列表为当前遍历的操作指令构成的列表,第三列表为第四指令列表中排序在第j+1到第m个操作指令构成的列表。其中,m为第四指令列表的长度,即操作指令的数量。
[0137] 相应的,可以基于当前遍历的操作指令与所述第一量子电路的操作指令之间的目标依赖关系和第一列表,从第三列表中筛选出排序在该操作指令之后且与之存在目标依赖关系的操作指令的列表。
[0138] 可以基于第一列表、该列表(即排序在当前遍历的操作指令之后且与之存在目标依赖关系的操作指令的列表)、第二列表、以及基于第三列表和该列表所确定的排序在该操作指令之后且与之不存在目标依赖关系的操作指令的列表的排列顺序进行列表拼接,从而可以实现第四指令列表中操作指令的第二重排序,得到第二指令列表。
[0139] 如此,可以基于操作指令之间的依赖关系,实现对默认排序的操作指令的排序调整,并且,排序调整的过程比较简单。
[0140] 可选的,所述基于所述依赖关系中所述当前遍历的操作指令与所述第一量子电路的操作指令之间的目标依赖关系、所述第一列表、所述第二列表和所述第三列表,对所述第四指令列表进行操作指令的重排,包括:
[0141] 基于所述目标依赖关系和所述第一列表,获取第一目标列表,所述第一目标列表指示所述第一列表中与所述当前遍历的操作指令之间存在所述目标依赖关系的操作指令;
[0142] 基于所述第一目标列表和第二目标列表,确定第三目标列表,第二目标列表指示所述第四指令列表中与所述当前遍历的操作指令之间存在所述目标依赖关系的操作指令,所述第三目标列表为从所述第二目标列表删除所述第一目标列表后得到的列表;
[0143] 在所述第三目标列表不为空集的情况下,从所述第三列表中删除所述第三目标列表指示的操作指令,得到第四列表;
[0144] 将所述第一列表、所述第三目标列表指示的操作指令、所述第二列表和所述第四列表按照从前至后的顺序进行列表拼接,得到重排后的所述第四指令列表。
[0145] 本实施方式中,可以基于当前遍历的操作指令与第一量子电路的操作指令之间的目标依赖关系,从第一列表中获取与当前遍历的操作指令存在目标依赖关系的操作指令,这些操作指令可以构成第一目标列表。比如,可以从第一列表中获取包括当前遍历的操作指令中domain参数的操作指令,得到第一目标列表。
[0146] 获取第二目标列表,第二目标列表可以包括第四指令列表中与当前遍历的操作指令之间存在目标依赖关系的操作指令,从第二目标列表删除第一目标列表后得到的列表即为第三目标列表,其为排序在当前遍历的操作指令之后且与之存在目标依赖关系的操作指令的列表。第三目标列表中的操作指令是按照行序优先原则即默认排序进行排序的。
[0147] 若第三目标列表为空,则说明第三列表中,不存在与当前遍历的操作指令存在目标依赖关系的操作指令。
[0148] 若第三目标列表不为空,则说明第三列表中,存在与当前遍历的操作指令存在目标依赖关系的操作指令。相应的,可以删除第三列表中第三目标列表中的操作指令,得到第四列表,第四列表为排序在当前遍历的测量指令之后且与之不存在目标依赖关系的操作指令的列表。
[0149] 按照从前至后为第一列表、第三目标列表、第二列表和第四列表的排列顺序进行列表拼接,可以得到重排后的所述第四指令列表,之后可以基于重排后的第四指令列表确定第二指令列表。如此,可以实现第二指令列表的确定。
[0150] 在默认排序(即行序优先原则指示的排序)的基础上,按照操作指令之间的依赖关系进行排序调整的过程如下:
[0151] 输入:添加完cmd_index和domain参数的静态量子电路的指令列表static_circuit;
[0152] 输出:操作执行顺序优化后的静态量子电路的指令列表。
[0153] 步骤1:对输入的指令列表static_circuit进行默认排序,记录列表长度为m;
[0154] 步骤2:通过循环遍历static_circuit列表,假设当前元素gate为列表中的第i个元素(其中i∈{1,2,…,m});设置参数optimal=False,当optimal=False时,进行以下操作:
[0155] 操作2.1:将列表static_circuit中第1到第i‑1个元素构成的列表记录为S1列表(第一列表),将当前遍历到的元素gate存入S2列表(第二列表)中,并将列表static_circuit中第i+1到第m个元素构成的列表记录为S3列表(第三列表);
[0156] 操作2.2:将S1列表中所有操作指令的cmd_index参数构成的集合记录在circuit_indices列表中,同时将S2列表中的操作指令gate的domain参数构成的集合记录在domains列表中;
[0157] 操作2.3:进行集合运算P_index=domains\circuit_indices,即求出domains列表中不包含在circuit_indices列表中的元素,并存入P_index列表中;如果P_index列表不为空,则遍历S3列表,找到S3列表中P_index中所有元素对应的操作指令,将其存入P列表(即第三目标列表指示的操作指令)中,并对P列表中的所有操作指令进行默认排序,随后将P列表中的所有操作指令从S3列表中删除,得到S4列表(第四列表),将static_circuit列表的顺序更新为[S1,P,S2,S4];如果P_index列表为空,则将optimal参数改写为True,并且跳出当前循环,继续循环遍历static_circuit列表中的第i+1个操作指令;
[0158] 步骤3:循环遍历完static_circuit列表的所有元素后,更新的static_circuit列表即为执行顺序优化后的量子电路的指令列表。
[0159] 为了尽快对量子电路中的某个量子比特进行测量,以方便将其重置后用于后续计算,在完成第二重排序后,可以将重排后的第四指令列表中每一个量子测量操作的执行顺序尽可能向前移动。
[0160] 可选的,所述基于所述依赖关系,对所述第四指令列表进行第二重排序之后,还包括:
[0161] 将重排后的所述第四指令列表中量子测量操作的操作指令移动至目标位置,得到所述第二指令列表;
[0162] 其中,所述目标位置为位于重排后的所述第四指令列表中目标操作指令之后,且与所述目标操作指令相邻的位置,所述目标操作指令所作用的量子位包括所述量子测量操作的操作指令所作用的量子位,所述第二指令列表中排序在所述目标位置之后的操作指令不包括所述量子测量操作的操作指令所作用的量子位。
[0163] 其具体过程如下:
[0164] 输入:完成各量子操作的执行顺序优化排序后的指令列表static_circuit即第四指令列表;
[0165] 输出:将所有量子测量操作执行顺序优化后的指令列表。
[0166] 步骤1:通过循环对指令列表static_circuit进行遍历;
[0167] 步骤2.1:如果当前遍历的操作指令为测量操作的操作指令,measurement=[measure,which_qubit,None,None,cmd_index,domain],则将被测量的量子位记录为measured_qubit=which_qubit,并从该测量操作的前一个操作开始,倒序遍历static_circuit列表,设当前遍历的元素为gate=[name,which_qubit,parameters,condition,cmd_index,domain];如果measured_qubit包含在当前遍历到的元素gate作用的量子位which_qubit列表中,则将当前遍历到的测量操作measurement的操作指令插入到gate操作之后,随后跳出倒序遍历;
[0168] 步骤2.2:如果measured_qubit不包含在当前遍历到的元素gate作用的量子位which_qubit列表中,则继续遍历下一个操作指令;
[0169] 步骤3:完成对整个static_circuit的遍历后,返回测量操作执行顺序优化后的指令列表即第二指令列表。
[0170] 如此,可以将某一量子比特上所有操作尽可能快地执行完,并对该量子比特进行测量。
[0171] 可选的,所述步骤S104具体包括:
[0172] 针对所述第二指令列表中每一操作指令,执行如下操作:
[0173] 获取所述操作指令所作用的量子位;
[0174] 基于所述量子位和寄存单元字典,确定为所述量子位分配的第二量子电路的寄存单元的目标标识,所述寄存单元字典包括寄存单元与所述量子位的对应关系;
[0175] 基于所述目标标识,对所述操作指令进行等效编译,得到与所述操作指令等效的第二量子电路中操作指令,所述第三指令列表包括等效编译得到的所述第二量子电路中操作指令。
[0176] 本实施方式中,可以针对第二指令列表中每个操作指令进行等效编译。
[0177] 第二指令列表中操作指令可以包括指令类型和所作用的量子位。
[0178] 在等效编译过程中,可以引入一个量子寄存器,并通过对其寄存单元进行动态增减管理,从而进一步将static_circuit列表编译为动态量子电路指令列表dynamic_circuit。
[0179] 具体来说,可以在遍历输入静态电路的指令列表static_circuit的时候,将其中的每个量子位动态对应至量子寄存器的一个寄存单元,寄存单元的单元地址即为编译后的动态量子电路中的量子位。
[0180] 可以基于操作指令所作用的量子位和所构建的寄存单元字典,确定为量子位分配的第二量子电路的寄存单元的目标标识,即寄存单元的地址。其中,寄存单元字典可以用于对寄存单元的占用状态进行记录,即寄存单元字典中数据的键可以是寄存单元的地址,对应的值可以是寄存单元被分配给了静态量子电路指令列表中哪个量子位。
[0181] 例如,寄存单元字典可以为:{‘0’:0,‘1’:None,‘2’:3},表示地址为0的寄存单元被分配给了量子位0,地址为1的寄存单元为空闲(即未被分配),地址为2的寄存单元被分配给了量子位3。
[0182] 在一可选实施方式中,进行第二指令列表的等效编译之前,可以构建一个为空的寄存单元字典,相应的,在进行第二指令列表中指令的等效编译时,可以基于寄存单元字典为操作指令所作用的量子位分配寄存单元(如寄存单元字典为空的情况下,可以创建一个新的寄存单元,记录该寄存单元的地址),并基于量子位与寄存单元地址的对应关系更新寄存单元字典,以对寄存单元的占用状态进行记录。之后,可以基于第二指令列表中操作指令所作用的量子位和更新的寄存单元字典,继续进行第二指令列表中操作指令的等效编译。
[0183] 在得到目标标识的情况下,可以基于目标标识,对第二指令列表中的操作指令进行等效编译,其中,目标标识可以指示与该操作指令等效的第二量子电路中操作指令所作用的量子比特的量子位。其等效编译的过程将在以下实施方式再进行详细说明。
[0184] 如此,可以实现第一量子电路的操作指令的等效编译,以得到与第一量子电路等效的第二量子电路中的操作指令。
[0185] 可选的,所述基于所述量子位和寄存单元字典,确定为所述量子位分配的第二量子电路的寄存单元的目标标识,包括如下至少一项:
[0186] 在查询到所述寄存单元字典中包括所述量子位的对应关系的情况下,将所述量子位对应的寄存单元的标识确定为所述目标标识;
[0187] 在查询到所述寄存单元字典中未包括所述量子位的对应关系的情况下,基于所述寄存单元字典为所述量子位分配寄存单元,将所述量子位分配的寄存单元的标识确定为所述目标标识,并基于所述量子位分配的寄存单元的标识更新所述寄存单元字典。
[0188] 本实施方式中,如果静态量子电路的指令列表中的一个量子位已有对应的寄存单元,则静态量子电路的指令列表中该量子位上的所有量子操作均转移到该寄存单元地址对应的动态量子电路的量子位上执行。
[0189] 如果某个量子位没有对应的寄存单元,则需为其分配寄存单元。可以通过搜索已创建的寄存单元中是否有空闲的寄存单元可供分配,可选的,所述基于所述寄存单元字典为所述量子位分配寄存单元,包括如下至少一项:
[0190] 在查询到所述寄存单元字典中包括第一寄存单元的标识的情况下,将所述第一寄存单元分配给所述量子位,所述第一寄存单元为未分配给节点的寄存单元;
[0191] 在查询到所述寄存单元字典中不包括所述第一寄存单元的标识的情况下,获取所述寄存单元字典所表征的寄存单元的数量,基于所述数量确定所创建的第二寄存单元的标识,并将所述第二寄存单元分配给所述量子位。
[0192] 如果存在多个空闲的寄存单元,在一实施方式中,所述第一寄存单元为未分配给节点的寄存单元中标识最小的寄存单元,即选取地址最小的进行分配,这样可以保证寄存单元分配准确且有秩序的进行。
[0193] 如果当前所创建的寄存单元中所有的寄存单元均被占用,则创建一个新的寄存单元并分配给该量子位。
[0194] 如此,寄存单元是按需动态增加的,如果有空闲单元(如1:None,指示寄存单元1为空闲寄存单元),则优先分配空闲单元,否则创建一个新的寄存单元,并基于寄存单元字典所表征的寄存单元的数量(如寄存单元字典{‘0’:0,‘1’:2},表征寄存单元数量为2),确定所创建的第二寄存单元的标识,并将第二寄存单元分配给当前等效编译的操作指令所作用的量子位。
[0195] 同时基于量子位所分配的寄存单元的标识更新寄存单元字典,即添加量子位与目标标识的对应关系至寄存单元字典中。当整个static_circuit列表遍历完成后,创建的寄存单元总数即为编译后的dynamic_circuit列表对应的动态量子电路所需的量子比特数,这样可以保证编译出的动态量子电路的宽度尽可能小,可以大大降低执行模型时所需的量子比特数。
[0196] 为量子位进行寄存单元的动态分配的具体过程如下:
[0197] 输入:寄存单元字典qreg,需要分配寄存单元的量子位which_qubit;
[0198] 输出:更新后的寄存单元字典qreg;分配给量子位which_qubit的寄存单元地址address。
[0199] 步骤1:遍历寄存单元字典qreg的所有值,并进行判断;
[0200] 步骤2.1:如果其中包含which_qubit,表明该量子位已被分配寄存单元,则将which_qubit值对应的寄存单元地址记录为address,对qreg字典不进行操作;
[0201] 步骤2.2:若which_qubit未被分配寄存单元,则搜索寄存单元字典qreg中所有值为None的寄存单元地址,并将其存入available_units列表中,随后基于available_units列表进行判断;如果available_units列表为空,则当前寄存单元中不存在空闲寄存单元,计算qreg中寄存单元的数量L,并将其记录为分配给which_qubit的寄存单元地址address,随后在qreg字典中创建一个新的寄存单元,其键为单元地址address,其值为对应的量子位which_qubit;如果available_units列表不为空,则当前寄存单元中存在空闲寄存单元,取available_units列表中最小的单元地址,并将其记录为分配给which_qubit的寄存单元地址address,随后将qreg中address地址对应的值修改为which_qubit;
[0202] 步骤3:返回并输出单元状态更新后的寄存单元字典qreg以及分配给which_qubit的寄存单元地址address。
[0203] 可选的,所述基于所述目标标识,对所述操作指令进行等效编译,得到与所述操作指令等效的第二量子电路中操作指令,包括如下至少一项:
[0204] 在所述操作指令为量子门操作的操作指令的情况下,基于所述目标标识,将所述操作指令等效编译成第二量子电路中量子门操作的操作指令;
[0205] 在所述操作指令为量子测量操作的操作指令的情况下,基于所述目标标识,将所述操作指令等效编译成第二量子电路中量子测量操作的操作指令,更新所述寄存单元字典,以及生成所述第二量子电路中重置操作的操作指令,更新后的所述寄存单元字典指示所述目标标识对应的寄存单元为未分配给量子位的寄存单元。
[0206] 基于寄存单元的动态分配规则,可以实现静态量子电路到动态量子电路的等效编译,其具体过程如下:
[0207] 输入:执行顺序优化后的静态电路指令列表static_circuit;
[0208] 输出:与其等效的动态量子电路指令列表dynamic_circuit。
[0209] 步骤1:初始化一个空的寄存单元字典qreg,用于记录各寄存单元动态分配状态;同时初始化一个空列表dynamic_circuit,用于记录编译后的动态量子电路指令列表;
[0210] 步骤2:通过循环遍历输入电路指令列表static_circuit;
[0211] 步骤2.1:如果当前遍历到的操作指令operation为单量子比特的量子操作,获取当前操作operation作用的量子位which_qubit,将其与qreg作为输入,获得寄存单元的address和更新后的qreg;生成单量子比特操作电路指令gate=[name,address,parameters,condition],随后将其添加到动态量子电路指令列表dynamic_circuit中;
[0212] 步骤2.2:如果当前操作指令operation为测量操作,获取当前操作operation作用的量子位which_qubit,将其与qreg作为输入,获得寄存单元的address和更新后的qreg;生成量子电路测量指令gate=[measure,address,None,None],随后将其添加到动态量子电路指令列表dynamic_circuit中;将寄存单元字典qreg中address对应的寄存单元回收,即将address键对应的值修改为None;生成量子电路重置指令gate=[reset,address,None,None],随后将其添加到动态量子电路指令列表dynamic_circuit中;
[0213] 步骤2.3:如果当前操作指令operation为双量子比特操作,将which_qubit列表中的第一个元素记录为which_qubit_0,第二个元素记录为which_qubit_1;将which_qubit_0和qreg作为输入,获得更新后的qreg字典,并将输出的寄存单元地址记录为address_0,将which_qubit_1和qreg作为输入,获得更新后的qreg字典,并将输出的寄存单元地址记录为address_1;生成双量子比特操作电路指令gate=[name,[address_0,address_1],parameters,condition],随后将其添加到动态量子电路指令列表dynamic_circuit中;
[0214] 步骤3:输入的电路指令列表static_circuit遍历完成后,返回并输出动态量子电路指令列表dynamic_circuit。
[0215] 上述过程中,在将测量指令编译后,可以将测量指令对应的寄存单元回收,以供后续计算使用。
[0216] 本实施方式中,通过引入一个量子寄存器,对动态量子电路各个量子比特的使用情况进行动态管理,在某一量子比特上的所有操作执行完成并对其进行测量后,将该量子比特重置,重置后的量子比特将被回收并用于后续计算过程中,这样能够保证最后编译出来的动态量子电路宽度尽可能小,从而更有助于量子算法在硬件上的执行。
[0217] 为了便于对本实施例中方案的理解,给出一个具体的示例。
[0218] 一示例的静态量子电路如图7所示,经本实施例的量子电路处理方法等效编译后,所得到的动态量子电路如图8所示,相对于图7所示的静态量子电路,动态量子电路减少了两个量子比特,大大降低了量子电路所需的量子比特数。
[0219] 分别对图7所示的静态量子电路和图8所示的动态量子电路进行模拟运行,其运行结果如图9所示,其中,横坐标表示量子比特的测量结果,纵坐标表示量子比特采样的概率分布,白色条形表示静态量子电路的运行结果,黑色条形表示动态量子电路的运行结果。可以看出,静态量子比特和动态量子比特的运行结果匹配,如此可以在不影响运行结果的情况下,显著地减少量子电路使用的量子比特数。
[0220] 第二实施例
[0221] 如图10所示,本公开提供一种量子电路处理装置1000,包括:
[0222] 第一获取模块1001,用于获取第一量子电路的第一指令列表,所述第一指令列表包括:量子测量操作的操作指令和量子门操作的操作指令,所述量子测量操作的操作指令位于量子门操作的操作指令之后;
[0223] 第二获取模块1002,用于基于所述第一指令列表,获取所述第一量子电路的操作指令执行顺序的依赖关系;
[0224] 重排序模块1003,用于基于所述依赖关系,按照操作指令所作用的量子位标号从小到大的顺序对所述第一量子电路的操作指令进行重排序,得到所述第一量子电路的第二指令列表;
[0225] 等效编译模块1004,用于基于所述第二指令列表,对所述第一量子电路进行等效编译,得到与所述第一量子电路等效的第二量子电路的第三指令列表,所述第三指令列表包括:重置操作的操作指令,所述重置操作的操作指令位于量子测量操作的操作指令之后,所述重置操作用于将量子比特的量子态重置至零态,所述第二量子电路的量子比特数量小于所述第一量子电路的量子比特数量。
[0226] 可选的,所述第二获取模块1002包括:
[0227] 第一获取子模块,用于获取所述第一指令列表中操作指令所作用的量子位;
[0228] 编号子模块,用于基于操作指令所作用的量子位在所述第一量子电路的量子操作中出现的次序,对所述操作指令进行编号,得到所述第一量子电路的操作指令的编号信息;
[0229] 查找子模块,用于基于所述操作指令的编号信息,查找所述第一量子电路中与所述操作指令关联的其他操作指令,得到所述依赖关系,所述其他操作指令所作用的量子位包括所述操作指令所作用的量子位,所述其他操作指令的执行顺序在所述操作指令之前。
[0230] 可选的,所述查找子模块,具体用于:
[0231] 基于所述操作指令的编号信息,获取目标编号信息,所述目标编号信息中量子位标号与所述操作指令的编号信息中量子位标号相同,所述目标编号信息中量子位在所述第一量子电路的量子操作中出现的次序小于所述操作指令的编号信息中所述量子位在所述第一量子电路的量子操作中出现的次序;
[0232] 获取所述目标编号信息对应的所述其他操作指令,得到所述依赖关系,所述其他操作指令为所述第一量子电路中执行顺序在所述操作指令之前,且与所述操作指令相邻的操作指令。
[0233] 可选的,所述重排序模块1003包括:
[0234] 第一重排序子模块,用于按照操作指令所作用的量子位标号从小到大的顺序对所述第一量子电路的操作指令进行第一重排序,得到所述第一量子电路的第四指令列表,所述第四指令列表中,排序在前的操作指令中目标量子位的标号小于排序在后的操作指令中目标量子位标号,且针对所作用的量子位标号相同的操作指令按照操作指令在所述第一量子电路中的相对顺序排列,所述目标量子位为操作指令中标号小的量子位;
[0235] 第二重排序子模块,用于基于所述依赖关系,对所述第四指令列表进行第二重排序,得到所述第二指令列表。
[0236] 可选的,所述第二重排序子模块包括:
[0237] 拆分单元,用于对所述第四指令列表进行针对操作指令的遍历,并针对当前遍历的操作指令将所述第四指令列表进行拆分,得到第一列表、第二列表和第三列表,所述第一列表为所述第四指令列表中排序在首位的操作指令到与所述当前遍历的操作指令相邻的前一个操作指令构成的列表,所述第二列表为所述当前遍历的操作指令构成的列表,所述第三列表为所述第四指令列表中排序在所述当前遍历的操作指令之后的操作指令构成的列表;
[0238] 重排单元,用于基于所述依赖关系中所述当前遍历的操作指令与所述第一量子电路的操作指令之间的目标依赖关系、所述第一列表、所述第二列表和所述第三列表,对所述第四指令列表进行操作指令的重排;
[0239] 确定单元,用于在所述第四指令列表遍历完成的情况下,基于重排后的所述第四指令列表确定所述第二指令列表。
[0240] 可选的,所述重排单元,具体用于:
[0241] 基于所述目标依赖关系和所述第一列表,获取第一目标列表,所述第一目标列表指示所述第一列表中与所述当前遍历的操作指令之间存在所述目标依赖关系的操作指令;
[0242] 基于所述第一目标列表和第二目标列表,确定第三目标列表,第二目标列表指示所述第四指令列表中与所述当前遍历的操作指令之间存在所述目标依赖关系的操作指令,所述第三目标列表为从所述第二目标列表删除所述第一目标列表后得到的列表;
[0243] 在所述第三目标列表不为空集的情况下,从所述第三列表中删除所述第三目标列表指示的操作指令,得到第四列表;
[0244] 将所述第一列表、所述第三目标列表指示的操作指令、所述第二列表和所述第四列表按照从前至后的顺序进行列表拼接,得到重排后的所述第四指令列表。
[0245] 可选的,所述重排序模块1003还包括:
[0246] 移动子模块,用于将重排后的所述第四指令列表中量子测量操作的操作指令移动至目标位置,得到所述第二指令列表;
[0247] 其中,所述目标位置为位于重排后的所述第四指令列表中目标操作指令之后,且与所述目标操作指令相邻的位置,所述目标操作指令所作用的量子位包括所述量子测量操作的操作指令所作用的量子位,所述第二指令列表中排序在所述目标位置之后的操作指令不包括所述量子测量操作的操作指令所作用的量子位。
[0248] 可选的,所述等效编译模块1004包括:
[0249] 第二获取子模块,用于针对所述第二指令列表中每一操作指令,获取所述操作指令所作用的量子位;
[0250] 确定子模块,用于基于所述量子位和寄存单元字典,确定为所述量子位分配的第二量子电路的寄存单元的目标标识,所述寄存单元字典包括寄存单元与所述量子位的对应关系;
[0251] 等效编译子模块,用于基于所述目标标识,对所述操作指令进行等效编译,得到与所述操作指令等效的第二量子电路中操作指令,所述第三指令列表包括等效编译得到的所述第二量子电路中操作指令。
[0252] 可选的,所述确定子模块包括:
[0253] 第一确定子单元,用于在查询到所述寄存单元字典中包括所述量子位的对应关系的情况下,将所述量子位对应的寄存单元的标识确定为所述目标标识;
[0254] 第二确定子单元,用于在查询到所述寄存单元字典中未包括所述量子位的对应关系的情况下,基于所述寄存单元字典为所述量子位分配寄存单元,将所述量子位分配的寄存单元的标识确定为所述目标标识,并基于所述量子位分配的寄存单元的标识更新所述寄存单元字典。
[0255] 可选的,所述第二确定子单元,具体用于:
[0256] 在查询到所述寄存单元字典中包括第一寄存单元的标识的情况下,将所述第一寄存单元分配给所述量子位,所述第一寄存单元为未分配给节点的寄存单元;
[0257] 在查询到所述寄存单元字典中不包括所述第一寄存单元的标识的情况下,获取所述寄存单元字典所表征的寄存单元的数量,基于所述数量确定所创建的第二寄存单元的标识,并将所述第二寄存单元分配给所述量子位。
[0258] 可选的,所述第一寄存单元为未分配给节点的寄存单元中标识最小的寄存单元。
[0259] 可选的,所述等效编译子模块,具体用于:
[0260] 在所述操作指令为量子门操作的操作指令的情况下,基于所述目标标识,将所述操作指令等效编译成第二量子电路中量子门操作的操作指令;
[0261] 在所述操作指令为量子测量操作的操作指令的情况下,基于所述目标标识,将所述操作指令等效编译成第二量子电路中量子测量操作的操作指令,更新所述寄存单元字典,以及生成所述第二量子电路中重置操作的操作指令,更新后的所述寄存单元字典指示所述目标标识对应的寄存单元为未分配给量子位的寄存单元。
[0262] 本公开提供的量子电路处理装置1000能够实现量子电路处理方法实施例实现的各个过程,且能够达到相同的有益效果,为避免重复,这里不再赘述。
[0263] 本公开的技术方案中,所涉及的用户个人信息的收集、存储、使用、加工、传输、提供和公开等处理,均符合相关法律法规的规定,且不违背公序良俗。
[0264] 根据本公开的实施例,本公开还提供了一种电子设备、一种可读存储介质和一种计算机程序产品。
[0265] 图11示出了可以用来实施本公开的实施例的示例电子设备的示意性框图。电子设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本公开的实现。
[0266] 如图11所示,设备1100包括计算单元1101,其可以根据存储在只读存储器(ROM)1102中的计算机程序或者从存储单元1108加载到随机访问存储器(RAM)1103中的计算机程序,来执行各种适当的动作和处理。在RAM 1103中,还可存储设备1100操作所需的各种程序和数据。计算单元1101、ROM 1102以及RAM 1103通过总线1104彼此相连。输入/输出(I/O)接口1105也连接至总线1104。
[0267] 设备1100中的多个部件连接至I/O接口1105,包括:输入单元1106,例如键盘、鼠标等;输出单元1107,例如各种类型的显示器、扬声器等;存储单元1108,例如磁盘、光盘等;以及通信单元1109,例如网卡、调制解调器、无线通信收发机等。通信单元1109允许设备1100通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
[0268] 计算单元1101可以是各种具有处理和计算能力的通用和/或专用处理组件。计算单元1101的一些示例包括但不限于中央处理单元(CPU)、图形处理单元(GPU)、各种专用的人工智能(AI)计算芯片、各种运行机器学习模型算法的计算单元、数字信号处理器(DSP)、以及任何适当的处理器、控制器、微控制器等。计算单元1101执行上文所描述的各个方法和处理,例如量子电路处理方法。例如,在一些实施例中,量子电路处理方法可被实现为计算机软件程序,其被有形地包含于机器可读介质,例如存储单元1108。在一些实施例中,计算机程序的部分或者全部可以经由ROM 1102和/或通信单元1109而被载入和/或安装到设备1100上。当计算机程序加载到RAM 1103并由计算单元1101执行时,可以执行上文描述的量子电路处理方法的一个或多个步骤。备选地,在其他实施例中,计算单元1101可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行量子电路处理方法。
[0269] 本文中以上描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、芯片上系统的系统(SOC)、负载可编程逻辑设备(CPLD)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出装置。
[0270] 用于实施本公开的方法的程序代码可以采用一个或多个编程语言的任何组合来编写。这些程序代码可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器或控制器,使得程序代码当由处理器或控制器执行时使流程图和/或框图中所规定的功能/操作被实施。程序代码可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
[0271] 在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD‑ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
[0272] 为了提供与用户的交互,可以在计算机上实施此处描述的系统和技术,该计算机具有:用于向用户显示信息的显示装置(例如,CRT(阴极射线管)或者LCD(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。
[0273] 可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(LAN)、广域网(WAN)和互联网。
[0274] 计算机系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端‑服务器关系的计算机程序来产生客户端和服务器的关系。服务器可以是云服务器,也可以为分布式系统的服务器,或者是结合了区块链的服务器。
[0275] 应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本公开中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本公开公开的技术方案所期望的结果,本文在此不进行限制。
[0276] 上述具体实施方式,并不构成对本公开保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本公开的精神和原则之内所作的修改、等同替换和改进等,均应包含在本公开保护范围之内。