没有合适的资源?快使用搜索试试~ 我知道了~
硬件和语言独立的量子经典计算软件架构
*SoftwareX 7(2018)245原始软件出版物一种与语言和硬件无关的量子经典计算方法A.J. McCaskeya,b,*,E.F. Dumitrescua,c,D. Liakha,d,M. Chene,f,W. Fengf,T.S.谦卑的a,c,ga量子计算研究所,橡树岭国家实验室,橡树岭,TN 37831,美国b计算机科学与数学部,橡树岭国家实验室,橡树岭,田纳西州37831,美国计算科学与工程部,橡树岭国家实验室,橡树岭,田纳西州37831,美国d橡树岭领导计算设施,科学计算,橡树岭国家实验室,橡树岭,TN 37831,美国物理系,弗吉尼亚理工大学,Blacksburg,VA 24060,USAF 计算机科学系,弗吉尼亚理工大学,布莱克斯堡,弗吉尼亚州24060,美国g田纳西大学布雷德森跨学科研究中心,美国田纳西州诺克斯维尔,37996ar t i cl e i nf o文章历史记录:2018年4月30日收到收到修订版,2018年7月24日接受,2018年保留字:量子计算软件a b st ra ct异构高性能计算(HPC)系统提供了新颖的架构,通过明智地使用专用协处理器来加速特定的工作负载集成量子处理单元(QPU)的异构HPC系统为未来的科学计算提供了一种有前途的架构为此,我们提出了XACC(eX treme-scaleACC加速器)-一个编程模型和软件框架,可以在标准或HPC软件工作流程中实现量子加速。XACC遵循独立于底层量子计算硬件的协处理器机器模型,从而使量子程序能够通过统一的应用程序编程接口在各种QPU类型此外,XACC定义了多态低级中间表示和可扩展的编译器前端,该编译器前端实现了语言独立的量子编程,从而促进了量子编程领域的集成和互操作性在这项工作中,我们定义了软件架构,使我们的硬件和语言独立的方法,并证明其有用性在一系列的量子计算模型,通过说明性的例子,涉及编译和执行的门和退火为基础的量子程序。版权所有©2018作者.由爱思唯尔公司出版这是CC BY许可下的开放获取文章(http://creativecommons.org/licenses/by/4.0/)中找到。代码元数据当前代码版本v1.0.0用于此代码版本的代码/存储库的永久链接https://github.com/ElsevierSoftwareX/SOFTX_2018_48法律代码许可证EPL和使用git的代码版本控制系统使用C++、Python的编译要求,操作环境依赖性C++11,Boost 1.59+,OpenSSL 1.0.2,CMake链接到开发人员文档/手册https://xacc.readthedocs.io问题支持电子邮件xacc-dev@eclipse.org,mccaskeyaj@ornl.gov本手稿由UT-Battelle,LLC根据与美国能源部(DOE)签订的DE-AC 05 - 00 OR22725合同撰写。美国政府保留和出版商,通过接受出版的文章,承认美国政府保留一个非排他性的,付费的,不可撤销的,世界范围内的许可,出版或复制本手稿的出版形式,或允许他人这样做,为美国政府的目的。能源部将提供公众访问这些根据美国能源部公共获取计划,联邦政府资助的研究成果。(http://energy.gov/downloads/doe-public-access-plan)中找到。通讯作者:计算机科学与数学部,橡树岭国家实验室,橡树岭,田纳西州37831,美国。电子邮件地址:mccaskeyaj@ornl.gov(A.J. McCaskey)。https://doi.org/10.1016/j.softx.2018.07.0072352-7110/©2018作者。由爱思唯尔公司出版这是CC BY许可下的开放获取文章(http://creativecommons.org/licenses/by/4.0/)。可在ScienceDirect上获得目录列表SoftwareX期刊主页:www.elsevier.com/locate/softx246A.J. McCaskey等人/SoftwareX 7(2018)2451. 介绍高性能计算(HPC)架构在使用专用计算加速器方面继续取得进展,预计未来的HPC设计将越来越多地利用计算节点异构性[1]。量子处理单元(QPU)代表一种独特的协处理器范例,其利用量子物理学的信息理论原理用于计算目的。几个小规模的实验QPU,包括公开可用的IBM量子计算机[2],已经存在,并且它们的复杂性,容量和可靠性继续提高[3]。作为一种潜在的HPC加速器,成熟的QPU技术的出现需要仔细考虑如何将这些设备与传统计算环境进行最佳虽然早期QPU的硬件基础设施可能将其使用限制在远程访问模型和最先进的HPC系统[4],但有明确的用例,其中混合算法可以明智地利用传统和量子计算资源用于近期科学应用[5,6]。混合计算范式有望广泛地造福于在研究领域中普遍存在的科学应用,例如量子多体系统的建模和模拟[7]、应用数值数学[8]和数据分析[9]。HPC编程范例的泛化以包括新的加速器并非没有先例。将图形处理单元(GPU)集成到HPC系统中对于许多大型科学应用来说也是一个挑战,因为程序员与硬件的交互方式根本不同特定于硬件的解决方案提供了语言扩展[10],使本地方言编程成为可能。独立于硬件的解决方案定义了一种混合编程规范,用于将工作卸载到附加的经典加速器(GPU、多集成核、现场可编程门阵列等)。以屏蔽或抽象底层硬件类型的方式[11]。这些与硬件无关的方法已被证明是有用的,因为它们通过自动化那些过于复杂的编译方面,QPU的编程模型将带来额外的挑战,因为量子信息的逻辑特征和物理行为完全不同,例如无克隆原理和可逆计算。基础技术(超导、捕获离子等)和模型(门、绝热、拓扑等)将进一步区分QPU加速器从传统的计算设备。因此,有必要提供灵活的在过去的几年里,将域计算科学家与量子计算相结合的方法已经取得了进展各种量子编程语言已经被开发出来,类似数量的努力正在进行中,以实现编写、编译和执行量子代码的高级机制。现有技术的方法提供了用于量子程序表达的嵌入式领域特定语言例子包括来自Rigetti [12],Microsoft [13],Google [14]和IBM[15]等供应商的语言和工具,它们都支持汇编级量子编程以及前Python代码。单独地,这些实现提供自包含的软件栈,其可选地针对供应商语言和平台中不断增加的可变性引起了对管理多个编程环境和编译工具链的关注。目前软件栈之间缺乏集成增加了应用程序开发时间,降低了可移植性,并使基准测试分析复杂化。的方法为QPU启用交叉编译将通过更快的开发时间和可重用代码支持实验量子计算的广泛采用为了解决这些独特的挑战,我们提出了一个编程模型和可扩展的编译器框架,将量子计算设备集成到基于加速器的执行模型中。极限规模加速器(XACC)框架通过启用量子语言和硬件互操作性而被设计用于健壮的和可移植的QPU加速的应用程序编程。XACC定义了接口和抽象,可以编译由传统编程语言和量子编程XACC设计从现有的异构编程模型(如OpenCL [11])中借用了概念,提供了一个独立于硬件的接口,用于将量子子程序卸载到量子协处理器。此外,XACC通过一个低层次的量子中间表示实现了语言互操作性本文的结构如下:首先,我们提出了相关的首先,我们介绍了XACC在量子编程方面的工作,并详细介绍了XACC寻求解决的固有的独特挑战;其次,我们定义了XACC软件架构,包括平台、编程和内存模型;最后,我们详细介绍了通过使用门和退火量子计算模型进行演示来展示模型灵活性的独特演示2. 相关工作在物理硬件和模拟器上的量子程序的编程、编译和执行在过去几年中进展在这段时间里,许多研究和开发已经进入探索高级编程语言和编译器[16此外,最近嵌入式领域特定语言的开发激增,这些语言能够实现高级问题表达和自动简化为低级量子汇编语言[12,14,15]。然而,尽管取得了进展,但目前仍存在许多挑战,阻碍了量子计算在现有经典科学工作流程中的采用[20]。大多数以硬件执行为目标的方法都是通过Python框架实现的,这些框架为一个和两个量子比特量子门的表达提供了数据结构;本质上提供了一种用于低级量子组装(QASM)编程的方法。作为这些框架的一部分提供的插件工具能够将装配表示映射到特定于硬件的门集合,以及将逻辑连接映射到物理连接。复杂的编译器工作流程步骤的艰巨任务,包括有效的指令调度,路由和鲁棒的错误缓解留给用户的手动任务。这阻碍了量子计算被领域计算科学家广泛采用,他们的专业知识在量子信息之外。存在更高级的语言,但不显式地针对任何物理硬件。因此,用户可以将这些高级语言编译为代表性的量子汇编语言,但是这样的指令必须手动映射到由给定硬件门集合指定的指令集这个转换过程通常通过根据针对特定设备的Python执行框架重写汇编代码来执行。此外,高级语言在过去已经假定了量子计算的容错观点然而,这种解释与实际的近期噪声计算不一致,用户必须提供强大的编译工具,以实现各种错误缓解策略。为此,最近已经开发了针对非容错量子计算的在更高抽象级别上实现问题表达的领域特定语言[21-这些代表了使广大计算科学家能够从量子计算中受益的有希望的途径A.J. McCaskey等人/SoftwareX 7(2018)245247总的来说,目前可用的量子语言和编译器没有很好地相互集成。提供量子编程,编译和执行机制的研究和开发工作通常针对单个模拟器或物理硬件实例(即参见上面的Pythonic框架)。这导致量子代码的可移植性差,并且使尝试对各种硬件类型(超导、离子阱等)进行基准测试的任何努力都无法进行。互相攻击此外,目前有许多量子计算模型,各种研究成果都以其为目标。这些努力中的大多数都针对量子计算的门模型,而其他人则实现了量子计算。 一种嘈杂的绝热量子计算此外,还有其他研究人员越来越感兴趣的模型(单向,拓扑等)。计算范例和硬件特定门设置的差异对代码可移植性、验证和确认以及基准测试工作产生负面影响。我们的工作旨在解决与近期量子硬件执行和编程模型相关的缺点,从而通过经典协处理器计算模型的扩展我们的目标是提供一个模型框架,可扩展到各种重要的,实用的量子编程工作流程步骤。通过这种方式,我们可以提供一个真正集成的量子编译器和执行框架,它可以跨量子计算模型、语言和物理(虚拟)硬件类型工作。我们的努力旨在使量子代码的可移植性,紧密耦合的量子访问模型和经典3. XACC架构XACC框架被设计成能够以独立于加速器语言、硬件和计算模型的方式表达和集成宽谱的加速器(量子)算法以及现有的经典代码在这里,我们定义并详细说明了XACC体系结构,我们decom- pose到组成平台,内存和编程模型。XACC平台模型描述了在混合程序的编译和执行中起作用的硬件组件,以及这些组件如何相互作用,而内存模型则详细描述了这些组件之间的数据管理和移动。这些模型抽象推动了XACC编程模型的设计和实现,该模型指定了一个应用程序编程接口(API),用于将计算卸载到附加的量子加速器。3.1. 平台和内存模型XACC将通用量子处理单元(QPU)视为参考文献10中所述。[4],其中QPU由寄存器组成量子位(qubit)的存储器、量子控制单元(QCU)和用于存储量子程序结果的经典存储器空间。参考文献[4]提出了各种经典量子集成策略,促进了例如,可以想象松耦合的协处理器模型,其中一个或多个经典计算节点访问单个远程托管的QPU。另一方面,可以考虑紧密耦合的协处理器模型,其中一个或多个计算节点可以访问用于QPU控制和执行的存储器内、进程内设备驱动器API(不需要远程访问当然,在这两个极端之间,这些模型有许多变体。XACC平台模型尝试将此频谱考虑在内,并启用各种本地和远程QPU访问模型。在这个QPU定义的基础上,我们定义了一个XACC在这个模型中定义了三个重要的组件:(1)主机CPU,(2)加速器系统(和进一步的子类型),和(3)加速器缓冲器(见图1)。①的人。主机CPU通过执行经典应用程序并将量子计算机执行委托给所附接的加速器系统来驱动经典应用程序与所附接的加速器系统的加速器系统的作用是侦听执行请求,然后驱动根据供应商提供的量子计算机API规范编译的量子程序的执行加速器缓冲器组件形成共享加速器执行结果的底层混合经典我们已经设计了XACC来促进串行经典量子计算和并行并行分布式高性能计算,这些计算通过量子加速来增强,因此,主机CPU组件的基数是一对多(1..*)。可以将一个或多个主机CPU作为与HPC应用中可用的多个内核相对应的给定混合执行同样,可以考虑涉及多个量子协处理器的在短期内,由于QPU基础设施的要求,这将是不太可能的,但考虑到适度的硬件进步,适度大小的QPU集合可能会成为多个计算节点可用,就像传统异构计算中的GPU一样因此,加速器系统的基数也是一对多(1..*)。这个平台模型允许包含多个经典线程,这些线程可以访问多个加速器。XACC内存模型确保客户端应用程序可以通过缓存器缓冲区概念检索量子执行结果,缓存器缓冲区概念对位寄存器进行建模 并 存 储 测 量 结 果 的 集 合 。 客户端 ( 主 机 CPU ) 创 建AcceleratorBuffer的实例,然后在执行时将其传递到加速器系统。加速器系统负责跟踪所有测量结果,Fig. 1. XACC平台模型定义了主机CPU、加速器系统和加速器缓冲存储器空间之间的相互作用。主机CPU负责明智地将工作委托给由加速器系统控制的QPU。结果存储在加速器缓冲区中并由其共享。248A.J. McCaskey等人/SoftwareX 7(2018)245图二. XACC接口架构。其核心是IR、函数和指令接口及其相互关系。编译器生成编译的IR实例,加速器执行包含IR的函数。这里,菱形原点的实线箭头表示组合(IR由函数组成),而空心箭头的虚线表示接口实现(函数是指令)。将它们存储在AcceleratorBuffer中。由于客户端在整个执行过程中始终引用创建的AcceleratorBuffer句柄,因此它在执行后包含的数据可用于后处理,以便计算期望值或其他感兴趣的统计量,从而影响混合计算的其余部分。3.2. 编程模型XACC编程模型旨在以独立于量子语言的方式在现有代码的基础上实现量子算法的表达此外,所表达的量子算法的编译为了实现这一点,XACC定义了六个主要概念:(1)加速器中间表示,(2)量子内核,(3)中间表示上的变换,(4)编译器,(5)加速器和(6)程序。这些概念使表达API能够将计算任务卸载到附加的量子加速器。客户端通过量子内核源代码表达式来表达量子算法,其方式类似于OpenCL或GPU的CUDA。这些内核可以用任何量子编程语言来表达量子算法,对于这些量子编程语言存在有效的编译器实现,从而使得能够实现各种各样的编程方法和技术(高级和低级编程抽象)。编译器将源内核映射到核心中间表示,该核心中间表示支持硬件相关和独立的程序分析、转换和优化。然后,将这种一般变换或优化的表示映射到硬件原生的as-software代码,并在可用的物理或虚拟硬件实例上执行。3.2.1. 中间表示为了促进跨各种可用加速器和编程语言(嵌入式或独立)的互操作性和可编程性,必须存在易于理解和操作的低级程序表示LLVM编译器基础设施中可以找到一个说明性的例子,它映射了各种高级经典编程语言(C、C++、J2EE-C、Fortran等)。到一个共同的中间代表(IR)。然后,IR用于执行硬件(相关和独立)分析和优化,以生成高效的硬件特定可执行代码[25]。用于量子计算的标准IR应该支持广泛的编程工具,并为早期用户提供以最适合他们的研究和应用的方式编程其特定领域算法的好处。到目前为止,还没有关于开发可以跨越多个不同量子计算的统一中间表示的努力。计算模型(例如,绝热门)。目前可用的编译器工具采用电路级编程表达式,并将其映射到硬件特定的量子汇编(QASM)语言,不同的努力提供格式和语法不同的QASM强烈需要一组多态的可扩展接口,其跨越并支持不同的量子加速器类型,从而实现跨计算模型和硬件类型的量子计算的可重定向编译器基础设施。这样的基础设施位于比典型的汇编表示略高的抽象级别,因此实现了将多个高级语言与多个硬件架构集成的统一API这种量子中间表示的目标是为量子程序分析、转换和优化提供汇编级语言和APIXACC定义了一个多态IR架构,它将编程语言和技术与具体(物理或虚拟)硬件实现集成在一起。XACC IR被设计成遵守四个主要要求:(1)IR应当提供可操纵的内存中表示和API,(2)IR应当可持久化到磁盘上的文件表示,(3)IR应当提供人类可读的、类似汇编的表示,以及(4)IR应当提供图形表示。 管理IR接口的架构如图所示。 2.使用统一建模语言(UML)。XACC IR的基础是指令接口,其抽象了可执行指令的概念(例如,量子门或程序)。指令具有唯一的名称和参考-加速器量子位运行的能量。指令可以在一个或多个量子位上操作,并且可以启用或禁用以用于经典条件分支。指令也可以被参数化-每个指令可以可选地跟踪一 个或 多 个InstructionParameter , 其 被 表 示 为 可 以 是float、double、complex、int或string类型的变体数据结构。重要的是,指令参数概念允许变分量子算法中的指令的自然表示[26],这是一些最有前途的候选人为近期加速。接下来,XACC定义了一个函数接口来将源代码表示为指令的组合。函数接口是指令接口的一个派生,指令接口本身包含指令。这种指令/功能组合是复合设计模式的一种实现,设计模型部分整体层次结构[27,28]。通过这种模式,XACC将编译后的程序建模为一个n叉树,函数实例作为节点,指令实例作为叶子(参见图3,描述了内核源代码和函数/指令树之间的映射)。这些Function实例的执行、转换和优化是通过一个预排序树遍历来处理的,遍历每个节点都涉及到遍历每个子节点从左到右。 对于图中的IR树。 3、这个A.J. McCaskey等人/SoftwareX 7(2018)245249→ → →→→ →→图三. 展示量子语言可扩展性的XACC编译器工作流程。编译器获取用可用语言编写的量子内核源代码,并将其映射到XACC中间表示,以进行程序分析、转换和优化。表示节点按以下顺序访问:GI1JI2I3Hi4,其中f、g、j、h是函数实例,i1、i2、i3、i4是通用指令实例。最后,XACC定义了IR接口,它充当Functions的容器。 IR包含一个Functions实例列表,其中公开的API支持将这些Functions映射到类似于汇编的人类可读字符串和图形数据结构。对于数字化计算,该图可以模拟量子电路,并为程序转换和分析提供了方便的数据结构对于量子退火,图结构可以对形成用于量子计算的机器级指令的伊辛哈密顿量和调度参数进行为了提供磁盘上的表示,IR接口公开了load和persistent方法,它们分别采用文件路径进行读入和写入通过这种方式,从给定的内核集生成的IR实例可以持久化和重用,从而实现更快的提前或即时编译。3.2.2. IR转换任何编译工作流的一个关键方面是实现优化和转换的能力,这可能是通用的或依赖于硬件在过去的几年里,量子程序转换,优化和量子程序的最佳指令调度技术的发展取得了很大进展[29-32 ],我们设计了任何程序操作的目标都是确保所有编译指令都能够以最佳或接近最佳的方式在所需的加速器敬韩-为了实现优化和转换,XACC定义了一个IRTrans接口。该接口提供了一个扩展点,用于获取IR实例并生成修改的、优化的或更一般地转换的IR实例。转换后的IR在逻辑上是等效的,即,产生等同的结果理想的无噪声设置。更一般的IR修改特别适合于处理对近期量子计算至关重要的错误缓解任务。其基本思想是,一个新的IR或一组转换的IR,其根据需要收集额外的信息以减轻某些错误源。在这种情况下,必须有适当的执行后处理机制为了处理这种情况,XACC定义了一个IRPreprocessor实例接受IR实例并将其修改为非同构方式,但返回一个AcceleratorBufferPostprocessor实例,该实例知道此修改的详细信息,并可以调整加速器相应地产生这是一个实用的例子,这种机制是量子位测量误差缓解[7],由此可以实现IR预处理器,将测量内核添加到IR实例。 这些额外的内核的执行的特点读出错误率,并可以使用相应的-INGAcceleratorBufferPostprocessor实现,提供了由IRPreprocessor实例,以纠正加速器的结果。其他缓解技术,如无噪声外推和准概率方法[33,34]同样可以在IR预处理和变换的结构在 将 内 核 源 代 码 映 射 到 IR 实 例 之 后 , XACC 模 型 指 定IRTransformations在加速器执行之前转换IR实例在这些转换之后,所有请求的或默认的IRPreprocessors都将运行,并且执行之后,生成的AcceleratorBufferPostprocessors 将在生成的AcceleratorBuffers上存储和执行。3.2.3. 加速器量子硬件类型不可避免的近期变化迫使任何异构XACC对此也不例外,因此定义了一个Accelerator接口,用于注入物理和虚拟(即,模拟器)QPU后端。加速器界面(如图所示)(2)提供子类型的初始化操作符,用于处理任何启动上执行之前所需的加载过程设备. 这包括检索可能影响内核编译和IR转换的硬件规范(如连接信息)。加速器暴露了一种机制用于创建AcceleratorBuffer实例,它为程序员提供了一个加速 器 测 量 结 果 的 句 柄 。 此 外 , 加 速 器 实 现 提 供 了getIRTransformations操作的实现,以提供必要的在逻辑编译的IR实例上的低级硬件相关转换。最重要的是,Accelerators公开了一个执行操作,该操作将被操作的AcceleratorBuffer和代表要执行的内核的Function实例Accelerator接口的实现负责利用这些输入数据结构来影响它们的目标硬件或模拟器上的执行加速器实现的目的是利用供应商或库提供的API来执行此执行。所有执行实现都负责使用测量结果更新AcceleratorBuffer。请注意此Accelerator接口的通用性。子类可以提供针对物理或虚拟硬件的执行实现。通过这种方式,我们可以使可用的量子250A.J. McCaskey等人/SoftwareX 7(2018)245以模拟硬件为目标的编程语言,该模拟硬件提供了用于混合量子-经典算法执行的快速反馈的机制。例如,加速器开发人员可以为各种高性能和专业模拟器提供执行实现[35在没有作为优选的模拟方法,我们已经提供了用于加速器的默认实现,其使得能够经由张量网络理论进行门模型量子计算机模拟,具体地通过利用矩阵乘积状态分析的波函数分解(张量网络量子虚拟机,TNQVM)[38,39]。 这使得XACC的用户能够在物理硬件上执行之前研究量子比特的大型系统(上限取决于系统中的纠缠水平)。3.2.4. 内核、编译器和程序XACC要求以类似于CUDA或OpenCL中GPU加速代码的方式提供也就是说,代码必须通过独立的内核来表达. 内核是应用于位寄存器的加速器操作的编程表示。在其核心,XACC内核由一个类似C的函数表示,但是,该函数必须将表示该内核操作的加速器位寄存器(量子位)的AcceleratorBuffer实例作为其第一个参数。正是通过这种方式,内核将带有句柄的经典代码与加速器测量结果连接起来。 XACC内核不指定返回类型;有关内核操作结果的所有信息都是从AcceleratorBuffer的位测量集合中收集的。XACC中的内核必须使用__qpu__关键字从传统的库函数调用中恢复该注释可以通过提供抽象语法树搜索机制来启用XACC内核的静态提前编译我们把这个静态的、提前的编译器作为将来的工作。目前,所有的XACC编译器都是在运行时执行的,因此只支持即时编译。最后,内核可以接受任意数量的内核参数,这些参数驱动量子代码的整体执行。 这些参数被建模为前述的InstructionParameter变量类型。这支持参数化编译的IR实例,在runtime。XACC内核的函数体可以用任何可用的语言表示可用的语言是一种存在有效的编译器实现的语言。图2显示了该接口的体系结构,图2显示了它的可扩展性和与XACC IR的连接。3.第三章。这个接口提供了一个编译方法,该方法将内核源代码作为输入,生成XACCIR的有效实例。派生的参数是自由地以他们认为合适的任何方式执行编译,只要他们返回一个有效的IR实例。此外,编译操作可以可选地将目标加速器作为输入,这使得特定于硬件的细节能够在编译时出现,从而影响执行编译的方式。该编译扩展点提供了一种将高级构造映射到低级量子系统的机制,因此有助于将域特定编程表达式映射到XACC IR的量子程序分解方法。这方面的一个示例是表达分子哈密顿量的域特定语言,以及通过Jordan-Wigner或Bravyi-Kitaev变换将该哈密顿量映射到量子组装的相关注意,这种设计还通过编译方法的整体可扩展性促进了一般的门分解技术人们可以想象一种域特定语言,用于表达被表达为XACC内核的通用酉,并传递给将酉分解为本机低级门集合的编译器实现[42]。XACC编译概念还定义了内核源代码预处理器扩展点。预处理器在编译之前执行,并将源代码作为输入进行分析和处理,内核语言的编译器参考以及目标加速器。使用这些数据,预处理器可以对内核源字符串执行操作,以生成增强或简化计算的修改后的源代码预处理器实用程序的一个例子描述所需算法的某些关键字,并用该算法的源代码表示替换该代码行。通过这种方式,预处理器可以用来减轻繁琐的编程任务。与XACC编译基础结构交互的主要入口点是程序的概念。该程序编排整个内核编译过程,并为用户提供一个可执行的functor,以在所需的加速器上执行编译后的内核。程序实例化时参考内核源代码和目标加速器,为程序员提供一个build()操作,该操作应用所需的内核预处理器,选择并执行正确的编译器以生成IR实例,然后执行所有期望的(或默认的)IR转换和IR预处理器。最后,程序公开一个getKernel操作,返回一个可执行的functor,该functor在目标Accelerator上执行编译后的Function。传统和量子程序的相互作用是恶魔-在清单1中演示用户将他们的源代码描述为XACC内核(请注意,此内核由双参数参数化),请求所需加速器的引用或句柄,并分配量子位缓冲区。接下来,实例化Program对象,并通过构建调用启动XACC编译工作流。此时,适当的编译器已经将源代码映射到XACC IR,并且所有转换,优化和预处理器已被调用,以提供可执行的functor或lambda,这将使用户能够在所需的Accelerator上执行。这个可执行的内核引用可以被用作某些参数化循环的一部分,从而实现混合A.J. McCaskey等人/SoftwareX 7(2018)245251见图4。氘的参数变化。(a)中的代码片段来自清单1中的代码。用户请求加速器并将XACC内核源代码编译为XACC IR。可执行内核函数可以被请求并用作参数化循环的一部分。通过TNQVM(虚拟)加速器和IBM QX5 16量子位QPU计算的能量矢量作为变分参数θ的函数如(b)所示4. 示范近期量子计算设备提供相对小的量子寄存器,并且缺乏足够的纠错能力来实现容错计算。然而,这些阈值前的设备证明了足够的硬件控制,以支持可编程序列(不完美)的操作称为量子电路。执行这些量子电路的设备可以用作混合计算方案中的原始量子加速器[43]。这些早期的QPU中只有一小部分是公开的,并且都位于最终用户的远程位置,与第3.1节中描述的在本节中,我们通过使用统一的XACC API对门和退火量子计算机进行编程来演示XACC框架的实用性4.1. 核结合能计算的示例程序在这里,我们演示了使用XACC组成一个科学的应用程序计算原子核的结合能。该程序的准确性以前曾在以氘为例[5],我们用这个例子来描述这个程序是如何构造的技术细节该XACC混合程序的一般结构源自变分量子本征解算器(VQE)算法[6],其是用于恢复量子力学哈密顿量的最低能量本征态的量子系统哈密顿量的最小形式,其最低本征值与结合能相关,由下式给出:H2= 5。906709 I +0。218291 Z0- 6。125Z1-2。143304(X0X1+Y0Y1),( 1)其中,Xi、Yi、 Zi表示作用于第i个量子位的泡利算子VQE算法搜索的基态能量- 通过相对于编码到加速器QPU的量子位寄存器中的参数化量子对于大型系统,波函数很容易在量子位寄存器中表示,但需要指数经典资源来存储。在这种优化的每次迭代中,QPU由通过当前的量子电路的参数化的量子电路演化252A.J. McCaskey等人/SoftwareX 7(2018)2452=≈ ∗≈=-=-·······图五、 一个简单的例子展示了XACC框架在D-Wave QPU上执行程序的灵活性和实用性。(a)表示为D-Wave量子机器指令编译器编写的XACC内核,而(b)演示使用XACCAPI编译和执行此代码。该代码使用D-Wave QPU将15分解为3和5哈密顿项。期望值然后相对于测量样本的集合进行评估,并且所有这些期望值的加权和确定给定参数化下的系统这种优化一直持续到收敛。我们现在演示如何使用XACC框架以QPU独立的方式编程该算法首先,我们定义内核源代码,初始化QPU上的试验波函数,称为anomaly。清单2中随后使用qpuananother()内核定义了这个another。这个内核实现了三种逻辑操作。使用的anatomic内核作为一个构建块,我们附加额外的门和测量指令,根据需要,以评估从方程的哈密顿项的期望值。(一). Z0,Z1项在方程中。(1)可以在初始化之后相对于QPU状态进行评估,因此仅附加测量指令为了计算涉及X和Y算子的其他项,应用了基旋转的局部变化,即对所有X算子使用Hadamard门算子和所有Y算子的X(π)旋转XACC量子清单2中的内核源代码是用Quil [12]编写的然而,请注意,内核可以用框架支持的任何门模型量子语言(OpenQASM,Scaffold等)编写。因为XACCIR表现为指令实例的n叉树,所以先前定义的内核可以被重用为其他内核中的指令。递归电路,如量子傅里叶变换,可以很容易地以这种方式定义。为了编译和执行这些内核,我们利用XACC API,如图4(a)所示。请注意,从框架请求加速器的用户只需提供与所需Accelerator对应的字符串名称。这将返回指向所需实现的多态Accelerator引用。在TNQVM加速器上运行这段代码相当于简单地将getAccelerator字符串参数修改为tnqvm。在TNQVM加速器和IBMQX5 16量子位QPU上运行此代码的结果如图4(b)所示。 这个执行的原始定时信息不是很清楚,因为大部分时间都花在等待IBM Quantum Experience作业队列中,或者由于远程HTTPS调用而导致网络延迟。然而,我们可以估计一个下限的执行时间为这个例子的程序考虑,sidering电路长度,测量和刷新时间尺度。让我们考虑一个量子程序组成的nl(e)层的本地(纠缠)量子门可以并行实现(在我们的例子nl2,ne1)。给定典型的超导门时间尺度,20 ns,t e2 0 0 ns,沿用t m2µ s测量时间刻度,刷新时间为 tR10T1 500µ s需要通过自然弛豫机制重新初始化量子位寄存器。所需的最短设备时间要计算清单2中的所有四个核,假设每个项的集合大小为104个样本,则在给定参数θ下,每个函数的计算时间为20 s。注意,采样率可以部分地通过并行化(在未来的工作中将详细说明的主题)缓解,但已经可以看到,总的时间资源可能会变得令人望而却步(例如,指数代价)的程序,需要大量的样本,以优化噪声成本函数评估[44,45]。因此,有必要提高量子优化算法的可扩展性,以减少量子优化的显着成本。4.2. D-Wave上的简单整数素分解为了证明XACC IR的多态性,这里我们提供了一个针对D-Wave QPU的简单问题编程的示例这个例子利用了与清单1和氘核演示中完全相同的API调用(见图1)。 5(b))。具体来说,我们演示了使用XACC量子退火IR实现(具有相应的函数和量子退火的指令子类型),D波QPU将15因子分解为5和3。的量子核在D-Wave QPU上分解15,以及使用XACCAPI编译和执行它所需的相关代码如图所示。 5(内核代码为简洁起见进行了修剪)。我们已经实现了一个更简单的实现,DWQMIXener[46],它将结构为D-Wave量子机的新行分隔列表的输入内核作为输入。Ising Hamiltonian coefficients(伊辛哈密顿系数)编译和执行工作 流 从 获 取 对 D-Wave Accelerator 的 引 用 开 始 , D-WaveAccelerator允许用户访问所有远程托管的D-Wave Solvers(物理 和 虚 拟 资 源 ) 。 接 下 来 , 用 户 请 求 分 配 一 个AcceleratorBuffer,这为他们提供了对D-Wave QPU量子位的引用,以及执行后的所有结果数据。然后,创建并编译一个程序。参考加速器和源代码。这反过来开始子图嵌入和参数设置步骤,作为DWQMIBucher工作流程的一部分(有关D- Wave编程工作流程的完整详细信息,请参见[47])。用户执行内核lambda,该内核lambda使用结果数据(能量、测量位串等)填充AcceleratorBuffer实例。 对应于最小能量的比特串然后可以用于重构因子15的二进制表示。5. 讨论我们提出了一个编程、编译和执行框架,能够以独立于语言和硬件的方式将量子计算集成到标准和HPC工作流程中我们已经展示了一组高级接口和编程概念,支持QPU加速,让人想起现有的GPU加速。这些接口使领域计算科学家能够将现有的科学计算代码迁移到早期的QPU设备,同时保留先前的编程投资。A.J. McCaskey等人/SoftwareX 7(2018)245253这项工作为近期量子计算硬件的基准测试、验证和分析软件套件的开发开辟了有趣的途径。随着领域计算科学家开始利用这些量子技术作为现有软件工作流程的一部分,快速交换虚拟和物理加速器实例的能力将使实际QPU结果的快速验证成为可能。比较和对比不同量子硬件类型的高级算法执行的基准测试套件将提供一种机制,用于直观地了解哪种硬件最适合手头的问题在这方面,XACC提供了一个统一的API,用于快速交换这些硬件实例,从而实现一次写入并运行QPU基准测试和验证心态。最后,注意框架核心接口的通用性我们关注的是经典异构体系结构的量子加速这是我们打算今后工作的方向致谢这项工作得到了美国橡树岭国家实验室的实验室指导研究和开发计划、美国能源部(DOE)科学办公室高级科学计算研究(ASCR)早期职业研究奖以及DOE科学办公室ASCR量子算法和试验台计划的支持,现场工作提案编号为ERKJ332和ERKJ335。这项工作也得到了美国ORNL本科生研究参与计划的支持ORNL由UT-Battelle,LLC为美国能源部管理ORISE由美国橡树岭联合大学为美国能源部管理,合同编号为DE-AC 05 - 00 OR 22750。美国政府保留和出版商,通过接受出版的文章,承认美国政府保留一个非排他性的,付费的,不可撤销的,世界范围内的许可,出版或复制本手稿的出版形式,或允许他人这样做,为美国政府的目的。能源部将根据能源部公众获取计划,向公众提供这些联邦资助研究的结果引用[1] 放大图片作者:Hack J,Riley K,Gerber R.横切报告:Exascale需求审查,技术报告;2018年。网址https://science.energy.gov/media/ascr/pdf/programdocuments/docs/2018/DOE-Exas
下载后可阅读完整内容,剩余1页未读,立即下载
cpongm
- 粉丝: 4
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- RTL8188FU-Linux-v5.7.4.2-36687.20200602.tar(20765).gz
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
- SPC统计方法基础知识.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功