用于数字和量子计算机上的统一计算的系统和方法与流程

文档序号:29210255发布日期:2022-03-12 04:39阅读:211来源:国知局
用于数字和量子计算机上的统一计算的系统和方法与流程
用于数字和量子计算机上的统一计算的系统和方法
相关申请的交叉参考
1.本技术要求2019年12月9日提交的标题为“用于数字和量子计算机上的统一计算的系统和方法(systems and methods for unified computing on digital and quantum computers)”的第62/945,434号美国临时专利申请的优先权,所述临时专利申请的全文以引用的方式并入本文中。
技术领域
2.本公开大体上涉及用于提供可在传统或量子处理器上编译和运行的统一语言的系统和方法。


背景技术:

3.量子计算需要考虑不同于传统计算机的量子计算机的架构。此项技术中需要其中将以统一计算语言编写的源代码编译成在量子计算机和/或常规数字计算机上运行的计算方法。


技术实现要素:

4.本公开通过引入量子编译器来解决上述缺点,所述量子编译器编译以统一计算语言编写的源代码,使得其可在量子计算机和/或常规数字计算机上运行。
5.本公开的一个方面提供一种计算机系统,其用于编译可在包括多个量子位的目标量子计算机和/或数字计算机上运行的计算机程序。计算机系统包括一个或多个处理器、存储器,以及呈编译程序的形式的一个或多个程序。编译程序包括统一级模块,其获得以统一语言(例如,carbon)编写的计算机程序。
6.当被配置成产生可在数字计算机而非目标量子计算机上运行的代码时,统一级模块将以统一语言编写的计算机程序转换为源代码,所述源代码可使用常规工具针对数字计算机直接(例如,呈matlab、octave c、c++、fortran等的形式)编译或解译。
7.当被配置成产生可在量子计算机上运行的代码时,统一级模块对计算机程序的全部或一部分执行代码重构,且将重构代码转换为高级量子语言(例如,beryllium)的第一代码。在一些实施例中,这通过首先用针对产生相同输出的专用函数的调用替换重构代码中的环路和其它编程结构的某一组合(其可使用传统和量子处理的某一组合加速)来实现。并且,在一些实施例中,使用量子数据结构和量子算法实施对统一级代码中的抽象数据类型的操作。
8.高级量子语言的第一代码替换以统一语言编写的计算机程序。高级量子语言为函数、环路、递归、指针和数据结构(struct)及对象(种类)定义提供支持。编译程序的下部层级将这些操作划分为较简单操作直至代码由个别门操作组成。
9.编译程序进一步包括高级模块,其单独地或连同实施由统一级源代码使用的函数和数据类型的高级语言的额外源代码一起接收第一代码,且产生允许环路、子例程和流控
制指令的低级量子语言(helium)的第二代码。编译程序进一步包括低级模块,其接收任选地优化代码以改进性能的第二代码,且将其转换为一系列门级操作,借此形成第三代码。编译程序进一步包括门级模块,其将第三代码编译为任选地实施误差缓解程序和门合成的第四代码,其中第四代码以量子门级语言根据指令集的约束和目标量子计算机的门定位约束来表达。
10.本公开的另一方面提供一种数字计算机系统,其用于编译用于包括多个量子位或多个量子四元的目标量子处理器的计算机程序。计算机系统包括一个或多个数字处理器、存储器,以及呈编译程序的形式的一个或多个程序。编译程序包括统一级模块,其获得以统一语言(例如,carbon)编写的计算机程序,且对计算机程序的全部或一部分执行代码重构以形成重构代码并将重构代码转换为第一代码(beryllium)。编译程序进一步包括将第一代码(beryllium)编译为第二代码(helium)的高级模块。高级模块支持第一代码内的环路、子例程和流控制指令。编译程序进一步包括低级模块,其接收第二代码(helium)且将第二代码转换为包括一系列量子门级操作的第三代码(hydrogen)。编译程序进一步包括门级模块,其将第三代码(hydrogen)编译为根据指令集和目标量子处理器的门定位约束以量子门级语言表达的第四代码。
11.在一些实施例中,统一级模块通过用共同地实现以统一语言编写的计算机程序中的源环路的结果的多个环路替换所述源环路来执行代码重构,其中所述多个环路中的每一环路的复杂性(例如,指令的数目)小于源环路的复杂性。
12.在一些实施例中,统一级模块通过用共同地实现以统一语言编写的计算机程序中的源环路的结果的多个环路替换所述源环路来执行代码重构,其中所述多个环路中的每一环路的复杂性(例如,指令的数目)小于源环路的复杂性。
13.在一些实施例中,统一级模块通过对以统一语言编写的计算机程序中的源环路进行分析求解来执行代码重构。
14.在一些实施例中,统一级模块通过用量子数据结构替换所述多个环路中的环路来执行代码重构。
15.在一些实施例中,统一级模块通过编码以统一语言编写的计算机程序的一部分以执行量子算法来执行代码重构,所述量子算法执行计算机程序的所述部分的功能。在一些此类实施例中,量子算法是能力放大量子算法。
16.在一些实施例中,高级模块提供对第一代码中指定的量子门级命令的访问,且支持位于第一代码中的所述多个量子位中的量子位上或所述多个量子四元中的量子四元上编码的指针、函数、不可展开的环路、递归、指针、数据结构定义和种类对象定义。
17.在一些实施例中,第一代码限定量子数据结构。在一些此类实施例中,量子数据结构为曲线集合。
18.在一些实施例中,统一语言限于数字指令。
19.在一些实施例中,以用条件句扩增的门级语言编写第二代码,且第二代码包含条件句。在一些此类实施例中,条件句是“if”条件或“repeat”条件,在“repeat”条件中,重复动作直至实现预定条件。在一些此类实施例中,预定条件为用于由第二代码限定的一个或多个量子位或量子四元的传统测量结果。
20.在一些实施例中,以针对子例程的支持扩增门级语言,其中第二代码的一个部分
由第二代码的另一部分重复地调用直至实现预定结果。在一些此类实施例中,子例程为测量子例程。在一些此类实施例中,测量子例程利用所述多个量子位或量子四元中的辅助量子位或量子四元来改进测量结果。在一些实施例中,预定结果为用于由第二代码限定的一个或多个量子位或量子四元的测量结果。
21.在一些实施例中,条件句为递增环路。
22.在一些实施例中,低级模块至少部分通过以下操作将第二代码转换为第三代码:优化条件句内的代码以形成经优化条件句,其中由经优化条件句指定的代码序列的迭代具有比由条件句指定的代码序列的迭代少的指令;将经优化条件句展开为一系列量子门;以及将所述系列的量子门并入到第三代码中。
23.在一些实施例中,低级模块至少部分通过优化用以执行第二代码的一部分的量子操作,借此减小第三代码中的执行量子操作所需的门的数目或量子位的数目或量子四元的数目,来将第二代码转换为第三代码。
24.在一些实施例中,第二代码限定目标量子处理器内的量子位或量子四元。在一些实施例中,第二代码限定目标量子处理器内的量子位的寄存器或量子四元的寄存器。
25.在一些实施例中,门级语言支持量子位或量子四元测量。
26.在一些实施例中,量子门级语言使用多个不同门。在一些实施例中,所述多个不同门中的每一相应门在不同数据结构中限定,所述不同数据结构包含相应门的名称、依据量子位或量子四元的数目的相应门的尺寸,以及相应门的相应多个kraus算子。在一些此类实施例中,相应门的相应多个kraus算子由函数句柄指定。
27.在一些实施例中,第三代码支持所述多个量子位中的一个或多个量子位或所述多个量子四元中的一个或多个量子四元的一般正算子值量度。
28.在一些实施例中,门级模型至少部分通过执行门合成而将第三代码编译为第四代码,在门合成中,实施第三代码的至少一部分的理想门的序列与不同于理想门的序列的门序列调换,但将在目标量子处理器上执行理想门的序列的功能。在一些此类实施例中,不同于理想门的序列的门序列由目标量子处理器的所存储硬件表征标识。
29.在一些实施例中,编译程序进一步包括用于在遵守目标量子处理器的定位约束的同时进行第四代码的回路嵌入的指令。
30.在一些实施例中,用于在遵守目标量子处理器的定位约束的同时进行第四代码的回路嵌入的指令进一步包括在执行2-子系统门时考虑目标量子处理器的所确定质量。
31.在一些实施例中,编译程序进一步包括用于对在目标量子处理器上实施计算机程序所需的门、量子位、量子四元的数目或所有时钟时间进行计数的指令。
32.在一些实施例中,编译程序进一步包括用于在目标量子处理器上实施计算机程序的第一部分以及在数字计算机系统的数字中央处理单元或图形处理单元上实施计算机程序的第二部分的指令。
33.在一些实施例中,编译程序进一步包括用于模拟由编译程序在数字计算机系统的数字中央处理单元或图形处理单元上生成的量子代码的指令。
34.本公开的另一方面提供一种编译可在包括多个量子位或多个量子四元的目标量子处理器上运行的计算机程序的方法,其包括:在包括一个或多个数字处理器和存储器的数字计算机系统处,所述存储器包括被配置成使用所述一个或多个数字处理器执行程序的
非暂时性指令,所述程序包括以统一级模块获得以统一语言编写的计算机程序。所述程序进一步包括以统一级模块在计算机程序的全部或一部分上执行代码重构以形成重构代码。所述程序进一步包括将重构代码转换为第一代码。所述程序进一步包括以高级模块将第一代码编译为第二代码,其中高级模块支持第一代码内的环路、子例程和流控制指令。所述程序进一步包括以低级模块将第二代码转换为包括一系列量子门级操作的第三代码,以及以门级模块将第三代码编译为根据指令集和目标量子处理器的门定位约束以量子门级语言表达的第四代码。
35.本公开的另一方面提供一种存储一个或多个程序的非暂时性计算机可读存储介质。所述一个或多个程序包括指令,所述指令当由具有一个或多个数字处理器的数字计算机系统执行时致使数字计算机系统执行程序,所述程序包括以统一级模块获得以统一语言编写的计算机程序。所述程序进一步包括以统一级模块在计算机程序的全部或一部分上执行代码重构以形成重构代码。所述程序进一步包括将重构代码转换为第一代码。所述程序进一步包括以高级模块将第一代码编译为第二代码,其中高级模块支持第一代码内的环路、子例程和流控制指令。所述程序进一步包括以低级模块将第二代码转换为包括一系列量子门级操作的第三代码。所述程序进一步包括以门级模块将第三代码编译为根据指令集和目标量子处理器的门定位约束以量子门级语言表达的第四代码。
附图说明
36.图1是展示根据本公开的一实施例包含传统计算机系统和量子计算机两者的实例系统的方面的示意图。
37.图2是根据本公开的一实施例用于将统一计算语言代码编译为可在量子计算机和/或传统计算机上运行的代码的传统计算机系统的示意图。
38.图3是展示根据本公开的一实施例将统一计算语言代码编译为在量子计算机和/或传统计算机上运行的代码的流程图。
39.图4示出根据本公开的一实施例将统一计算语言代码编译为可在量子计算机和/或传统计算机上运行的代码的编译程序架构的阶段。
40.图5示出根据本公开的一实施例将统一计算语言代码编译为可在量子计算机上运行的代码的量子编译程序架构的阶段。
41.图6示出根据本公开的一实施例将统一计算语言代码编译为可在量子计算机上运行的代码的包含统一级、高级、低级和门级的量子编译程序架构的阶段。
42.图7示出根据本公开的一实施例用于将统一计算语言代码编译为可在量子计算机和/或传统计算机上运行的代码的量子编译程序架构的每一级的特征。
43.图8示出根据本公开的一实施例用于将统一计算语言代码编译为可在量子计算机和/或传统计算机上运行的代码的量子编译程序架构的门级的特征。
44.图9进一步示出根据本公开的一实施例用于将统一计算语言代码编译为可在量子计算机和/或传统计算机上运行的代码的量子编译程序架构的门级的特征。
45.图10进一步示出根据本公开的一实施例用于将统一计算语言代码编译为可在量子计算机和/或传统计算机上运行的代码的量子编译程序架构的门级的特征。
46.图11示出根据本公开的一实施例可依据例如随机基准测试等各种量度被视为不
良的量子位可如何含有可由门级模块中的门合成缓解的可校正误差。
47.图12示出根据本公开的一实施例的标识(无操作)门的校准和门合成。
48.图13示出根据本公开的一实施例用于将统一计算语言代码编译为可在量子计算机和/或传统计算机上运行的代码的量子编译程序架构的低级的特征。
49.图14进一步示出根据本公开的一实施例用于将统一计算语言代码编译为可在量子计算机和/或传统计算机上运行的代码的编译程序架构的低级的特征。
50.图15示出根据本公开的一实施例用于将统一计算语言代码编译为可在量子计算机和/或传统计算机上运行的代码的量子编译程序架构的高级的特征。
51.图16示出根据本公开的一实施例针对用于将统一计算语言代码编译为可在量子计算机和/或传统计算机上运行的代码的量子编译程序架构中的指针的支持。
52.图17示出根据本公开的一实施例用于将统一计算语言代码编译为可在量子计算机和/或传统计算机上运行的代码的量子编译程序架构的统一级的特征。
53.图18示出根据本公开的一实施例在统一计算语言代码中产生的复杂性的来源,以及它们如何由编译程序处理。
54.图19示出根据本公开的一实施例可使用量子编译程序架构重构的源代码。
55.图20示出根据本公开的一实施例使用所公开的编译程序架构将图19的源代码分裂为离散片段。
56.图21示出根据本公开的一实施例重构图20的代码以用于使用所公开的编译程序架构进行量子计算。
57.图22示出根据现有技术的语言的演进。
58.图23示出根据本公开的一实施例的量子系统的表征。
59.图24示出根据本公开的一实施例作为量子计算装置中的函数的特定量子位的|0〉和|1〉状态之间的能量改变如何受与所述特定量子位耦合的量子计算装置中的量子位的基础状态影响。
60.图25示出根据本公开的一实施例针对特定量子位的各种误差缓解技术的实例。
61.图26示出根据本公开的一实施例针对另一量子位的各种误差缓解技术的实例。
62.图27示出根据本公开的一实施例的各种误差缓解技术的实例。
63.图28示出根据本公开的一实施例的量子计算芯片中的所有耦合的映射。
64.图29示出根据本公开的一实施例通过利用辅助改进两个不同量子计算芯片中的测量误差。
65.图30示出根据本公开的一实施例实施例如曲线结构等量子数据结构。
66.图31示出根据本公开的一实施例用于将统一计算语言代码编译为可在量子计算机和/或传统计算机上运行的代码的量子编译程序架构。
67.图32a、32b和32c示出根据本公开的一实施例的门的限定。
68.图33a和33b示出根据本公开的一实施例的实例helium程序。
69.图34示出根据本公开的一实施例的门合成,其中目标量子系统为连续变量量子系统。
70.图35示出根据本公开的一实施例的门合成,其中目标量子系统为离散变量量子系统。
71.图36示出根据本公开的实施例实施的自旋回波误差缓解策略。
72.图37a和37b示出根据本公开的实施例实施的依据奇偶性回波误差缓解策略。
73.贯穿图式的若干视图,相同的参考标号指代对应的零件。
具体实施方式
74.公开用于编译可在包括多个量子位或量子四元的目标量子计算机和/或数字计算机上运行的计算机程序的计算机系统和方法。编译程序的统一级模块获得以统一语言编写的计算机程序,且对计算机程序的全部或一部分执行代码重构以形成重构代码,并将重构代码转换为第一代码。编译程序的高级模块将第一代码编译为第二代码,其中第二代码允许环路、子例程和流控制指令。编译程序的低级模块接收第二代码,且将第二代码转换为包括一系列量子门级操作的第三代码。编译程序的门级模块将第三代码编译为根据指令集和目标量子处理器的门定位约束以量子门级语言表达的第四代码。
75.现将详细参考实施例,在附图中示出实施例的实例。在以下详细描述中,阐述许多特定细节以便提供对本公开的透彻理解。然而,所属领域的一般技术人员将理解,可在没有这些特定细节的情况下实践本公开。在其它例子中,未详细描述众所周知的方法、程序、组件、电路和网络,以免不必要地混淆实施例的各方面。
76.应理解,尽管本文中可使用术语第一、第二等来描述各种元件,但这些元件不应受这些术语限制。这些术语仅用以将一个元件与另一元件区分开来。例如,在不脱离本公开的范围的情况下,第一主体可以被称为第二主体,并且类似地,第二主体可以被称为第一主体。第一主体和第二主体都是主体,但它们不是同一个主体。
77.在本公开中使用的术语仅出于描述特定实施例的目的,并且不希望限制本发明。如在本发明的描述内容和所附权利要求中所使用,单数形式“一”和“所述”也希望包含复数形式,除非上下文另外清楚地指示。还将理解,如本文中所使用的术语“和/或”指代且涵盖相关联的所列项目中的一个或多个的任何及所有可能的组合。将进一步理解,术语“包括”在用于本说明书中时规定所陈述的特征、整数、步骤、操作、元件,和/或组件的存在,但不排除一个或多个其它特征、整数、步骤、操作、元件、组件,和/或其群组的存在或添加。
78.如在本文所使用,取决于上下文,术语“如果”可以被解释成意指“当
……
时(when)”或“在
……
后(upon)”或者“响应于确定”或“响应于检测到”。类似地,取决于上下文,短语“如果确定”或“如果检测到[所陈述的条件或事件]”可被解释为表示“在确定...后”或“响应于确定”或“在检测到[所陈述的条件或事件]后”或“响应于检测到[所陈述的条件或事件]”。
[0079]
图1示出用于提供统一语言的计算机系统拓扑48,所述统一语言可经编译且在传统数字计算机60或包括多个量子位102的量子计算机64上运行。参看图1,在典型的实施例中,所述拓扑包含与包括多个量子位102的量子计算机64和数字计算机60电子通信的编译程序计算机系统100。在一些实施例中,编译程序计算机系统100和数字计算机60是相同计算机或相同计算机系统。在一些实施例中,编译程序计算机系统100和量子计算机64之间的电子通信经由通信网络106进行。在一些实施例中,一旦已经编译,编译程序计算机系统100就将合适的量子代码62应用到量子计算机64。
[0080]
出于图1中图示的目的,编译程序计算机系统100和数字计算机系统60各自表示为
包含传统计算机系统的所有功能性的单个相应计算机。然而,本公开不限于此。编译程序计算机系统100和/或数字计算机60的功能性可跨任何数目的联网计算机分布和/或驻留在若干联网计算机中的每一个上。所属领域的技术人员将了解,编译程序计算机系统100的各种不同计算机拓扑是可能的,并且所有此些拓扑都在本公开的范围内。
[0081]
记住上文转向图2,编译程序计算机系统100包括一个或多个处理单元(cpu)74、网络或其它通信接口84、用户接口78(例如,包含显示器82和键盘80或其它形式的输入装置)、存储器92(例如,随机存取存储器)、任选地由一个或多个控制器88存取的一个或多个磁盘存储装置和/或持久性装置90、用于互连前述组件的一个或多个通信总线12,以及用于为前述组件供电的电源76。存储器92中的数据可以使用例如高速缓存等已知的计算技术与非易失性存储器90无缝共享。存储器92和/或存储器90可包含相对于中央处理单元74远程定位的大容量存储装置。换句话说,存储于存储器92和/或存储器90中的一些数据可实际上代管于计算机上,所述计算机在分析计算机系统100外部但可由分析计算机系统经由因特网、内联网或其它形式的网络或电子线缆使用网络接口84以电子方式存取。
[0082]
编译程序计算机系统100的存储器92存储:
·
操作系统8,其包含用于处理各种基本系统服务的程序;
·
以统一语言10编写的计算机程序;
·
编译程序12,其用于编译可在包括多个量子位或量子四元的目标量子计算机和/或数字计算机上运行的计算机程序,所述编译程序包含:统一级模块14,其获得以统一语言编写的计算机程序10且对计算机程序的全部或一部分执行重构以形成重构代码并将重构代码转换为第一代码(15);高级模块102,其将第一代码编译为第二代码104,其中第二代码104允许环路、子例程和流控制指令;低级模块106,其接收第二代码104且将第二代码104转换为包括一系列量子门级操作的第三代码108;以及门级模块110,其将第三代码108编译为第四代码112,其中第四代码根据指令集和目标量子计算机64的门定位约束以量子门级语言表达。
[0083]
在一些实施方案中,编译程序计算机系统100的上文指出的数据要素或模块中的一个或多个存储于先前所公开的存储器装置中的一个或多个中,且对应于用于执行上文描述的功能的指令集。不必将上文指出的数据、模块或程序(例如,指令集)实施为单独的软件程序、程序或模块,且因此可在各种实施方案中组合或以其它方式重新布置这些模块的各种子集。在一些实施方案中,存储器92和/或90任选地存储上文指出的模块和数据结构的子集。此外,在一些实施例中,存储器92和/或90存储上文未描述的额外模块和数据结构。
[0084]
虽然致力于量子算法的人数较少,但拥有github帐户且因此可被视为常规软件工程师的人数很多,约一亿人。并且,已存在关于如何使量子计算的编程及类似工作民主化的大量实验。举例来说,ibm等已经致力于开放源开发工具且尝试激励人们使用其平台,一部分原因是希望这将实现量子计算算法的繁荣。但尽管如此,到目前为止,致力于量子算法的人数仍然很少。
[0085]
就量子计算而言,其大部分一直实施为变分技术-它们本质上都是相对类似的。从尚未处于量子计算行业的用户的团体兴起的基本上新的算法很少见。虽然始终有来自具有量子计算背景的人们的的确新的算法,但不一定来自量子计算领域之外的在计算机科学的其它领域工作的人们一定已经采用量子计算平台和有帮助的新应用进行量子计算。本公开
的系统和方法被设计成解决此缺点。
[0086]
参考图31,本公开提供一种新颖的方法。为了为方法设定背景,图22提供编程语言的历史的实例里程碑。五十年前,比如微码和汇编等语言变得可用。随着时间的推移,例如basic和c等具有越来越高的抽象层级的语言兴起。如此,使用matlab或python编写的编程者不在意处理器如何工作。也就是说,编程者不需要留意该种细节中的任一个,因为这一直由解译程序解决。然而,c稍许接近,且一旦与汇编打交道,编程者就必须在以此语言编程时考虑处理器的个别寄存器。本公开的系统和方法的目标是,抽象化到足够高的层级使得一个人可以使用同一语言编程常规计算机和量子计算机两者。这使拓宽在传统量子计算团体之外的计算机科学家对量子计算机的访问权的目标更进了一步。在如此操作时,这使量子计算机更容易访问。参考图4,例如matlab和octave等语言已经是足够高的层级使得它们可用于表达编程者想要以算法方式实现的内容,且因此,此抽象层级处的代码充当接着被编译为利用量子计算机上运行的量子算法技术的代码的代码的基础,以获得在纯数字计算机上运行的同一代码的性能优点。参看图5,用于根据本公开的系统和方法实现此目标的基本步骤是,用一些常规源代码502(例如,以例如matlab或octave等编程语言所典型的抽象层级编写)且作出初始代码的某一抽象表示504。在如此操作时,在一些实施例中,语法树由初始代码构成。依据所述抽象表示,尝试构造量子算法506,将量子算法转化为某一回路表示508,将回路表示508转化为用于量子计算装置的本地回路510,且接着最终转化为针对装置的无论什么本地操作。如此,要素512可能表示输出成量子编程语言,例如quil(smith等,2016),“切实可行的量子指令集架构”,arxiv:1608.03355[quant-ph])或cqasm(bertels等,2018-05-24,“cqasm v1.0:针对共同量子汇编语言”,arxiv;1805.09607v1[quant-ph]),或其可能表示输出脉冲序列。
[0087]
图7广义地示出图6被实施的方式。提供由四个不同级组成的编译程序。在基底处,存在门级语言(hydrogen,门级模块)。hydrogen(第三代码)为门聚焦的。helium可(第二代码)被视为量子basic。helium仍进行门操作,但还提供基本环路和条件语句及子例程。基于提供执行struct和函数及种类的能力,beryllium(第一代码)可等同于量子c。最高级是被称为carbon的matlab和octave的某种共同子集。carbon是可在数字传统计算机上运行的传统语言。参看图6,观察所公开的编译程序工作的方式,存在四个级。在最高级处,传统代码(carbon)可直接在传统数字中央处理单元或图形处理单元上运行。随着编译进展到较低层级(沿着图6的堆栈),剩余语言在递减的抽象层级下均为量子的。beryllium是相当高的层级且支持函数、种类、struct以及指针。在beryllium下,存在helium,其可视为量子basic且支持子例程和环路。beryllium允许资源捕获,例如估计用于特定算法的资源、后量子密码,和预测什么资源袋将用于特定算法。beryllium允许编程者编码量子程序使得不需要指定门级处的指令,但仍允许代码的优化。以此方式,beryllium可用于执行资源计数,而不必将一切都扩展到大量的门中。继续参考图6,在最低级处,存在门级语言(hydrogen),其仅字面上逐量子门指定量子计算装置将执行什么操作来执行由较高级语言指定的算法。hydrogen直接与量子计算硬件介接。
[0088]
为了使用量子计算机对计算问题求解,不仅需要量子计算机,还需要可利用量子计算机来对问题求解的软件。有利的是,本公开的系统和方法不仅为量子团体而且为对使用量子计算机对计算问题求解表示出兴趣的常规软件工程师提供编程工具。
[0089]
现将以反转的次序呈现图6中所示出的量子编译程序的层,从硬件前开始,向上移动到门级,接着是低级、高级量子语言,且接着最终将传统代码如此转换为量子代码。
[0090]
表征和编译。
[0091]
此章节表征和编译针对图31的阶段30,表征。公开用于产生由本公开的系统和方法的各种编译程序级考虑的量子处理器的简档的表征例程。
[0092]
参看图23,从硬件和表征开始,由本公开的系统和方法解决的原因是,实施于市售量子芯片(例如regetti和ibm量子芯片)中的门不是完美的。它们展现出噪声和误差。此外,所述噪声不是理论工作者们喜欢考虑的简单种类的噪声。其不是独立同分布(i.i.d.)噪声、去极化噪声或振幅阻尼噪声。如此,为了使量子代码较好地运行,知晓量子装置实际正在做什么很有帮助。举例来说,相对于误差,存在量子系统中引发的各种误差。量子系统上应用的一些门由量子系统错误地校准。举例来说,作为单位门的一部分实施于量子系统上的旋转可旋转与预期不同的角度而结束,但仍为单位门。这是其中量子系统的表征直接有帮助的情形。如果知晓当实施于特定量子芯片中时门在做什么,而非其应该做什么。了解了这一点,可编译较好的结果。如此,保持跟踪这些表征且在量子编译过程期间考虑这些表征是有利的。此外,相对于噪声,在许多情况下,其为非马可夫链的且可在一定程度上配衡。举例来说,可存在各种方式使其解耦,或简单地以稍微不同的方式校准量子系统以考虑频谱中观察到的一些拓宽。如此,根据本公开的系统和方法的一些实施例进行原因表征,使得表征可反馈到编译程序的较低级中,使得当尝试将回路嵌入到量子处理器中时,可考虑门的质量。举例来说,并非所有cz或cnot创建为相等的。一些比其它要好,且如果执行门合成,则在总体误差预算方面一些操作比其它操作便宜。如此,根据本公开的系统和方法发生的表征被设计成考虑这一点。此外,使用表征来考虑单位误差且产生可能的最佳操作。
[0093]
图11提供从32量子位regetti芯片获取的实例。如果以量子位进行拉姆齐(ramsey)实验,则观察到针对大多数量子位逐渐衰变的良好余弦曲线,但有一个量子位(1102)与图11中灰视的其它量子位对比不展现周期性行为。不清楚量子位1102正发生什么。量子位1102可被视为不良量子位,其存在某一错误,且绝不应使用。然而,在调查后发现,量子位1102实际极接近于纯状态。其较好地初始化,且正发生的是:量子位本身上正进行的操作不在正确的初始阶段处开始,且所述操作不正确。也就是说,正使用量子位执行操作序列,但它们是与既定的操作不同的操作,且因此产生不良结果。然而,如果此信息是已知的,则可使用表征来尝试考虑这一点。
[0094]
图24提供另一实例,其中展示实际缓解量子装置内部的杂散耦合的结果。超导处理器中常见的是,个别量子位基本上彼此耦合(例如,利用伊辛(ising)交互),而此处不该如此。如此,一般效应是,当相应量子位的交互相邻者处于|0》状态时,相应量子位|0》和|1》状态之间的间隙具有某一特定值,但如果交互相邻者处于激发态(|1》),则其具有改变相应量子位的操作级的效应。换句话说,将相应量子位从|0》状态改变到|1》状态所需的能量的量存在改变。如此,如果交互相邻者和相应量子位各自处于其相应|1》状态,则实现能量图的一个极限,且如果交互相邻者和相应量子位各自处于其相应|0》状态,则实现能量图的不同极限。此外,,可存在一个以上交互相邻者,图24仅为其中仅存在一个交互相邻量子位的案例的实例。如果量子位处于某一纠缠状态,则发生拓宽且存在|0》和|1》之间的未限定间隙,这会引起问题。成问题的原因是,如果量子位被单独地置于|1》状态,则取决于其相邻者
的状态,其将开始累积阶段。大部分时间,无论进行什么校准过程,都假定相邻者处于|0》。如此,此校准假定装置中的相邻量子位处于|0》,且在这种情况下,执行x旋转或执行y旋转,非常好地使相应量子位从|0》到|1》,在谐振时关闭,但随着与相应量子位相邻的量子位的状态改变,引发去相干,因为相邻量子位和相应量子位之间存在叠加。图12示出。图12是从regetti q32 aspen-7芯片获取的真实数据的实例。在图12的左侧,示出联合拉姆齐实验。在|0》和|1》的叠加中准备单个量子位,且允许在再次进行旋转之前处理持续一定量的时间。在此之后,如果不累积阶段,则量子位应处于计算基础|0》。然而,量子位中的每一个具有某一自然频率,如此发生一些滞后作用。此外,对于图12中所示出的曲线,已实施平面图旋转,使得实现明显的曲线。因此,以特定相邻量子位处于|0》执行标绘图中的每一个中展现的曲线中的一个,且以所述相邻者处于|1》执行其它曲线。因此,曲线展示当相邻量子位处于|0》与|1》时频率如何移位,且此表示间隙的改变。如此,在某些情况下,间隙的此改变适当地较小,大约几千赫兹。在其它情况下,其上升到regetti芯片上的约35千赫兹耦合。已经观察到ibm芯片上达150千赫兹。此外,这些间隙可如图12的右手侧上所展示针对给定量子处理器绘制出来。图12的右手侧示出单个处理器上的不同对的量子位之间的测试最高点,以建立杂散耦合所位于的映射。如图12的右侧面板中所示出,很多时候,杂散耦合在最接近的相邻者之间。图12中(右侧)的顶点的位置是它们物理上位于芯片上的位置。但非最接近相邻者之间存在一些强耦合。
[0095]
在hydrogen中,存在命令等待(时间)[addr1、...、addrk]和等待(时间),其致使目标量子系统针对指定的时间周期(括号中的时间参数)不在所指示子系统(由addr1、...、addrk指定的量子位或量子四元)上或所有量子位上应用任何门。如下文图25和26将描述,在非理想量子系统中,在此等待周期期间量子系统实际发生了某一情形。如此,“等待”不如既定那样有效。在rigetti和ibm系统中,已发现,每一量子位上发生一些小z旋转,且一些量子位对之间的某一小伊辛(zz)交互(图12的右手部分中和图28中的曲线图中的线的厚度指示此不合需要的耦合的强度。图25和26中的标绘图展示应用若干缓解策略的结果以针对q=0和q=33(rigetti aspen-7处理器中的两个不同量子位)尝试近似hydrogen命令等待(t)[q]的等效值,但大多数(非光子)量子处理器中存在类似行为。对于图25和26,使用误差缓解技术来确保在某一时间周期内量子位什么也没有发生,但针对图25和26公开的相同技术可在更令人感兴趣的操作期间使用。
[0096]
图25示出根据本公开的系统和方法执行误差缓解技术的实例。曲线2502为原始量子位,且表示作为时间(以微秒计)的函数恢复特定量子状态的概率。准备量子状态,允许流逝某一时间量,且接着作出尝试以尝试恢复原始量子状态。但当这样做时,装置中的所有其它量子位叠加放置。因此,量子位由于这些杂散耦合而失相。本公开提供各种方式来处理此问题。第一最简单的方式是更新帧。如上所述,当校准量子装置时,它们常常在相邻量子位处于|0》状态的假设下校准。如此,基于相邻量子位处于|0》状态的假设来校准门的脉冲的持续时间。因此,在|0》状态和|1》状态之间,何时所有相邻者为|0》相当接近实际使用的脉冲。然而,如果相邻量子位放置于|1》状态,则相应量子位处于能量图的另一极限,如上文结合图24所论述,且产生能量的较大改变。解决此问题的良好策略是,假定如果考虑中的量子芯片上的所有量子位将成为计算的一部分,则它们可能与其它量子位纠缠且将不知道它们是否将处于|0》-|1》。在此些情形下,可作出假设:它们同概率地或较好处于|0》-|1》,且因
此不应认为观察到的能隙是通过测量何时相邻量子位处于|0》而实现的极限值。事实上,应选择何时所有相邻量子位处于|0》与何时所有相邻量子位处于|1》之间观察到的范围的中间的能隙。
[0097]
曲线2504(帧更新)示出当选择观察到的范围中间的此能隙时发生的情况。在此方法中,等待(t)[q]被rz(w*t)[q]替换。此意味着将小时间相关z旋转添加到量子位。此经由rigetti系统上的脉冲控制软件中的帧更新来进行(图25的图示),但其可改为直接在编译程序12的门合成模块(图31的阶段25)处进行。
[0098]
曲线2504衰变得比曲线2502(原始)慢。对于曲线2504,仍发生去相,但因为已经在相应量子位的能隙处于范围的中间的假设下设定脉冲序列,所以正发生的是一些相干旋转未被拾取。相比之下,曲线2502稍微向下降且开始往回升,因为去相的顶部上正有效地发生相干旋转,这是归因于如下事实:曲线2502的脉冲序列在能隙范围的一个极限处校准,而非如曲线2504的情况那样处于中心。
[0099]
或者,可采取自旋回波方法,其中允许量子位演进某一时间量,翻转,再次允许其演进相同时间量,且接着使翻转反转。这使任何伊辛交互从量子位解耦,从而提供展现较慢衰变的曲线2508。当此解耦进行时产生曲线2506,但交替的量子位集合翻转。交替的量子位翻转以使每个量子位彼此解耦,而非仅一个特定量子位与其相邻量子位解耦。如果所有量子位同时翻转,则所有那些耦合保持相同,它们与环境解耦而不是彼此解耦。如此将它们划分为两个群组且基于其处于那些集合中的哪一集合中来判定使哪一个翻转,产生曲线2506。因此,根据此第二误差缓解技术,通过在t/2处注入x门且接着在t处注入第二x门周期性地使量子位翻转。这是众所周知的称为自旋回波的技术,但还可使用其它解耦脉冲。这产生图25的曲线2506和2508。根据图36中所示出的实例代码,曲线2508是当仅量子位q翻转时。这实现目标量子位的好得多的性能,但其它量子位并不改进。改进所有地址选择而非仅q的等待(t)[addr1、...、addrk]的较复杂程序是选择量子位的子集以在不同时间点翻转。因为最强不合需要的耦合在偶数量子位和奇数编号的量子位之间,所以在图25的演示中仅奇数编号的量子位已经翻转,从而产生曲线2506。此错误校正技术的两个版本中的每一个的hydrogen代码分别在图36(曲线2508,集合回波)和37(曲线2506,依据奇偶性回波)中示出。在一些实施例中,图25中所示出的误差缓解技术中的任一个的实施方案或其等效物自动应用于编译程序12的门合成模块(图31的阶段25)中或在输出到目标量子系统之前单独地应用。
[0100]
图25示出aspen-7装置上的量子位零,其在特定时间处经校准。但图25的量子位不是跨各种校准技术发现最大差异的量子位。
[0101]
图26示出aspen-7装置上所见的典型差异。图26是在原始装置上不能较好地表现的量子位的实例。如此,在此情况下,曲线2602是原始效应:在加状态中准备量子位,将其静置某一时间量,且接着对其再次进行测量,从而有效地进行hadamark并对其进行测量。曲线2602在50%下方非常快速地下降,但实际往回升,因为其正拾取相干z旋转(其不应如此),但这是到量子计算芯片上的其它量子位的伊辛耦合的效应。
[0102]
继续参考图26,帧更新方法产生曲线2604,其已经提供直至约30或40微秒的显著改进,此时,解耦(曲线2606和2608)再次表现得好得多。因此,曲线2606和曲线2608远高于曲线2602和2604中的任一个。考虑达到恢复状态的70%机率的等待时间作为比较的度量,
原始策略(曲线2602)和如果采用解耦策略(依据奇偶性回波,曲线2606,图37;或1个回波集合,曲线2608,图36)中的任一个之间存在显著差异。因此,不同方法显著改变量子计算芯片上量子位的寿命。
[0103]
在上文的论述中,术语伊辛意图表示cz耦合。也就是说,既定无用于耦合的特定机制。已观察到持续不同时间量的量子位之间的成对断层扫描,如此已观察到密度矩阵中的项中的每一个如何随时间改变,且其有效量为zz项。且参看图12,如果考虑量子位14,则存在来自量子位1、15和13的贡献。如此,举例来说,如果仅考虑量子位15和14,则存在非常强的zz耦合,但还观察到去相,且所述去相的一部分由到量子位13的耦合引起,且其一部分由到量子位1的耦合引起。如果随时间标绘这些条目,可以看到去相为非马可夫链的,使得其比初始预期的更慢下降,且接着拾取速度。此指示量子位之间的耦合为相干的。同时存在松弛和其它形式的误差,但耦合是极显著的耦合。因此,图25和26中示出的解耦方法的使用改进用于执行量子操作的量子位的寿命。
[0104]
参看图26,显然耦合为伊辛的其它原因是,因为当执行简单自旋回波(其中量子位经由时间序列翻转一半且接着翻转回去)时,序列非常有效地取消所述耦合。
[0105]
为了进一步校准量子计算芯片,测量所有杂散耦合在量子计算装置上何处是有用的。虽然将合乎希望的是解耦装置上的所有量子位,但问题是此方法不可行。如果将在每个量子位上运行相同解耦序列,则将不使其彼此解耦,将使其与环境解耦。为了使量子位彼此解耦,需要在每一量子位上完成不同序列。但相比于相干时间(t2),实现此目的必需的门花费非常长的时间。如此,需要解耦量子位而不使用非常多的门。为此,知晓什么量子位耦合到什么其它量子位是有帮助的。虽然在每对量子位之间执行联合拉姆齐实验作为替代方案似乎很有意义。然而,在真实装置上,为了获得足够的统计数据,将需要连续地运行实验超过一天。问题是,这些参数改变,随时间漂移,因此到拉姆齐实验完成的时候,测量值不再有效。如此,为了有用,需要能够取约半小时内的所有测量值且接着更新装置上的参数,更新每一量子位的帧以及设计解耦脉冲序列,使得其被实施几个小时,且接着再次再校准。为了这样做,没有足够的时间执行成对测量。如此,本公开的系统和方法的一些实施例是针对如下方式;激发所有量子位,将其暴露于天然哈密顿系统持续不同时间量,且接着测量这些量子位并接着试图放弃所有量子位之间的成对耦合。因此,之前原本花费好几千次运行的,可降至rigetti q32 aspen-7 qpu上约七次运行,这是有用的。至少rigetti系统上的副作用是,似乎在较大芯片上花费较长时间,这是由于刚好在运行之前发生的一些编译,且效应是过程在大芯片上运行相同数目的画面比在较小芯片上或亚晶格上要慢,这就是为何图28中所示出的耦合曲线是稍许有噪声的。在图28中,已经为了改进可见度而忽视单位单元之间的耦合,但观察到图28中来自最新芯片的耦合,其中已经使用本公开的系统和方法在几个画面中绘制出所有耦合。
[0106]
相对于图31的阶段29,在一些实施例中,对回路所需的门、量子四元和其它资源进行计数。在一些实施例中,基于量子处理器规范估计壁钟时间。
[0107]
hydrogen(图3的要素212)。
[0108]
从硬件级移动,注意力转向图31的阶段20-27和29中使用的低级编程。参看图8,本公开提供利用标称地称为hydrogen的低级编程语言的门级模块。hydrogen是门级语言,其中指定待执行的量子操作和任选地这些量子操作待被执行的硬件地址。动态地指派量子
位,指定例如rz门等参数,且接着将此编译为适合硬件的代码。如果尚未指定量子操作的特定硬件地址则更改量子位指派以尝试找到最佳指派,例如使必须在计算内完成的调换的数目最小化。
[0109]
参看提供实例hydrogen代码的图9的右侧面板,使hydrogen编程语言结构化。也就是说,所述语言由结构化文本文件限定。格式为command_name(param1、

、paramn)[addr1、

、addrm],其中
“‑
》”指示命令传回值。量子位依据门限定。举例来说,在一些实施例中,在单独的文本文件中限定每一门,可通过针对所述门添加kraus算子来编辑文本文件以添加新操作。
[0110]
举例来说,参考图9,在限定图9的右侧的行7处使用的cnot(a,b)门的情况下,在提供门名称“cnot”、子集系统上的维度数和适当的kraus算子的数据结构中在图9的中间面板中指定cnot门。此处,“dim_in:2 2”意味着第一子系统具有维度二,且第二子系统具有维度二。为了限定cnot门如何与例如量子位交互,指定用于cnot操作的适当的kraus算子:[1 0 0 0;0 1 0 0;0 0 0 1;0 0 1 0]。
[0111]
作为另一实例,图9的右侧部分上代码的行10需要h[a]。在一些实施例中,h[a]在单独的数据结构中限定为:
[0112]
h{
[0113]
dim_in:2
[0114]
dim_out:2
[0115]
kraus:[0.7071067811865475 0.7071067811865475;0.7071067811865475
ꢀ‑
0.7071067811865475]
[0116]
}
[0117]
也就是说,数据结构的名称给定为“h”,指定维度(“dim_in:2”;“dim_out2”),且限定用于h[a]的kraus算子。
[0118]
转向图9的右侧上代码的行11处的“measure”实例,编译程序12支持一般正算子值测量(povm)。因此,可指定与传统输出对应的任何kraus算子集合。在图9的右侧部分的行11处的测量实例中,门名称(“measure”)、维度数(“dim_in:22”;“dim_out:2 2”)和用于测量门的kraus算子(“kraus:[1 0]-》0”;“kraus[0 1]-》1”)在图9的中间面板中示出的单独的数据结构中指定。
[0119]
此外,参看图9的右手侧上代码的行14,编译程序12支持参数化门,其中kraus算子由函数句柄给定。此在传递参数的某一值时产生kraus算子,且允许编译程序12实施任意参数化门。因此,代码rz(0.3927)[b]将参数值0.3927传递到图9的中间面板中限定的rz门。在一些实施例中,编译程序12调用这些函数句柄以在运行中针对无论什么已经由门指定的参数生成kraus算子。
[0120]
图32a、32b和32c示出门集合的实例的定义。图32a、32b和32c中所指定的门中的任一个可由hydrogen代码调用以便实施所要门作为量子算法的一部分。此外,图32示出新门可如何容易地限定且使用一般格式添加:
[0121]
instruction{
[0122]
dim_in:subsysdim1 subsysdim2...subsysdimm
[0123]
dim_out:subsysdim1 subsysdim2...subsysdimm
[0124]
kraus:krausl(-》output1)
[0125]
...
[0126]
kraus:krausn(-》outputn)
[0127]
}
[0128]
参看图10,使用函数句柄的一个优点将是,较容易地允许在与不同量子装置相关联的量子硬件指令集之间改变。这由图31的要素25表示。这是有用的,因为天然门集合在量子装置之间变化。举例来说,具有其molmer sorensen门的离子阱不同于超导量子位中的kraus参考门,kraus参考门不同于光学系统中的knill-laflamme-milburn(klm)门。为了说明,可针对将由量子程序使用的每一量子系统的每一指令集限定(例如,如图9的面板902中所示出)不同语言文件。
[0129]
举例来说,图9的面板902示出nielsen和chuang,量子计算和量子信息(2010,剑桥大学出版社,纽约)中所见的标准门集合的子集,该文献特此以引用的方式并入本文中。这些门在本公开的一个实施例中限定,因为在很大程度上它们工作起来较直观。接着,超出标准门,可使用hydrogen来限定与特定目标量子装置相关联的额外门。接着,使用上文的校准章节中论述的校准技术针对量子装置上可用的每一操作填充kraus算子。因此,代替于具有与物理级处的理想操作相关联的kraus算子,本公开的系统和方法的一些实施例使用上文所论述的校准技术查明目标量子装置内实际上正发生什么。在一些例子中,这导致参考所要的理想门(例如cnot)的一个指令集,而另一指令集参考考虑特定量子系统的表征的理想门的实际对应物。因此,当量子代码需要目标量子处理器上的cnot指令时,实施于目标量子处理器上的实际量子门可具有鉴于目标量子过程的表征与理想cnot门不同的参数。具有这些不同指令集(例如,能够指定不同指令集)的一个优点是,允许探索不同类型的量子处理器,而不仅仅是量子位。此外,此方法支持开发新颖的门或硬件特定的门。此外,此方法允许使用门合成转换指令集(例如,从一种类型的量子装置到另一类型的量子装置)。
[0130]
因此,在hydrogen的情况下,存在用户想要执行的理想门,且对于每一相应理想门,存在当调用理想门时特定量子处理器将实际执行的相应门。hydrogen将理想门的序列转换为特定针对特定量子处理器的相应门序列,以得到与实现理想门的序列相同的结果或尽可能高保真度的结果。因此,hydrogen能够支持不同门且仅在结构化文本文件中限定这些不同门,因此使得有可能与不同指令集一起工作且在二者之间转换。
[0131]
下文提供根据图31的阶段25调换门集合的实例。考虑以helium代码编写的实例程序:
[0132]
#这是备注
[0133]
qubit-》1
[0134]
qubit-》2
[0135]
h[1]
[0136]
cnot[1,2]
[0137]
rz(0.3)[1]
[0138]
measure[1]-》1
[0139]
measure[2]-》2
[0140]
如此,此代码充当编译程序12的hydrogen级编译的图10的指令1002。
[0141]
图34示出门合成,其中目标量子系统为连续变量量子系统。因此,图34的要素1004的代码对应于图10的要素1004,且基于上文提供的指令1002提供定义1004的输入门集合。图34的要素1006的代码对应于图10的要素1006,且提供用于目标连续变量量子系统的定义1006的输出门集合。
[0142]
图34的要素1008的代码对应于图10的要素1008,且基于上文的既定指令1002和图34的输出门集合定义1006提供用于目标连续变量量子系统的合成指令1008。
[0143]
图35示出门合成,其中目标量子系统为离散变量量子系统。因此,图35的要素1004的代码对应于图10的要素1004,且基于上文提供的指令1002提供定义1004的输入门集合。图35的定义1004的输入门集合与图34相同,因为定义1004的输入门集合尚未考虑目标量子系统可有效地处置或在本地支持的门。图35的要素1006的代码对应于图10的要素1006,且提供用于目标离散变量量子系统的定义1006的输出门集合。目标离散变量量子系统的图35的定义1006的输出门集合相对于特定门或门参数相对于图34的定义1006的输出门集合不同,因为定义1006的输出门集合考虑目标量子系统在本地支持或有效地处置的门或门的表征。图35的要素1008的代码对应于图10的要素1008,且基于上文的既定指令1002和图35的输出门集合定义1006提供用于目标离散变量量子系统的合成指令1008。类似于输出门集合定义1006,图35的合成指令1008不同于图34,尽管两者实施相同的既定指令1002。图34和35示出门级模块110在目标量子系统改变时在门集合之间转换的能力。
[0144]
在门合成(图31的阶段25)中,编译程序12可个别操作的描述在一个指令集和另一指令集之间自动转换。此可用于解决目标量子系统的系统性误差。举例来说,考虑使用理想(教科书)操作表达的回路c。例如:
[0145]
qubit-》1
[0146]
qubit-》2
[0147]
h[1]
[0148]
cnot[1,2]
[0149]
如果在理想量子硬件上运行,则此代码应生成最大限度纠缠状态。但量子硬件是非理想的。如此,如果指示量子硬件遵循准确的输入回路,则归因于每一操作中的小误差,其将不精确地产生正确状态。可做的是表征目标量子硬件以在被发送特定命令时获得施加到量子系统的量子通道的描述。举例来说,如果目标量子系统被发送命令h[1],则结果可能是目标量子系统实际应用某一其它操作h'。因为此操作在量子位之间不同(而理想门不是),所以所应用的真实操作在既定操作为第一量子位上的hadamard(h)时被称为h1,且当既定操作为目标量子系统的第二量子位上的hadamard时被称为h2。类似地,假设cnot12被称为当cnot命令在量子位1和2之间发送到目标量子系统时应用的真实(不完美)操作,且假设rz1(θ)和rz2(θ)为当指示目标量子系统经由角度θ分别在量子位1和2上实施z旋转时应用的真实(不完美)操作。目标是使用操作序列rz1、rz2、h1、h2和cnot12来尽可能接近地近似c。这一般来说是可解决的优化问题。
[0150]
参看图31的阶段24,在一些实施例中,处理程序表示以遵循量子处理器的定位约束,任选地考虑2-子系统(例如,2-量子位)门的质量。在一些例子中,根据图31的回路嵌入程序24,当围绕目标量子芯片路由量子位时,可考虑2-量子位门的质量使得不良耦合最小化。
[0151]
可对图31的阶段24、25和26重新排序。相对于图31的阶段25,在一些实施例中,使用门合成技术,存在低级语言/内部表示中使用的指令集和由硬件使用的指令集之间的转换。参看图31的阶段26,在一些实施例中,扫描代码以获得减小回路片段内的指令计数(或改进另一用户指定的度量)的机会。
[0152]
helium(图3的要素210)。
[0153]
参看图13以及图31的阶段14-19,编译程序12中的向上下一级利用在本文中标称地被称作helium的编程语言。helium由编译程序12的低级模块106支持。helium充当一种形式的量子basic。低级模块106解析helium源文件(第二代码)以创建解析树和提取抽象语法树。
[0154]
如图13的实例helium代码所示,helium可用于使用一般形式量子位-》变量创建新量子位或量子四元,或者具有固定数目的量子位或量子四元的寄存器。图13的实例helium代码的行1-3提供此情况的实例。
[0155]
如图13的实例helium代码所示,helium具有与门级语言相同的指令但其以条件句扩增。举例来说,参看图13的实例helium代码的行5-7,helium支持“if”环路。“if”环路可使用“if”语句对量子位实行控制。其还可使用式样上类似的语法对传统变量设置条件。对于传统控制,控制硬件必须支持此功能性或允许自定义控制代码。由helium支持的“if”环路的另一实例为:
[0156]
if[a]
[0157]
cnot[b,c]
[0158]
end
[0159]
如图13的helium代码的行9-11所示,helium支持重复,其中重复动作直至实现预定条件(例如,传统测量结果)。因此,图13的代码的行9-11是测量结果上监视的重复环路,其中,实际上,while环路继续执行直至通过获得满足特定测量结果而限定的条件。此不可编译到回路且将产生需要在控制量子计算的传统硬件上实施控制流逻辑(例如,fpga定序脉冲和处理读出)的程序。测量结果上监视的repeat until环路具有一般形式:
[0160]
repeat
[0161]
operation
[0162]
until[measurement outcome]
[0163]
此形式的repeat环路的另一实例为:
[0164]
repeat
[0165]
h[b]
[0166]
rz(u)[c]
[0167]
h[c]
[0168]
until[a]
[0169]
如图13的实例helium代码的行13-18所示,helium还支持子例程。子例程可单独地限定为自含代码块,且接着在主程序中调用。子例程定义的一般形式为:
[0170]
sub subname
[0171]
operation 1
[0172]
operation 2
[0173]
endsub
[0174]
如图13的实例helium代码的行10所示,为了在主程序中调用子例程,使用语法gosub subname。图13的代码的行9-11重复地调用由实例helium代码的行13-18限定的子例程直至实现测量结果[a]。
[0175]
helium还支持一种形式的简单环路,本文中被称为“increment环路”,这是基于变量从“一”递增到某一特定整数值,如图13中的代码“increment k到8”所示,其中存在k到8的整数递增。在第一穿过代码的行14处开始的环路时,k具有值一。下一次穿过环路k具有值二、接着三、接着四,直至八。此命令在传统变量的值之上递增,针对每次环路通行执行取决于此变量的门。此环路的一般形式具有如下语法:
[0176]
increment k to loopsize
[0177]
gate1(k)[target qubit]
[0178]
gate2(parameter)[k]
[0179]
...
[0180]
next
[0181]
helium中increment环路的另一实例为:
[0182]
increment k to 12
[0183]
h[k]
[0184]
cnot[k,6]
[0185]
t[k]
[0186]
rz(k)[k]
[0187]
next
[0188]
helium还支持读出。举例来说,可经由具有如下一般形式的命令执行一次测量单个量子系统/量子位:
[0189]
measure[qubit name]-》variable
[0190]
此情况的实例为measure[a]-》v。
[0191]
图33a示出另一实例helium程序,其中限定量子位a、b及c且接着调用执行一系列门的increment环路。最后,测量量子位a。图33b示出另一实例helium程序,其中限定量子位a、b及c。接着将变量u设定为9。接着以门h[k]执行increment环路。接着,测量量子位a,且此测量的结果放置于变量v中。接下来,执行子例程测试,且接着执行子例程测试2。这些子例程中的每一个执行指定门。图33a和33b中的实例程序示出支持使用#符号的注释。注释不由编译程序解析。helium的独特之处在于,其完全聚焦于量子处理器和其受控硬件。其不聚焦于数字计算机。helium不像ibm qiskit,在ibm qiskit中环路以python运行以构造回路。事实上,helium聚焦于量子处理器上应发生什么。环路不在量子处理器上运行,它们在量子处理器上运行之前展开。以此方式使其结构化的原因是,因为其允许环路内的优化。举例来说,如果存在将要被调用很多次的环路,则允许调用优化子例程以在具有环路的当前程序上运行来尝试优化环路内正在发生什么,使得环路不必在其展开时进行很多次。举例来说,为了了解环路内的特定动作是否可仅进行一次而非每次进行,递增地进入环路。此产生优点。举例来说,如果量子程序具有大量门且优化识别环路内仅需要在首次穿过环路时执行的特定动作,则整个环路不需要展开以产生大规模回路。因此,支持helium代码的编译程序
的低级模块在展开之前看起来刚好在条件句块内、刚好在repeat环路内,且在这些increment环路内并在其内优化,以便降低展开的回路的复杂性。这是优化条件句内的代码以形成经优化条件句的实例,在将经优化条件句展开为一系列量子门之前,由经优化条件句指定的代码序列的迭代是否具有比由条件句指定的代码序列的迭代少的指令。
[0192]
repeat until指令不由当前可公开访问的系统支持。原理上,helium的此特征允许具有不定的运行时间的量子程序。举例来说,其不一定在设定数目的门(例如,27个门)之后终止,其可取决于测量结果运行较长时间。
[0193]
图14提供支持helium源代码的低级模块内的作用中的一些优化子例程的实例。图14针对总共53个门实施量子傅里叶变换(qft)1402、递增程序1404,且接着实施反向qft 1406。当这以helium编码且由本公开的编译程序的低级模块编译时,作为低级模块的回路优化子例程1408的结果,53个量子门减少到仅三个量子门1410。
[0194]
参看图29,helium和其相关联低级模块支持的另一事项是子例程的定义。举例来说,其可用于限定测量子例程。对于例如单个量子位实验或两个量子位实验,常常是这样的情况:许多目标量子芯片上存在许多额外量子位,不论这些是超导芯片、离子阱还是其它。当情况如此时,可通过针对测量子例程利用这些额外未使用的量子位使测量子例程更精确。举例来说,其可在进行测量时用作辅助。如此,代替于测量单个目标量子位,从具有cnots的量子位扇出到一些辅助量子位上,且接着连同单个目标量子位一起测量那些辅助量子位。可接着应用误差校正来了解其是否都给出相同结果,或者可使用误差校正来采取多数票。图29顶部面板比较在早期regetti芯片、aspen-4中的一个上使用零个辅助(未编码)、1个辅助和2个辅助的性能。所使用的特定量子位具有未编码误差率9%,其为适当高的测量误差。cnot也具有高误差,但所发生的一些误差是控制量子位上的去相误差的形式,例如不影响测量结果,因为所述去相最终与量子位的测量交换。如此,最终其能够扇出若干次。如此,在regetti装置上,形成一个伪副本,且比较结果。如果获得零-零或一-一,则这与量子位实际所处的状态进行比较。以此方式,可以看到,如果使用一个辅助,则实现针对后选择从平均9%到平均3%的改进,且如果使用两个辅助,则实现对于后选择达2%的改进。如此,由helium支持的此形式的测量子例程是有用的。据此,每次运行实验,可作出较稳健的测量,而不必每次考虑如何实施扇出。事实上,测量子例程应对这些细节。
[0195]
类似地,参看图29的下部部分,以ibm qx4尝试相同操作。尝试此操作的特定某一天的特定量子位具有未编码误差率19%。使用两个辅助,且使用多数票误差校正,如此不存在结果的丢弃,且不存在后选择,性能从19%改进到12%。使用四个辅助将性能改进到10%。这表明,存在收益递减,因为最终如果未执行足够的cnot,则误差率最终被促进而非抑制。然而,与图29一致,从这些量子系统中的大多数量子系统展现至少两倍的性能增益,且在一些情况下更多。
[0196]
参看图31的阶段18,此时,以helium编写的程序连同传统控制流(通常不可表达为量子回路)一起转换成量子回路片段的集合(可以hydrogen表达),其规定当基于计算期间获得的测量结果在硬件上运行时这些回路片段如何拼凑在一起。此表示可用于一般量子计算,但存在此将简单地等于单个量子回路的许多情形。编译程序的最终输出是有限状态机以控管确定其发送到硬件的信号的控制系统的行为。然而,存在许多情况:传统控制逻辑被避免且仅在合适的指令集中输出量子回路或脉冲序列(但最一般形式的计算需要完全有限
状态机)。参看图31的阶段19,此时,可任选地扫描代码以获得减小回路片段内的指令计数(或改进另一用户指定的度量)的机会。参看图31的阶段28,低级模块108的输出可在模拟器而非量子处理器上运行。
[0197]
beryllium(图3的要素208)。
[0198]
参看图15和图31的阶段8-13,注意力现转向高级模块102和编译程序12的此组件支持的beryllium语言。高级模块102解析beryllium源文件(第一代码)以创建解析树和提取抽象语法树。beryllium能够访问门级命令,但其还支持功能和struct的定义并且还允许不可展开的可分环路。可分环路的实例为“for”环路,其中,如果满足某一条件,则存在分裂。在此实例中,编译程序不可提前分辨在调用分裂之前需要运行环路多少次。此情况的示例使用案例是,期望相干地分裂环路,意味着穿越环路某一次数,退出所述环路,进入另一环路某一次数,从所述环路出来,且接着最后执行测量。在此实例中,总运行时间是已知的,但每一环路被穿越多少次是未知的。存在穿过每一环路的不同可能次数的叠加,只要总运行时间是固定的即可。
[0199]
beryllium支持指针。图16提供此情况在其中有用的一个实例。参看图16,代替于将特定参数传递到门,举例来说可传递例如角度、地址范围或地址的集合等传统参数。由此,代码将观察存储于所述地址范围中的值且基于所述值实施门。举例来说,如果参数为角度,则角度可作为地址范围传递到门。从地址范围读取角度,且以由地址范围指定的旋转实施门。如此,图16示出beryllium代码行,其中量子位a和b指定待在量子位c上执行的角a z旋转(rz门)。这需要设置和实施大量门。这做起来很难。此操作是hhl算法(harrow等,2009,“用于对等式的线性系统求解的量子算法”,物理评论通讯,15,150502)中的关键组成部分,且实施起来极其艰难,因为门序列难以设置。利用beryllium,这可在运行中针对任何门完成。举例来说,给定指定用于特定单位门的kraus算子的matlab函数,以及参数应采用的范围,以及待读取(作为地址的集合)的量子位的数目,高级模块102可自动生成实施所述受控旋转的回路。
[0200]
参看图30,具有高级编程语言beryllium的另一原因是开始量子数据结构的实施。换句话说,实施数据类型使得可使用量子状态来存储数据类型或量子算法来操纵数据类型,且尝试获得比可传统地执行更好的折衷。虽然量子团体对算法有很多关注,但对量子数据结构和实施量子数据类型并没有很多关注。但事实是,利用量子力学的不同数据类型在许多情况下可胜过此些数据类型的相当的传统(数字)实施方案。因此,beryllium允许选择数据如何结构化的更多自由度。因此,代替于更复杂的算法,可改为限定特定量子数据结构,其中将简单地应用量子数据结构的特定操纵的指令附加到量子数据结构。作为另一实例,可限定始终将结果存储到特定量子计算所关注的所有可能输出的量子数据结构,从而简化输出。
[0201]
然而,存在二分法,其中两个不同事项必定无法快速进行。为了说明,图30例示其中实施最简单的可能数据结构来存储曲线的情形。最简单的数据结构是将向量存储为状态向量的数据结构,其为hhl类型算法的基础。在hhl算法中,必须由量子计算机操纵实值向量。也就是说,其必须加载到计算寄存器中,在该处,将在量子状态的振幅中编码向量的要素。随着量子状态正规化,这些振幅将是依据向量的范数缩放的向量的要素。见dervovic等,arxiv:1802.08227v1[quant-ph],2018年2月22日,其特此以引用的方式并入本文中。
[0202]
更复杂的量子数据结构是将曲线存储为曲线集合的量子数据结构。此数据类型允许直接执行局部边缘补充,如图30的左上角所示出,其中,对于特定顶点a,如果相邻者之间不存在边缘则绘制边缘,且如果存在边缘,则将其删除。使用此数据结构,可围绕o(1)中的个别顶点进行此操作。将曲线存储为曲线集合还允许执行集合内边缘补充。如果挑选顶点的子集,则其间所有边缘可在线性时间补充。相比之下,在大多数常见的传统曲线表示中,这将需要二次时间。然而,可构造允许此在o(1)中进行的量子数据结构。
[0203]
还可进行集合间边缘补充。给定曲线中的两个不同集合,其间的所有边缘可在线性时间使用量子数据结构补充。还可进行曲线比较,其中在线性时间使用量子数据结构将两个曲线与恒定成功概率进行比较,而与曲线大小无关。o(1)中的顶点比较也可使用量子数据结构进行。
[0204]
还可进行自同构测试,其中测试某一特定操作以查看其是否为曲线上的自同构。此可以恒定成功概率在其用来实施自同构的时间内执行。如果存在这些的2n个副本,则其可传统地读出以输出曲线。其仅取o(n)量子位来存储,其中n是顶点的数目。如此,比所需花费较少量子位来存储邻接矩阵,邻接矩阵是获得恢复所需的线性数目的副本。对于特定对的操作(例如,o(1)中的顶点比较和o(1)中的局部边缘补充),没有传统数据结构可与此性能匹配。虽然存在允许这些中的任一个在o(1)中发生的传统数据结构,但不存在允许在o(1)中执行二者的传统数据结构,且实际上平均值将为线性的,无论如何,如果将顶点比较的复杂性与局部边缘补充的复杂性进行平均,传统上可以做的最佳操作是o(n)。如此,这为为何beryllium支持struct和种类提供动机,使得使用利用量子力学而非传统的各种不同种类的量子数据类型。这直接产生本公开的高级语言carbon。
[0205]
参看图31的阶段13,此时,在编译程序工作流程中,可任选地扫描代码以获得通过在程序内作出局部改变来减小指令计数(或改进另一用户指定的度量)的机会。
[0206]
carbon(图3的要素202到206)。
[0207]
参看图17以及图31的阶段1-7,注意力现转向统一级模块14和编译程序12的此组件支持的carbon语言。在一些实施例中,统一级模块14解析carbon源文件以创建解析树和提取抽象语法树。在一些实施例中,carbon提供matlab和octave功能性的子集。设置在图17的左侧面板上的是示例carbon代码。carbon允许用户编写传统代码以对呈以carbon语言编写的脚本的形式的量子问题求解。在一些实施例中,编译程序12将carbon代码编译为高级量子语言(beryllium),接着编译为较低级(helium、hydrogen或门序列)。在一些实施例中,编译程序12直接编译到低级(helium、hydrogen或门序列)。由图31的阶段12示出的编译程序12的组件处置此转换。
[0208]
编译程序12的目标是采取此传统代码,且最终使用编译程序14的统一级模块14、高级模块102、低级模块和门级模块110将传统代码转化为量子门的集合,所述量子门的集合实现量子任务但具有比原本由常规量子计算过程指定的操作少的操作。
[0209]
图18示出经采取以产生以较少操作实现任务的量子门的此集合的方法。有两个事项会减慢量子代码:显式复杂性和隐式复杂性。编译程序14提供一组工具来解决这两个形式的复杂性以便产生以较少操作实现任务的量子门集合。
[0210]
显式复杂性指代由编程者硬译码为所述代码的必定较慢的步骤。此情况的实例是指定环路将被重复一百万次。在此情形下,环路将要重复一百万次,因为编程者已经告知计
算机执行环路一百万次。显式复杂性的是其中调用函数内的函数内的函数的递归算法的情形。此递归将要穿过无论多少递归层级直至递归结束。在这两个实例中,编程者已经从相对小量的代码创建大量指令。
[0211]
生成复杂性的另一事项是操作的隐式成本,例如将矩阵相乘在一起的操作。虽然可用比如matlab或carbon等程序编写单个代码行以将矩阵相乘在一起,但所得矩阵乘法的复杂性随着矩阵的大小的立方而有效地缩放。此操作实施的大多数方式是立方时间,或接近立方时间,仅仅是因为较好复杂性扫描在很大程度上具有庞大的前因数。
[0212]
编译程序12采取的方法是,在可能的情况下,重构导致显式复杂性的代码使得不再具有所述显式复杂性,以将转化为隐式复杂性,且接着通过使用数据类型的较好实施方案来留意隐式复杂性。举例来说,通过使用量子算法来留意由于将显式复杂性转化为隐式复杂性而产生的一些函数。图19示出此方法的实例。图19为实例matlab代码。代码的行1-7以递归方式限定特定矩阵。因此,在行3-7中,限定矩阵的每第i-j条目。代码的行9-11限定且设定一些常数。接下来,代码的行13-19限定环路,所述环路找到由代码的行1-7限定的热图矩阵中的最热位置。最后,代码的行24-28限定另一环路,所述另一环路沿着阵列中的对角线移动直至对角线上的值超出五,此时过程控制从环路分离。
[0213]
当图19中所示出的代码由编译程序12编译时,编译程序将环路拉开以尝试简化环路。图20示出。编译程序12使复合环路分开以使其成为较简单环路。因此,代替于由图19的代码的行13-19限定的复合环路,现存在两个较简单环路,图20中的行13-15和行17-22。这是与构建用于传统计算的优化编译程序时发生的情况完全相反的情况。传统编译程序通常想要将小环路拼在一起使得存在较少分支条件,使得作出不正确分支预测的概率较低。
[0214]
转向图20,除了将复合环路重新布置成较简单环路,还进行比较和if语句的一些重新排序。接着,编译程序12将环路进行分类。如此,参看图21,第一环路(环路2102)以递归方式限定矩阵的第i-j条目。因为需要在可能时利用hhl(harrow等,2009,“用于对等式的线性系统求解的量子算法”,物理评论通讯,15,150502),所以将矩阵存储为不具有矩阵的值中的每一个的显式存储库,而是具有在给定i-j时传回第i-j要素的甲骨文数据库(oracle)。也就是说,代替于具有环路2102,提供一种函数,在给定i-j时,其提供热图的第i-j条目。这可在从未穿过“for”环路的情况下实现。可通过实现存在对此求解的闭合形式方式来找到闭合形式表达式,其计算热图的第i-j条目,而不必经过递归。
[0215]
接下来,参看图21的要素2104,再次,存在可针对第二环路找到的关系,且对其进行分析求解,因此其刚好是可分析求解的环路的类型。
[0216]
图21的环路2106可作为量子最大值搜索译码。环路寻求极限值,且此在代码中频繁出现。
[0217]
图21的环路2108为循序搜索。如此,这些都不直接是grover搜索,但可使用能力放大(其为一种量子计算形式)构造最大值搜索2106和循序搜索2108。被分析求解的环路(要素2104)由于用于矩阵的数据类型的缘故而变得运行起来快得多,花费对数时间,而非因为环路2104传统上运行两倍时间所以将花费9998平方。因此,如由编译程序12实施,以9998的对数执行解。如由编译程序12实施的两个搜索2106和2108提供二次加速。最终结果为,编译程序12产生量子算法和量子回路,所述量子回路具有比算法级处的操作少实际上300,000倍的操作(例如,假定量子系统无噪声,且不考虑完全容忍额外开销)。此表明,能够从传统
代码到达量子算法的编译程序12以较少操作解决计算问题。在其中因为存在令人满意或较好的解所以量子算法不加速代码的例项中,编译程序12编译到传统处理器而非量子过程。举例来说,如果源代码为计算优先级,则已经存在真正好的传统算法来计算优先级,且当前量子算法不是更好的算法。这是以下实例:量子算法或量子数据结构将不能够加速程序,且因此优先级计算被降级为传统处理器目标。
[0218]
由图19的代码的行13-19限定的复合环路的处理是编译程序12的阶段5的实例,环路处理。环路被重构、简化、分类和替换。处理环路以识别独立的指令且分离成较简单环路的集合。这些较简单环路接着基于其效应分类:其是否仅在满足特定条件时具有效应、其是否为递归定义等。接着环路被更高效地实现相同结果的不同程序代替。存在多种多样的此环路种类。一些环路种类(最大值搜索、递归阵列/矩阵定义、循序搜索)被量子程序替换,而其它使用纯传统处理加速。
[0219]
图19的代码的处理还突出显示了编译程序12的阶段6的功能,递归处理。递归函数被重构、简化、分类和替换。类似的处理应用于递归函数和函数调用,将其重构为较简单函数调用的序列,且接着对每一个进行分类且用实现相同最终结果(在可能的情况下)的更高效程序对其进行替换。
[0220]
图19的代码的处理还突出显示了编译程序12的阶段7的功能,量子数据结构和低级算法。在可能时,使用量子处理实施数据类型。使用用于处理的量子状态和量子算法实施例如向量、阵列、矩阵、曲线、队列等数据类型,从而给出比传统上可能的更好的操作的性能折衷。
[0221]
编译程序12的阶段5到7按任何次序操作以构造量子算法。环路处理(阶段5)、递归处理(阶段6)和数据结构(阶段7)中的任何一个或多个用于构造此些量子算法,且以任何次序使用这些基本技术(环路处理、递归处理和数据结构)以产生此些量子算法。如本文中所使用,量子算法是指定待在目标量子处理器上执行的一个或多个门序列的任何算法。
[0222]
虽然本公开的编译程序12利用carbon作为顶级语言,但本公开不限于此。编译程序12分析环路、递归和数据类型,如上文所描述。相应地,在一些实施例中,使用编译程序12将以利用环路、递归或数据类型的任何传统编程语言(例如,c、c++、python、ruby)编写的代码编译为可使用量子模拟程序模拟且可直接在目标量子处理器上运行的代码。
[0223]
返回参看图19,如果已经更高效地编写传统代码,则非常有可能由图19的代码解决的问题可以传统上以更高效的方式处理。然而,比较的点是真实代码与真实代码。给定呈carbon的输入代码,编译程序12确定其是否可转换为量子代码,与同一代码在传统计算机上编译和运行相比,量子代码花费显著少的时间来运行。
[0224]
存在其中量子代码不提供剧烈加速的情形。且完全容忍,来自完全容忍的额外开销可能终止算法级加速。此外,是否存在量子加速取决于将最终运行代码的量子目标处理器的性质。举例来说,存在最近邻量子架构不能够与完全连接的量子架构执行得一样快的一些操作。此外,应该完全连接的量子架构存在局限性,例如离子阱。在某一点处,仅仅是因为超出特定大小的连接图不一定需要更简单。确切地说,例如光学量子系统等量子系统。在此些量子系统中,每个量子位只要将能够与恒定数目的其它量子位交互,但用于此些系统中的量子操作的量子位可处于系统的任何物理地址处。如此,可针对此些系统导出更好地适于长程通信的交互曲线,同时在例如每一量子位的相邻者的数目方面仍具有恒定水平。
[0225]
不同量子处理器在处理量子ram(qram)时具有不同性能。在dervovic等,arxiv:1802.08227v1[quant-ph](2018年2月22日)中描述qram,该文献特此以引用的方式并入本文中。当执行针对矩阵数据结构(例如,或更紧张的数据结构)的hhl型操作时后台正发生的事项之一是qram的使用。然而,一些量子处理器不具有qram。在此类实例中,为了执行通常需要在不在本地支持qram的量子处理器上运行qram的量子算法,编译程序12确定如果从量子装置上可用的指令合成qram则是否仍实现超过传统计算的性能增益。举例来说,为了在不在本地支持qram的量子处理器上合成qram,可从量子装置内的门构建地址寄存器和返回寄存器,如此,量子位的集合可被指派成为指向存储器中的地址的指针寄存器,且另一量子位集合成为其返回寄存器,且接着可由一系列fredkin门(fredkin和toffoli,1982,“保守逻辑”,国际理论物理学期刊,21(3-4),第219-253页,其特此以引用的方式并入本文中)或将执行qram的功能的类似物构造序列。但来自此复合门集合的噪声有可能使其性能比数字等效物差。并且,此过程是线性链,且因此引发线性额外开销。另一方面,如果代码调用不是线性链的操作(比如,正方形晶格),则实际上,在一些实施例中编译程序12加速量子实施方案超过传统实施方案。加速可能不一定是以hhl型算法实现的指数加速。在一些实施例中,归因于额外开销,由编译程序12对量子实施方案相对于传统实施方案的加速为平方根加速。举例来说,在一些实施例中,由编译程序12对量子实施方案相对于传统实施方案的加速对于qram型询问为平方根加速,而非为o(n)或为对数时间。虽然平方根不如加速那么多,但平方根事件仍小于原本在传统系统上一些操作所需的线速度。此外,在三维阵列的情况下,由编译程序12进行的量子实施方案在一些实施例中为立方根事件或相当的,这取决于量子装置相依的量子位之间的连接性。
[0226]
将存在编译程序12不可加速的一些传统算法。在一些此类实施例中,编译程序12将采取编写的代码且将可在传统机器上有效地进行的算法或指令发送到传统处理器,且接着所述算法或指令可通过在量子数据结构或量子算法中编码而加速到量子处理器。
[0227]
在一些实施例中,编译程序12在可能的情况下逐函数编译,以构建彼此相依的要素的树,且在所述树内确定我们应在什么量子处理器上放置达到什么级。如果若干不同量子处理器可用于编译程序12,则编译程序确定如何在量子处理器之间拆分任务,要素树的哪些碎片最佳适合于哪一量子处理器,以及要素树的哪些碎片不以机械方式量子加速且仅应传统地执行,乃至在那些之中,相比于在数字中央处理单元上执行,哪些应被推送离开到图形处理单元。此外,还考虑并行度。举例来说,如果要素树中的要素可并行化且存在待使用的10个传统目标处理器,则使用多个目标处理器。
[0228]
编译程序12提供用于编译程序的级中的每一个处置不同使用情况的不同语言。提供门级语言hydrogen,因为需要门级语言。代替于使用例如quill、cqasm或qsharp等公开可用的门级语言,编译程序12具有其自身的门级语言,使得对其扩展具有完全控制,且因为在使用惯例较低级语言时在编译期间实现非常不一致的结果。helium和hydrogen是量子计算团体最多使用的。举例来说,为了执行量子实验,其中开发回路,且需要尝试不同回路和量子处理器且在编程者指定门的低层级处实验。向上下一级,低级模块(helium)提供允许良好优化的令人感兴趣的使用案例。helium允许编程者限定子例程和相关结构。因此,对于此种类的低级编程来说,helium是比hydrogen更强大的语言。在装置上进行表征类型实验,以先进门级尝试简单的量子算法、变数算法等,是有用的。helium,类似于hydrogen,是量子研
究人员将利用的语言。因此,编译程序12的门级到硬件级特征更多地旨在特定硬件表征和相关主题。如此,hydrogen到硬件级且使用由本公开的系统和方法提供的表征子例程特别适合于硬件公司。
[0229]
较高级语言beryllium特别适于致力于量子算法或量子数据结构的量子算法研究人员。使用beryllium,此些工作人员能够实施量子算法,查看它们如何执行,且确定它们所需的资源。此外,此些工作人员可使用beryllium在模拟中运行量子算法。这特别有利。举例来说,从公开的量子算法(例如,文献引用中)到比如quill或cqasm等语言的量子算法的实际实施很困难。一个实例为hhl。任何基于hhl的内容在常规门级语言中难以实施,因为需要实施复杂的算术,且需要完成基于存储于一些量子位中的值的受控旋转,需要完成圆型询问。beryllium用若干代码行替换此复数运算的全部,因为语言提供例如指针等支持以自动留意此繁重的实施方案。存在公开的量子计算论文中的操作,这些论文掩饰了细节且陈述此些操作可在某种线性时间内完成,但实际上尝试查明如何实施非常麻烦。为了解决此问题,beryllium聚焦于提供工具来限定非零量子数据结构。这非常有利,因为对量子算法存在大量关注,但对非零量子数据结构的关注极少。但存在许多传统数据结构,且它们是传统算法的庞大部分。beryllium将通过使其在目标量子处理器上设置的繁重程度大大降低来允许用户更多地探索量子数据结构。
[0230]
beryllium允许用户实际上依据种类限定新数据结构、新数据类型,使得它们可在较高级(carbon)处在源代码中调用。如此,举例来说,如果用户想要添加图形数据类型而非仅标准matlab,则创建以较低级语言编写的新类型的对象,因为利用量子性能增益相对于传统的某一优点,需要以某种量子方式实施图形数据类型。如此,如果需要某种新技术来执行这一过程,则需要较低级以访问量子定义来向上扩展语言。如此,beryllium旨在能够编写可使用传统构造编程的库。beryllium更多地聚焦于量子算法级,而carbon聚焦于非量子级。carbon和beryllium对于可能想要评估量子计算的将来规划的不是量子计算专家的人、不在该领域工作的人是有用的。
[0231]
beryllium的关键点是构建软件工具使得量子计算机可较容易地有用地进行编程,以允许更广的受众执行有用的量子计算编程。由于beryllium和(一般来说)编译程序12的语言提供的支持,用户将能够构建更复杂的软件。也就是说,beryllium和carbon的关键点是,通过完全抽象出量子计算方面的量子力学来使量子计算更容易访问。因此,常规软件工程师可编写实际上有用的量子代码。
[0232]
结论和所引用的参考
[0233]
本文中所引用的全部参考文献以全文引用的方式并入本文中并且出于所有目的,其程度如同每一个别公开案或专利或专利申请具体地或个别地被指示出于所有目的以全文引用的方式并入本文中。
[0234]
本发明可以实施为包括嵌入在非暂时性计算机可读存储介质中的计算机程序机制的计算机程序产品。举例来说,计算机程序产品可含有图1或2的任何组合中所示或图3中所描述的程序模块。这些程序模块可以存储在cd-rom、dvd、磁盘存储产品、usb密钥或任何其它非暂时性计算机可读数据或程序存储产品上。
[0235]
出于阐释的目的,已参考具体实施方案描述了前述描述。然而,以上说明性论述并不意图为详尽的或将本发明限于所公开的精确形式。鉴于以上教示,许多修改和变化都是
可能的。挑选和描述本文中所描述的实施方案是为了最好地解释本发明的原理及其实际应用,由此使得所属领域的其他技术人员能够以适合于所预期的特定用途的各种修改来最佳地利用本发明和各种实施方案。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1