APP下载

一种面向含噪中尺度量子技术的量子-经典异构计算系统

2021-09-13郑宇真于锦涛徐炜遐吴俊杰

计算机研究与发展 2021年9期
关键词:体系结构波形指令

付 祥 郑宇真 苏 醒 于锦涛 徐炜遐 吴俊杰

1(国防科技大学计算机学院量子信息研究所兼高性能计算国家重点实验室 长沙 410073) 2(国防科技大学计算机学院 长沙 410073) 3(数学工程与先进计算国家重点实验室 郑州 450001)

2019年谷歌通过利用53个超导量子比特执行随机量子线路采样任务[1],2020年中国科学技术大学通过利用76光子执行玻色采样任务[2],展示出量子计算机在某些特定问题上超越经典计算机的能力,实现了量子优越性[3-4],标志着含噪中尺度量子(noisy intermediate-scale quantum,NISQ)时代[5]的到来.NISQ技术指量子系统中可集成50至数百个含噪声量子比特的技术.NISQ时代下,量子比特的相干时间非常短暂,且量子操作的错误率仍然可观.以超导量子比特为例,已实证的适合大规模集成的超导量子比特相干时间仅有数十至数百微秒[1,6-10];虽然单量子比特门的错误率可低于1%,但两量子比特门和量子测量的错误率尚难以在每个量子比特(对)上均低于1%[1,11].受限于量子比特的数量、相干时间和量子操作的错误率,NISQ技术无法通过量子容错技术[12]支持长时间的量子状态演化来求解实际的问题.

为了加速量子计算的落地,一种思路是在比量子比特尚未退相干之前完成量子算法所需的量子状态演化,从而使量子噪声或错误不至于积累到完全破坏计算结果.已有工作提出了一系列有望在近期得到实证的量子算法,如变分量子本征值求解(variational quantum eigensolver,VQE)[13]、迭代相位估计(iterative phase estimation,IPE)[14-16]、量子近似优化算法(quantum approximate optimization algorithm,QAOA)[17]、变分量子模拟(variational quantum simulation,VQS)[18]等.这些算法运行过程中,量子比特每次从初始化到最终测量所需的时间相对较短,降低了对量子比特相干时间的要求,为利用NISQ技术解决实际问题提供了可能.

NISQ时代量子应用的第2个特点是在应用层需直接控制量子计算硬件的部分执行细节.一方面,由于NISQ量子比特天然含噪的特性,用于校准量子比特和量子操作相关参数的量子实验会定期反复地进行.这些实验需直接控制施加在量子比特上的模拟波形,或精确控制操作发生的时序.另一方面,由于NISQ时代下的量子计算机性能有限,特定的量子计算机用户会希望直接控制量子操作的波形和时序,从而面向具体硬件优化量子程序达到最优性能.实现量子-经典异构计算并支持用户在应用层控制量子计算硬件的部分执行细节,需要程序设计语言、编译器、体系结构等多个层次的支持及各层次之间的配合.

明确量子计算机的系统结构是指导量子软硬件设计并将其集成为一个系统的必要条件.基于线路模型,之前的工作提出了若干量子计算机系统结构设计构想,讨论量子计算从软件到硬件的层次划分及层次间的协同方式[19-23].但这些层次结构主要面向大规模容错量子计算机,强调通过层层抽象及逐级优化,使量子算法以容错的方式在硬件上执行.这些设计构想中,有些虽然提到了量子计算与经典计算的结合,但并未具体地讨论量子计算资源和经典计算资源的组织方式.同时,这些构想中不考虑或较少考虑如何将与波形和时序等硬件相关的低级控制能力以一种可编程的方式暴露给顶层软件.因此,现有的量子计算系统结构设计构想在指导NISQ系统的实现上有所不足.本文比较量子计算与经典计算的异同,并以工程化视角回顾量子计算系统的层次结构.面向NISQ时代的量子-经典异构计算,本文以青果框架[24]为例概述量子计算软硬件系统的组织方式,并分别介绍高级量子程序设计语言、量子编译器、量子软硬件接口、量子控制微体系结构等层次的主要任务.最后,我们简要探讨程序设计语言、编译和控制体系结构等方面在NISQ技术条件下面临的挑战.

1 背 景

本节介绍量子计算的基本数学原理.在此基础上,以IPE为例介绍量子算法的基本构成并以超导量子比特为例介绍量子比特的物理实现及其控制.

1.1 量子计算基础

比特是经典计算机的基本单元,一个比特在确定的时刻只能处于2种互斥的基本状态(0,1)中的一种.量子比特(quantum bit,qubit)是量子计算机的基本单元.量子比特有2种基本状态|0〉和|1〉.与经典比特不同,量子比特能够同时处于|0〉和|1〉的叠加态中,表示为|ψ〉=α|0〉+β|1〉,或者一个长度为2的向量(α,β)T,其中α,β∈且满足归一化条件|α|2+|β|2=1.这种现象称之为量子叠加.在归一化条件下,|ψ〉可被重写为由于在物理上没有可观测的效果,全局相位eiγ可被忽略.这样,单个量子比特的状态可形象化地表示为Bloch球面上的一个点,如图1所示.

Fig.1 The Bloch sphere that represents a single qubit state图1 可表示单个量子比特状态的Bloch球面

(1)

当量子比特门作用在多个量子比特系统中的少数量子比特上时,其矩阵可使用该门对应的矩阵与单位矩阵的张量积来描述.如将单量子比特门Us作用在四量子比特系统中的第3个量子比特上时,描述其整体效果的矩阵为U=I⊗I⊗Us⊗I,其中⊗表示克罗内克(Kronecker)积.初始状态为|ψi〉的量子系统在量子门U的作用下将转变为状态

|ψo〉=U|ψi〉.

(2)

对量子比特进行测量时,会使得整个系统的量子状态发生坍缩.以测量n量子比特系统中的第1个量子比特为例,若测量前的状态为

(3)

(4)

其中j∈{0,1,…,2n-1-1}且b∈{0,1}.

对比|ψbefore〉 和|ψafter〉 可知,对具有n个量子比特的量子系统中的少数量子比特施加门操作或进行测量时,可使得表征此量子系统的2n个系数同时发生变化,展现出极高的并行性,这是实现量子计算优越性的第2个理论基础.

量子系统中巨大的存储空间,结合量子操作内秉的高度并行性,可使得量子计算机在解决特定问题时比经典计算机更为高效.

1.2 通用量子比特门

任意经典函数可通过一定的方法(如卡诺映射[25])被分解为SUC={与,或,非}3个门.因此我们说SUC是经典通用计算门.与此类似,如果一组量子门可通过组合的方式,以任意精度近似到任何m量子比特操作Um,其中m≥1,则这组量子门被称为通用的[26].对于如1.5节所述的超导量子比特而言,一个常用的通用量子门集合是SUQ={Rx,Ry,CZ},其中Rx和Ry分别代表绕x轴和y轴的任意角度的旋转.例如,CNOT门可以使用SUQ构造,如式(5)所示:

CNOTc,t=Ry(π/2)t·CZ·Ry(-π/2)t.

(5)

1.3 量子线路

类似于经典电路可描述硬件对经典信息的处理过程,一个量子线路可用于描述量子操作作用在量子比特上的过程.在量子线路中,每个量子比特用一条水平线来表示,施加在该量子比特上的操作用一个块来表示.例如,单个量子比特门Us和多量子比特操作Um可以用图2(a)和图2(b)所示的量子线路来表示.连接黑色圆点的方块表示受控门,如图2(c)所示.

Fig.2 Quantum circuit图2 量子线路

量子线路中,率先作用在量子比特上的量子门被放置在随后作用的量子门的左边.图3描述了如式(5)所示的CNOT门分解.右侧量子线路利用2个单量子比特门和一个CZ门实现了CNOT的分解.由于Ry(-π/2)最先作用在受控量子比特t上,所以它出现在分解后的量子线路中的最左侧.图3左图中,黑点连接十字圈表示作用在2个量子比特上的CNOT门;右图中,2个连接的黑点表示CZ门.需要注意的是,数学表达式中率先作用在量子比特上的量子门出现在随后作用的量子门的右侧(式(5)),这与量子线路中量子门出现的顺序是相反的,如图3所示:

Fig.3 A quantum circuit example of CNOT gate decomposition图3 CNOT门分解的量子线路示例

1.4 量子算法

在求解某些量子计算问题时,结合量子计算和经典计算可以显著降低对量子比特数目与相干时间的要求.例如,量子相位估计算法(QPE)是量子模拟[13]和Shor质因子分解算法[27]等多个量子计算应用的关键子程序;作为QPE的一种实现方式,IPE算法通过使用经典计算指令实时处理量子比特的测量结果,可有效地降低对量子比特数量和相干时间的要求.本文将以IPE作为算法范例,介绍量子-经典异构算法的整体执行流程,说明量子应用从高级语言描述转换为量子软硬件接口表示,并如何在实际量子计算硬件上执行.本节简要介绍IPE算法的原理,关于该算法的详细讨论可参考文献[14-15].

假设酉算子U有一个本征态|u〉,且对应的本征值为ei θ,即

U|u〉=ei θ|u〉,

(6)

θk=(-0.ck+1ck+2...cm)·π,

(7)

Fig.4 Flow chart of the iterative phase estimation (IPE)algorithm图4 IPE算法的流程图

其中,k∈{1,2,…,m-1}且θm=0.需要注意的是,在算法执行过程中,应使用经优化过的受控U2k-1操作,而不是将受控U操作执行2k-1次.否则,算法的效率和结果的保真度将大大降低.

1.5 量子比特的物理实现及控制

量子计算需要在满足特定条件的物理系统上执行.目前,已有一些工作归纳并总结了物理系统在执行通用量子计算时必须满足的条件.其中最著名的是2000年DiVincenzo所总结的DiVincenzo准则[28],包含5个条件:

1)可扩展的、由表征良好(well-defined)的量子比特组成的物理系统;

2)该系统具备将量子比特初始化到一个简单量子态的能力;

3)量子比特拥有较长的相干时间,且远大于单个量子操作的持续时间;

4)该系统可在量子比特上施加一组通用的量子门;

5)该系统可完成对量子比特的测量.

2012年诺贝尔物理学奖授予美国科学家David J.Wineland和法国科学家Serge Haroche,以表彰他们于20世纪80年代在测量、操控单量子系统上所做出的开创性贡献[29].自此之后,人们研究了多种量子比特的实现技术方案,如超导量子电路[30-32]、光量子[33-35]、离子阱[36]、拓扑量子系统[37-38]、自旋量子比特[39-40]、核磁共振[41]、钻石色心[42-43]、中性原子[44-47]等.一些技术已被证明具有内在的扩展性问题,如核磁共振[48].一些技术还处于早期发展阶段,如基于马约拉纳的拓扑量子计算.在撰写本文时,最有希望的技术是超导量子比特和离子阱,这2种技术都已被证明符合DiVincenzo准则[1,49-51].本文将主要基于超导量子比特讨论面向NISQ的量子-经典异构系统.但是,本文关于量子-经典异构系统的大部分观点也可适用于其他类型的量子比特,如离子阱.不过读者须注意,不同的量子比特实现技术使用的控制硬件和软硬件接口可能不同.

图5展示了一种名为Transmon的超导量子比特的扫描电镜图像.Transmon是一种集总参数的非线性LC谐振电路,由一个电容器与一对提供非线性电感的约瑟夫森结并联组成.我们使用该电路的基态和第一激发态分别作为量子比特的|0〉态和|1〉态.通过使用近端通量偏置线(端口Pf)控制2个约瑟夫森结之间的环路的通量,可以在纳秒级时间尺度上对跃迁频率fQ在几千兆赫兹的范围内调整.

Fig.5 The SEM image of a Transmon qubit (Q)图5 Transmon量子比特(Q)的扫描电镜图像

共平面波导谐振器(R)通过电容耦合至量子比特和测量馈线(从输入端口Pi到输出端口Po).外部电子控制设备经通量偏置线(Pf)和微波偏置线(Pm)施加脉冲信号产生作用在量子比特的量子门,产生一定频率的微波信号从Pi至Po穿透测量馈线,通过R完成对量子比特状态的测量.

R的基频fR根据量子比特状态的不同而不同.利用这一特性,可实现对量子比特的测量.频率在fR附近的测量电磁脉冲信号(通常持续300 ns至2 μs)在穿过测量馈线时询问量子比特的状态,并将其投影到|0〉或|1〉.通过对由Po端口输出的信号依次进行解调、数字化、积分以及与阈值进行比较,可以推断量子比特的测量结果.

单量子比特门通过向量子比特施加频率为fQ、时长通常为20 ns的微波脉冲来实现.一般使用任意波形发生器(arbitrary waveform generator,AWG)生成微波脉冲的包络信号,然后使用I-Q混频器基于载波单边带调制将该信号加载到频率fQ.图6中显示了绕x轴和y轴旋转操作的包络信号的同相(I)和正交(Q)分量.该图中,I,Q分量均已包含了频率为-50 MHz的单边带调制分量.该信号中,包络和载波的相位决定对应旋转操作的旋转轴在Bloch球赤道平面上的位置,脉冲幅度决定旋转的角度.标准的校准流程可以确定特定脉冲的幅度(如π和π/2)并校正混频器的缺陷.需注意的是,用于进行量子门操作的微波脉冲需以精确的时序作用在量子比特上.例如,图6中所示的x旋转操作的包络信号已经包含了一个固定的-50 MHz单边带调制分量,如果x旋转操作施加的时间比正确的时间晚5 ns,那么最后将产生一个绕y轴——而不是绕x轴——的旋转操作.最后,通过使用量子门分解技术,如Solovay-Kitaev算法[26]或重复直至成功[52],任意单量子比特门可被分解为绕x轴和y轴的旋转.

Fig.6 In-phase and quadrature envelopes of Rx(π)and Ry(π)pulses including -50 MHz single-sideband modulation图6 包括-50 MHz单边带调制分量的Rx(π)和Ry(π)脉冲的同相和正交包络

2 量子计算与经典计算的比较

2.1 存储、运算和控制的异质性

传统的数字处理器由存储单元、运算单元和控制单元组成,它们保存或者处理二进制格式的数字信号.存储单元(如寄存器或高速缓存)、运算单元(如算术逻辑单元)以及控制单元均可使用相同的基本元件——晶体管——来实现.存储、处理和控制之间的同质性使存储单元、运算单元和控制单元可自然地集成在单个芯片上.考虑到经典处理器的控制逻辑一般通过二进制指令提供,经典软件生成的指令可直接对接经典硬件,即中央处理器(CPU),如图7(a)所示.

量子计算与经典计算不同.量子比特即是数据存储的单元,又是数据处理的单元.量子比特利用量子叠加与量子纠缠来存储数据.当量子操作被施加到量子比特上时,数据在量子态下进行演化.数据存储和处理的格式均基于量子叠加与量子纠缠.量子比特的控制媒介一般是模拟电磁脉冲信号,通常由定制电子学设备产生.所以量子计算中,存储、处理和控制是异质的.这种异质性导致量子控制器需要独立于量子芯片进行设计.量子软件的输出也需要通过量子控制器完成对量子芯片的控制,如图7(b)所示.

Fig.7 The difference of the way of controlling between classical processors and quantum processors图7 经典处理器与量子处理器控制方式的差异

2.2 存内计算与非冯·诺依曼体系结构

基于晶体管的经典处理器的计算过程中,数据从存储单元传送到运算单元的输入端口,经过运算单元的处理后,再从运算单元的输出端口传送回存储单元.由晶体管实现的运算单元在空间上是固定的;而数据以电平信号的方式在存储器和运算单元之间流动.这说明经典计算过程中,数据在空间中是运动的,而对数据的操作在空间中是静止的,如图8(a)所示.经典处理器中的存储和处理一般是分离的.

与经典计算机不同,固态量子比特(如超导量子比特)以物理结构的形式固定在量子芯片上,所以量子比特中保存的数据是固定不动的.在执行量子操作时,外部控制器产生模拟控制信号并施加在量子比特上,控制量子比特的数据在本地完成翻转得到运算结果.量子计算中,对数据的操作在空间中是运动的,而数据在空间中是静止的,如图8(b)所示.量子比特既是存储信息的单元,又是处理数据的单元,因此,量子计算是存内计算(process in memory,PIM)的一个典范.

Fig.8 The difference of data flow between classical computing and quantum computing图8 经典计算与量子计算中数据流动的差异

意识到数据的存储和处理相分离这个特点,冯·诺依曼提出一个存储程序计算机的系统结构,即冯·诺依曼体系结构.冯·诺依曼体系结构由存储器、运算器、控制器以及输入、输出设备构成.根据所执行的指令,控制器从特定存储单元中取出数据,转交给算术逻辑单元进行计算,最后将计算结果写回存储器中.

冯·诺依曼体系结构是经典计算机体系结构的圭臬,显著地影响了以往量子计算机体系结构的相关研究[53-59].随着冯·诺依曼体系结构面临的存储墙问题日益突显、NISQ技术的发展使得越来越多的中小规模量子算法可以运行在硬件上,人们逐渐注意到量子计算机存算一体的特性.与此同时,研究人员开始意识到,量子计算机或许并不需要基于冯·诺依曼体系结构来构建.

3 量子计算系统层次

3.1 量子计算系统层次结构

由于大规模系统往往是复杂的,清晰的层次结构及层次间的接口定义有助于控制构建量子计算机的复杂度.工程化实现量子计算机需要解决的核心问题是:量子计算系统中的抽象层次结构及各层间的接口应如何定义?

基于QRAM模型,我们之前的工作[21,60-61]从高层抽象的视角提出了一个量子计算系统层次结构,如图9所示:

Fig.9 Overview of quantum computer system stack based on the circuit model[60]图9 基于线路模型的量子计算系统层次结构[60]

人们设计各类量子算法用于解决特定问题.一个合格的量子算法,其复杂度应优于解决同一问题的最佳经典算法[26].根据量子随机访问机器(quantum random access machine,QRAM)模型[62],量子算法的设计可结合使用量子计算资源和经典计算资源.计算资源包括存储资源(如经典寄存器、存储器和量子寄存器等)和可使用的操作(如对经典数据的算术逻辑操作与对量子比特的门操作和测量操作等).解决具体问题的量子算法采用高级量子程序设计语言(Programming Paradigm &Languages)来描述.为支持量子-经典异构量子算法,一个量子应用程序可能使用一种或多种经典的或量子的高级程序设计语言.编译器(compiler)采用该描述作为输入,执行可逆逻辑综合、量子门的分解、量子比特的映射和调度、量子线路的优化,并输出量子软硬件接口(Q SW-HW Interface)格式的程序表示.量子软硬件接口可由量子指令集和波形定义接口组成.量子控制微体系结构(microarchitecture)执行属于软硬件接口中的指令.量子控制体系结构支持精确的时序控制,可实时将量子指令翻译为时序精确的控制信号.最后,基于特定的量子技术,如超导量子比特、离子阱等,控制信号被转换成通过软硬件接口定义的模拟波形,并通过量子经典(quantum to classical)接口发送到量子芯片(quantum chip).

如图9系统堆栈的左侧面所示,当量子算法的执行时间较长而需要使用量子纠错[12]时,量子编译器、量子指令集和控制微体系结构需添加额外的支持.此时,高级量子程序设计语言中使用的量子比特和量子操作一般是逻辑量子比特和逻辑量子操作.量子编译器在进行与硬件无关的线路优化之后,需根据使用的量子纠错编码,将逻辑量子操作翻译为作用在物理量子比特上的物理量子操作.量子控制微体系结构还需进行实时量子错误检测和校正[63-64].它利用辅助量子比特对数据量子比特进行量子校验,生成错误症状(error syndrome)、根据错误症状推断可能的错误、记录这些错误信息或在必要时触发合适的量子门来纠正量子错误.

3.2 量子经典混合异构计算系统

虽然图9所示层次结构明确了量子算法从设计到最终的硬件运行所需经过的各个阶段,但并未讨论如何组织和管理量子和经典软硬件资源从而完成量子-经典异构计算.针对该问题,面向NISQ技术水平,我们提出青果(Quingo)量子-经典异构系统框架用于集成并管理量子-经典软件和硬件[24],如图10所示.

青果旨在为量子-经典异构应用及量子实验提供一个灵活、精简的编程框架,并能够将这些应用映射到NISQ硬件上执行.青果框架包含量子程序、编译器、硬件平台和运行时系统等4个主要组成部分.青果定义的量子程序六阶段生命周期模型描述了4个主要组成部分间的交互.

青果框架下,一个完整的量子程序生命周期可分为6个阶段.第1步,程序编写.用户首先使用包含了经典主程序和量子内核的混合程序来描述量子应用.经典主程序描述经典计算并通过编程环境提供的接口调用量子内核.主程序使用经典程序设计语言(如Python或C语言)编写.量子内核使用量子程序设计语言(如Quingo)描述发生在量子协处理器上的计算任务.第2步,经典编译.经典编译器(如GNU Compilation Collection(GCC))编译经典主程序,并生成经典二进制文件.若经典主程序使用解释型语言描述,如Python,则第2步可以跳过.第3步,经典预处理.(编译后的)经典主程序随后交由经典主机运行,直到调用量子内核为止.此时,调用量子内核所需的参数全部确定,进而可启动第4步——量子编译.这一步中,量子编译器编译量子程序,并可利用第3步提供的内核调用参数,使用例如部分执行等编译优化技术,优化量子内核,生成量子指令程序、量子操作对应的波形及其他配置信息.第5步,量子执行.量子协处理器根据第4步生成的波形和配置信息等,配置量子控制体系结构,然后执行量子指令程序控制量子比特进行状态翻转完成量子核心计算过程.量子核心计算结束后,返回计算结果.第6步,经典后处理.经典主程序继续运行,对量子内核的计算结果进行后处理.如果有必要,第3~6步可反复执行多次,从而产生足够好的计算结果.为了支持上述运行过程,青果硬件平台需包括1个经典主机、1个量子协处理器和1个可供主机和协处理器访问的共享内存.运行时系统是青果必不可少的软件环境,其地位类似于经典计算机的操作系统.它包含5个主要的部分:①用于配置运行环境的系统配置器;②向经典主程序提供的量子内核调用接口;③用于访问不同量子硬件的后端接口;④支持主程序和量子内核间的数据传递的参数转换器;⑤用于管理量子程序阶段并在各阶段触发相应行为(如量子编译和量子执行)的阶段管理器.关于青果框架的更多设计细节,感兴趣的读者可参考文献[24].

1.4节和1.5节已分别介绍了顶层量子算法和底层物理量子比特实现及其控制对量子-经典接口的需求.本文接下来采用一种自顶向下的方法,于第4~7节分别介绍面向NISQ技术的量子程序设计语言、量子编译器、量子软硬件接口和量子控制微体系结构在整个计算系统中的功能定位、关键技术或设计思路和已有的实现等.同时,在每节最后,我们将以1.4节中的IPE算法为例,介绍量子算法如何从高级程序设计语言描述一步步被转换为在硬件上可执行的表示以及其在硬件上的执行过程.

4 量子程序设计语言

程序设计语言位于量子计算系统层次结构中的第2层,其核心功能是提供灵活而高效的方式来描述量子算法,并在必要时允许用户描述算法在运行时的部分底层细节,从而实现量子应用的最优化执行.基于此定义,量子程序设计语言应该具备3个层次的特性.

1)完备的表达能力.所谓完备,是指语言通过对量子计算系统中可用的软硬件资源提供合适的抽象,从而向用户提供描述任意基于QRAM模型的量子算法的能力.具体而言,则包括:①完备的类型系统以描述可用的软硬件资源;②完备的基本操作集合以描述任意计算操作.量子程序设计语言不仅要支持量子类型与量子操作,还应支持经典类型与经典操作.需要注意的是,这种完备性并非必须由单个语言提供,也可以通过2种甚至多种程序设计语言协同配合以完成对量子-经典异构算法的描述.例如使用类似于OpenCL[65]的编程框架,可将量子算法表述为一个经典主机程序和若干量子内核函数的组合.经典主机程序使用经典程序设计语言(如Python,C++)编写,描述量子算法中所需的经典计算逻辑,并调用量子内核.量子内核负责描述可被量子硬件加速的特定计算任务.可使用嵌入在经典程序设计语言中的库如Qiskit[66],QPanda[67]等或独立的量子程序设计语言[23,68]如Quingo[24],Q#[69]编写.

2)高抽象层次语法与低级控制机制.由于NISQ技术的限制,量子程序设计语言在采用高抽象层次语法的同时,还需向用户提供对硬件进行低级控制的机制,例如,对量子操作采用的波形与操作发生的时序进行编程控制.现有的高级量子程序设计语言包括Scaffold[70],PyQuil[71],Cirq[72],ProjectQ[73],Q#[69],OpenQL[74],Quipper[75]与Quingo[24]等.其中,Scaffold,Q#与Quingo是独立的量子程序设计语言,而其他语言则嵌入在一门经典程序设计语言(如Python,C++,Haskell等)中,所以是嵌入式领域特定语言(embedded Domain-Specific Language,eDSL).eDSL的主要优势在于可以复用宿主语言的编译器与程序库.eDSL的不足之处在于需采用元编程(meta-programming)的方式构造量子线路或描述实时经典计算逻辑,该过程不直观、易出错,尤其是无法较好地支持实时的分支和循环等程序结构.不少高级量子程序设计语言(如Quingo,PyQuil)对低级控制机制开展了探索性的支持.

3)面向领域的特殊语法支持.量子程序设计语言本质上是一类领域特定语言,通常在语言层面提供了面向量子计算这一特定领域的语法工具.量子算法中存在若干常用编程模式,包括量子比特资源管理、并行量子操作、受控量子门(controlled gate)、量子门求逆(reversed gate)与反计算(uncomputation)等.现有的量子程序设计语言对上述编程模式有不同程度的支持,这些语法特性不仅可以简化算法的描述,减少编程错误,还可以辅助编译器执行代码分析与优化.

Fig.11 The classical host program of IPE algorithm图11 迭代相位估计(IPE)算法的经典主程序

Fig.12 The Quingo kernel program of IPE algorithm图12 IPE算法的Quingo内核程序

5 量子编译器

量子编译器[76]负责解析高级程序设计语言描述的量子程序,对量子程序进行与硬件无关或相关的优化过程,并生成量子硬件可执行的格式.

与面向冯·诺依曼体系结构的经典编译器相比,量子编译器有若干特别或不同之处.

1)量子编译器作为一款经典软件运行在经典处理器上,但生成运行在量子协处理器上的低级量子程序.因此量子编译天然地是一个交叉编译的过程.

2)量子编译的主要操作对象不同.经典编译器操作和优化的主要对象是数据.因此,在条件允许的情况下,经典编译器可采用诸如常量传播的方法来优化代码.但如第2节所述,量子计算是典型的存内计算,量子程序的主体是描述施加在量子比特上的量子操作序列.此外,由于量子状态是不可克隆的且量子比特中保存的信息对编译器不可见,因此量子编译器操作和优化的对象主要是量子操作而非量子比特中的数据.需说明的是,量子编译的优化过程高度依赖量子操作序列之间的等价性,在优化量子操作序列时难以使用如常量传播等经典优化技术.

3)面向NISQ技术的量子编译器需要考虑量子操作的时序.一方面,经典编译过程中,通常可假设数据能够在存储单元中保存无限长的时间,而量子编译器则必须始终应对NISQ量子比特相干时间非常短暂这个挑战.这导致量子编译器须通过量子比特的映射和调度、量子操作的调度等优化方法来尽可能缩短量子程序执行的绝对时长.另一方面,一些量子编译器会通过物理系统在不同的哈密顿量下演化的等价性来优化量子波形[77].这个过程中,量子操作的时序是一个高度相关的参量.

4)量子编译器需要考虑更多物理实现细节,比如物理系统所支持的通用量子门集合、量子比特间的连接拓扑结构、量子操作的时序等.这扩展了程序的优化空间,但也使得优化过程更具有挑战.

5)因为在NISQ时代量子比特数量少且相干时间短等特点,人们更愿意在量子编译上付出更多的努力对量子操作序列进行优化.量子编译优化的过程中,一个常见的做法是在每次物理实验之前重新编译量子程序,这使得许多经典输入数值从未知变为已知[23].在此基础上,量子编译器可以去除一些分支结构,进行经典数值的常量传播、循环展开等优化,最大限度挖掘优化的可能.这些优化有时被称为部分执行(partial execution)[78].

多数量子编译器的工作过程可以大致划分为2个阶段,如图13所示.首先,编译器前端解析量子程序并创建中间表示(intermediate representation,IR).然后,编译器后端施加与平台无关或相关的多种变换,包括门分解、逻辑综合、量子线路、量子比特的调度和映射等.最后,编译器输出量子硬件可执行的格式,多为量子汇编.编译器在保证逻辑正确的前提下,通过优化来减少所需的量子比特数和量子操作数量(特别是开销较大或错误率较高的门,如施加在Transmon上的两量子比特门[79]),从而减少所需的硬件资源、缩短量子程序执行时间并提高计算结果的保真度.

Fig.13 The workflow of quantum compilers图13 量子编译器的工作流程

中间表示是编译所依赖的数据结构.一般而言,后端每种变换的输入和输出都为中间表示.有的量子编译器直接将抽象语法树(abstract syntax tree,AST)作为中间表示[80],有的使用量子操作命令列表[81].另一种比较流行的中间表示方法是有向无环图(directed acyclic graph,DAG)[82].和传统编译器中使用的依赖关系图不同的是,量子编译DAG中某些门可以交换顺序,这是由量子计算的特点所决定的[77].DAG能够较好地表达量子线路,但在表达、分析和变换量子-经典混合代码上有一定的困难.因而这些编译器仅能处理固定的量子线路,其中不得包含分支、循环等经典控制结构(如图12中的if语句).为了适应量子-经典异构计算,人们尝试扩展经典编译器的中间表示,如使用Low-Level Virtual Machine(LLVM)[83]或Multi-Level IR(MLIR)[84],来表示量子程序[85-87].这方面的研究才刚刚开始,尚未出现广泛使用的标准.

后端是量子编译器的主体,往往要反复进行多种变换,其中常见的包括6类.

1)门分解.物理量子系统所支持的量子门操作种类和精度都比较有限.编译器需将用户程序中使用的其他量子门操作分解为系统支持的门操作.对于单量子比特门,已经有算法能够给出指定精度下最优的分解方法[88].对于多量子比特门,相关研究也取得了很大进展[89-90].门分解不仅使得各种量子算法可以运行在实际的物理平台上,还可能带来额外的优化空间.

2)逻辑综合.逻辑综合指的是使用特定的一组门的组合来实现用户指定的经典计算逻辑.由于量子计算为可逆计算,所以量子编译中涉及的主要是可逆逻辑综合[91-92].特别地,量子程序中常用的受控门有时需要使用逻辑综合的方式实现[79].

3)量子线路变换与化简.根据量子操作的特性,编译器可对量子线路进行变换和化简.例如,已知HH≡I,就可以去掉连续出现的2个H门而不会影响量子线路的执行结果.虽然这样直接优化的机会并不常见,但借助门分解和量子线路等价变换可以创造类似的优化条件.由于求解最优量子线路的复杂度为QMA完全(不低于NP完全)[93],现有的量子线路优化方法多基于启发式算法[94-95].

4)映射.量子线路中包含的逻辑量子比特需要映射到物理平台中.平台中物理比特数量有限,而且往往存在诸多约束,比如两量子比特门操作只能施加到一些特定的量子比特对.如果程序中的两量子比特门作用的量子比特没有被映射到可施加两量子比特门的物理量子比特上,编译器就不得不在量子线路中添加额外的操作,比如SWAP,将这2个比特移动到约束允许的位置[96].可见,这种情况引发的额外开销与映射量子比特的位置有关.因为求解最优映射为NP完全问题[97],所以现有的映射算法也多是启发式的[97-101].

5)调度.针对NISQ技术量子相干时间较短的问题,量子编译过程中会特别注意量子操作的时序调度.比如文献[82]中使用类似于尽可能迟(as late as possible,ALAP)算法调度量子线路中的门操作,减少了多个门操作的间隔时间,故而能提高程序的保真度.有的物理平台不允许同时向不同量子比特施加不同操作,那么编译器就需要据此对量子线路重新进行调度.

6)量子最优控制.量子最优控制算法通过物理系统在不同的哈密顿量下演化的等价性,试图寻找从当前量子状态变换到目标量子状态的最优演化路径.一个常用的方法是梯度下降方法,比如GRAPE(GRadient Ascent Pulse Engineering)算法[102],以提高程序运行的保真度.算法得到的结果是量子控制波形,而不是一般意义上的量子芯片指令[77].

值得说明的是,以上变换并非孤立存在.比如量子门的分解影响到线路的优化,调度与映射往往紧密相关.编译器需要从整体的角度优化用户程序,综合考虑物理平台在时间和空间上的约束,以输出较为理想的结果.

随着量子计算日益升温,量子编译器的研究也逐渐活跃起来.首先,几乎每种量子编程语言都有对应的编译器,比如Scaffold[70](ScaffCC[78]),Quil[103](QuilC[104]),Q#[69],Quipper[75],Quingo[24]等.其他编译器则包括Qiskit[66],ProjectQ[73],Cirq[72],SQIR[105],Strawberry Fields[106],staq[80],t|ket〉[107]等,它们编译的量子程序多数使用Python描述.

在图14中,我们借助微软QIR[86]风格的中间表示来说明图12中的编译过程.首先,第1行显示的是函数头部声明,基本和量子程序中的写法一致.第2行的标号表示一个基本块的开始.每个基本块中包含若干顺序执行的语句.第3行为局部变量%theta分配内存空间,并在第4行初始化为0.注意,中间表示一般采用静态单赋值(static single assignment,SSA)形式,即每个变量只允许在一条语句中被赋值,以便于后续的分析优化.因此在为%theta赋值时,要使用指针,而不能直接赋值.第5行和第6行调用函数@__quantum__qubit_allocate分配2个逻辑量子比特.

Fig.14 The IR of the code snippets of IPE algorithm图14 IPE算法代码片段的中间表示

然后,为了说明平台无关的优化,我们重点关注图12中第19~22行的翻译结果.图14第9行对应量子程序中的measure操作.其结果在第20行被用作分支语句br的条件.无论哪个分支被执行,在进入continue__2后,%ancilla一定处于|0〉态,而H|0〉≡Ry(π/2)|0〉,因此可以使用开销较小的Ry(π/2)门来替代第22行的H门,以提高程序的性能.

接下来,我们利用图12中26,27两行说明平台相关的优化.由于Transmon量子比特较少直接使用Rz门,所以编译器要将其转变为Rx和Ry门,依据的原理为Rz(θ)=Rx(π/2)Ry(θ)Rx(-π/2).由于H≡Ry(-π/2)Rx(π),所以H门分解得到的第1个操作Rx(π)可与Rz(θ)分解得到的最后一个操作Rx(π/2)合并为Rx(3π/2),也即Rx(-π/2).综上,源程序中的Rz与H两个门可以转换为图12第24~27行的4个量子门.

最后,@__quantum__qubit_release函数将2个量子比特释放.在本例中,编译器将%ancilla和%eigenstate这2个逻辑量子比特映射到编号为0和1的2个物理量子比特,因为它们支持两量子比特门.

6 量子软硬件接口

经量子编译器优化之后的量子程序,最终被转换成为量子软硬件接口(Q SW-HW Interface)定义的接口格式.量子软硬件接口向量子软件(如编译器等)提供一组灵活、易用的硬件编程接口,使量子程序可运行在量子硬件上.量子软硬件接口包含模拟信号的定义方式和量子指令集2部分.前者用于定义实现量子操作或量子线路的模拟信号.后者用于支持结构化的量子程序描述、以精确的时序触发模拟信号的产生以及实现基于测量结果的反馈控制等.

如1.5节所述,对超导量子比特的量子操作通过施加微波脉冲实现.一方面,由于不同的实验环境选择使用不同的电子设备,且各类电子设备可能使用不同的模拟信号数据格式,因此不同的实验环境使用的模拟信号数据格式不尽相同.另一方面,作用在基于不同技术的量子比特或相同技术但不同参数的量子比特上的量子操作所需的模拟控制信号细节不尽相同,如频率、幅度、相位等.这导致人们在交流使用的控制信号时,更多地在数学的层面,而不是直接基于模拟信号的格式进行描述.为了增加交流的效率,IBM于2018年提出OpenPulse,提供了一种模拟信号的定义格式[108].

与模拟信号的定义相比,使用指令来表示量子操作能够提供更抽象的量子计算语义与更精简的低层次量子程序描述.通过指令的执行实时地控制模拟信号的产生,还可以有效地减少量子软硬件间传递的数据量[60].随着量子程序规模的增长,这种方案更具有可扩展性.结合使用经典指令,量子二进制可支持结构化的量子程序描述和基于量子测量的反馈控制.这有助于提高量子二进制表达能力且减小二进制代码的体积.量子-经典异构系统中,经典处理器具备强大的经典计算能力.由于经典处理器与量子协处理器二者间的通信延迟较大,经典处理器可用于执行不要求实时性的经典计算任务.因此,量子指令集中包含的经典指令主要用于程序流的控制和寄存器的更新.

在量子控制系统尚未充分发展时,人们已启动了对量子汇编的研究.这些构成了后续量子指令集研究的基础.Nielsen和Chuang最早提出量子汇编(quantum assembly,QASM),其目标是提供量子线路的文本描述格式,用于所著教材《量子计算和量子信息》[26]中量子线路图的绘制.此后,Svore等人将QASM作为量子编译器使用的一种低级中间表示[76].在QASM的基础上,研究人员不断提出不同的量子汇编,如QASM-HL[78]、OpenQASM[109]、Quil[103]、带反馈的量子汇编(f-QASM)[110]、通用汇编(cQASM)[111]、可执行的量子汇编(eQASM)[112],从不同的维度增强了量子汇编的表达能力,包括结构化的量子程序描述[78,103,109,111-112]、基于量子测量结果的反馈控制[103,109-110,112]、量子-经典指令的混合执行[103,112]、单操作多量子比特执行[112]、精确的时序控制[112]、硬件可执行性[112]等.虽然历史上汇编语言作为二进制程序的可读化表示而出现,现有绝大部分量子汇编仅仅是量子程序的低层次表示,不能或难以在硬件上直接执行.eQASM是第1个可执行的量子汇编,它定义了1套简单的映射规则,可将汇编指令映射为可在QuMA微体系结构[60]上执行的二进制指令.同时,eQASM可支持全面的程序流控制、精确的时序控制等,可较好地描述绝大部分的量子算法和一系列常用量子实验[112-114].本文将以eQASM为例介绍量子程序的软硬件接口表示.

eQASM的设计面向量子-经典异构计算,eQASM仅用于描述发生在量子协处理器上的计算过程.eQASM程序由量子指令和辅助经典指令混合组成.量子指令分为3类:1)设置量子操作目标寄存器的指令(SMIS和SMIT);2)指定量子操作间的时间间隔的指令(QWAIT和QWAITR);3)基于超长指令字的量子操作指令(quantum bundle).关于eQASM的更多设计思路和技术细节可参考文献[112,115].

经量子编译器编译后,图12中的程序被翻译为一组波形,对应常用量子操作,如Rx,Ry和CZ等,以及一个量子指令程序.这里主要介绍量子指令程序.图12中的for循环可被翻译成图15所示的eQASM程序(1)代码4使用的是一个扩展版的eQASM,添加了对参数化的旋转操作、浮点寄存器和浮点指令的支持.(受限于文章篇幅,未显示受控黑盒对应的量子指令).eQASM为了支持单量子操作多量子比特执行,量子操作使用间接寻址,即量子操作会从量子操作目标寄存器(如第1行和第2行设置的s0和s1寄存器)中读取要操作的目标量子比特.图15中第13~19行实现ancilla量子比特的初始化.0号量子比特首先被测量(第13行),在测量操作开始600 ns,即30个周期后(假设每个周期20 ns),FMR指令将测量结果读取到通用寄存器r9中.若测量结果不为0,则在又40 ns之后通过2,RX s0,3.141592654操作(第18行)将量子比特翻转为|0〉态.该指令开始处的2表示该操作开始于前一条指令的2个周期之后.图12第32~38行利用基于测量结果的程序流控制,它们被翻译为图15第30~36行.需要注意的是,生成的eQASM代码中,f1的值(即theta)先被除以2(第32行),然后仅在测量结果为1时,f1被加上0.5.图15第40行更新循环计数器,当计数器仍然大于或等于0时,就跳转到循环头部重新开始(第41行).

Fig.15 The eQASM code of IPE algorithm图15 IPE算法的eQASM实现代码示例

7 量子控制微体系结构

量子控制微体系结构(microarchitecture)执行量子软硬件接口格式描述的量子程序,产生时序精确的模拟信号控制量子比特的状态更新,识别量子比特的测量结果,并完成经典寄存器的更新和程序流的控制.如果量子软硬件接口使用了量子指令,则量子控制微体系结构需将量子指令实时翻译为时序精确的控制信号.基于特定的量子比特实现技术(如超导量子比特),控制信号被转换为所需的模拟电磁脉冲,并通过量子-经典接口发送到量子芯片.量子-经典(quantum to classical)接口负责微体系结构中的数字信号与量子比特所需的模拟信号之间的转换.量子-经典接口与量子芯片(quantum chip)的设计取决于所使用的量子比特实现技术.

如1.5节所述,超导量子处理器的输入和输出信号都是复杂的模拟信号.对量子比特的操作(输入信号)是通过发送模拟脉冲来执行的,而量子比特的测量结果存在于量子处理器的输出模拟信号中.一种常用的产生量子控制脉冲的方法是使用AWG.在执行量子算法之前,需要将量子操作对应的脉冲校准并将每个脉冲的样本振幅值阵列上传至AWG的存储器中.持续时间为Td的脉冲需要存储器存储同相和正交分量的Ns=2·Td·Rs个样本,其中Rs是采样率,通常在1 GSample/s左右.样本垂直分辨率的典型值在10~16位之间.为了识别量子比特q的测量结果,通常使用模数转换器将包含了测量结果信息的模拟信号Va(t)数字化,并进行积分和阈值比较:

(8)

其中,Wq(t)和Tq分别是q的校准权重函数和阈值,一般由量子实验人员进行配置.Sq是积分结果,Mq是最终测量结果(0或1).

Fig.16 QuMA quantum control microarchitecture图16 QuMA系列量子控制微体系结构

回顾近20年来对超导量子比特使用的测量控制(测控)设备,我们认为已有的面向超导量子比特的测控系统大体可分为2代.第一代超导量子比特的控制系统主要由模拟设备构成,包括任意波形发生器和数据采集卡等.用户通过将所需产生的控制信号上传到AWG的内存决定AWG的模拟输出进而完成量子操作.数据采集卡将测量结果信号数字化之后,使用软件离线地或硬件实时地分析量子测量结果.这种控制系统的不足有2点:1)输出的波形需在量子应用执行前完全准备就绪,并在算法执行启动时开始输出.2)随着量子应用规模的增加,上传的波形数据量急剧增大,降低了量子应用的执行效率,这导致波形的输出难以动态调整.因此,这种测控系统难以实现基于量子比特的测量结果的反馈控制.这种控制模式在之前的工作中得到了广泛的应用,如文献[50,116-118].

针对2点不足,尤其是为了满足实验对反馈控制的需求,人们开始研究基于FPGA定制控制硬件[119-123],并逐步发展为基于指令集的量子控制系统[16,60,112,124-127].在这类控制系统中,基于FPGA的定制控制逻辑在运行过程中生成时序精确的控制信号,用于实时触发模拟控制信号的产生和测量结果的识别.我们将基于定制数字逻辑(尤其是使用指令集)的量子控制系统称为第2代量子控制系统.

第2代控制系统使用的指令集一般缺少明确的量子计算语义.这些指令语义在较低的硬件层次上,如将在内存某地址中保存若干数量的样本在特定周期之后开始转换成模拟波形输出,如APS2系统中的WAVEFORM指令[124].但也有部分第2代量子控制系统使用的指令集可具备明确的量子计算语义,如可支持eQASM指令集的QuMA微体系结构.本节将以QuMA为例,说明量子指令在控制微体系结构上的运行过程.关于QuMA的更多实现细节,请参考文献[60,112].

如图16所示,QuMA微体系结构由经典流水线和量子流水线组成.经典流水线从指令存储器中逐条获取并处理指令.所有辅助经典指令都在经典流水线内完成执行,执行时主要完成经典寄存器的更新和程序流的控制.量子指令取出之后被转发到量子流水线进行处理.量子流水线主要实现3部分的功能:

1)译码、寻址.在获得一条量子指令后,量子流水线需识别该指令对应的操作是时序控制、量子操作或配置量子操作目标寄存器.如果是量子操作,则需要读取量子操作的目标量子比特.

2)时序控制.量子操作需要以精确的时序施加在量子比特上.时序控制单元用于决定量子操作的发射时间.

3)模拟数字信号间的转换.量子流水线发射出来的是数字控制信号.这些控制信号需要实时地被转换成模拟脉冲信号,实现对量子比特的控制.如果对应的量子操作是测量,则还需要触发对应的硬件开始识别量子比特测量的结果.

QuMA微体系结构的存储器至少包含指令存储器、波形存储器和数据存储器3部分.指令存储器用来装载量子编译器生成的原程序的二进制格式指令.波形存储器用于存储对应于量子操作的波形信息.数据存储器保存量子协处理器运行所需的初始化数据及运行结果.

需要注意的是,经典微体系结构关注的是数据流的移动,而量子控制微体系结构关注的则是如何生成量子操作流.前者操作的是数据,后者操作的是量子操作.这与第2节中的讨论是一致的.

我们以图15为例说明一个量子程序在QuMA微体系结构上的执行过程.为了在硬件上执行量子程序,用户通过1台经典计算机(一般称为上位机)将生成的量子指令程序和波形分别上传到指令存储器和波形存储器中,并触发QuMA开始运行.QuMA启动执行之后,经典流水线一条一条地从指令存储器中读取指令.经典指令在经典流水线中完成执行,并在执行过程中更新经典寄存器、读取数据存储器和控制程序流(即更新程序计数器).量子指令被经典流水线转发给量子流水线进行处理.在量子指令译码后,用于更新量子操作目标寄存器的指令在寻址阶段完成执行.时序控制指令被发送到时序控制单元,其效果是为下1条量子操作指令预约触发时间.如QWAIT 30会给下1条量子操作预约指令执行的开始时刻,该时刻与上1个被指定的时刻间隔30个周期.量子操作指令在译码之后,通过寻址单元获得待操作的量子比特,并指导地址解码单元(如译码器)控制该量子操作进入对应的任意波形发生器或测量结果识别单元中.时序控制单元指定量子操作的触发时刻.之后,量子操作会以数字触发信号的格式在目标时刻被发射给AWG或测量识别模块,触发产生对应的模拟脉冲信号施加在量子比特上控制量子状态的翻转,或启动测量结果的识别.测量结果识别单元识别量子比特的测量结果之后,会自动将该结果返回给经典流水线,供后续指令的处理.

8 挑 战

量子计算仍然处于高速发展的阶段,量子系统的不同层次仍然面临着诸多挑战.本节依次简要讨论量子程序设计语言、量子编译器、量子软硬件接口和量子控制微体系结构等层次面临的相关挑战.

8.1 量子程序设计语言

如引言中所述,NISQ量子算法有2个主要特点:1)量子-经典异构计算;2)从应用层对硬件进行低级控制.现有的量子程序设计语言对上述2个特点的支持均存在不足.

在对量子-经典异构算法的支持上,主要问题有2个:1)对程序流控制结构的忽视,导致语言只能描述单一量子线路,如Cirq[72]语言.对于Q#,Quingo等独立语言,在语言层面增加对流控结构的支持是比较直观的,而对于基于经典语言的eDSL来说,不得不采用元编程的方式向程序中显式地插入流控结构,这会使得流控的描述很不直观,降低算法结构的清晰程度以及代码的可读性.2)难以实现包括基于测量结果的反馈控制在内的量子-经典计算实时在线交互,(例如图12中19~21行与30~34行).导致这一问题的根本原因是在语言层面没有清晰地界定离线与在线这2种经典-量子计算交互方式,对于这一挑战,文献[24]开展了一些有意义的探索.

在低级控制机制的支持方面,面临的主要挑战是如何在高级语言中实现与硬件相关的低级操作,同时对高级语言可移植性不产生显著影响.当前,Qiskit,PyQuil与Quingo分别以不同的方式对时序控制进行了支持,但在时序描述的灵活性与通用性方面存在较大的差异.在量子操作波形的描述方面,IBM提出的OpenPulse[108]试图提供一种解决方案,但OpenPulse是一种低抽象层次的描述工具,当前还不存在任何一种高级量子语言做出这方面的尝试,因此仍是一个开放性的问题.

8.2 量子中间表示

量子编译器使用的中间表示直接影响到量子编译器的能力边界,以及优化遍的实现难易程度.因此,人们在设计IR时,一方面使得编译器方便优化量子程序外,另一方面则力求使其表达能力尽可能完备.现有的量子中间表示主要关注如何表达量子线路、量子线路中使用的二进制控制门(binary-controlled gate)以及量子-经典指令的混合执行等.

除量子-经典异构算法外,量子实验也是一大类重要的NISQ应用.而在这些实验中,大多需要显示地调整量子操作的时序及使用到的波形.高级量子程序设计语言在控制量子实验时可提供极高的灵活性,表现出极大的潜力,如在PycQED[128]量子测控软件环境中使用的OpenQL语言[74].这些实验要求量子编译器能够表达并操作量子操作的低层次特性,如时序及使用的波形等.另一方面,已有研究将量子最优控制引入量子编译优化的流程之中,可提高量子程序执行结果的保真度[77].但现有量子中间表示无法表达量子操作的时序及使用的波形等.如何设计量子编译器的中间表示,以支持量子-经典异构计算并能够表达量子操作的时序和使用的波形,仍然是一个开放的问题.

8.3 量子软硬件接口

指令集体系结构是经典计算机软硬件间的接口,它承接了2方面的职能.1)它是硬件的编程接口.经典计算机的软件可通过不同的指令组合充分利用经典计算机提供的计算能力.2)它提供了经典程序在低层次描述上的可移植性.针对特定体系结构生成的二进制程序可运行在支持同一体系结构的不同硬件实现上,如基于x86_64指令集的程序可运行在如Intel Core系列和AMD Ryzen系列等不同的处理器上.

但在量子计算领域,硬件编程接口和低级描述层面的可移植性这2个功能被分开在不同的层次上.如第7节所述,现有的硬件编程接口一般通过波形和定制指令集构成.虽然eQASM具备明确的量子计算语义,但更多的硬件控制系统所使用的指令集并不具备相关支持,如BBN公司和IBM公司使用的控制系统[16,124].

为了提供量子程序的可移植的低层次描述,人们对量子汇编开展了大量的研究.越来越多的量子汇编语言(如QASM-HL,OpenQASM,Quil,cQASM)在其规范中引入了函数调用、循环等高级语言特性,这离硬件接口这个目标渐行渐远.

硬件编程接口和低级描述层面的可移植性这2种功能的分离,一方面使得具体的量子系统需要额外定制一套低层次编译器或翻译软件将量子汇编翻译为控制硬件可执行的格式.这在工程实现上引入了额外的工作量,增加量子系统维护人员的负担.另一方面,这种分离也导致量子计算硬件系统无法形成统一的接口标准.未遵循统一标准开发的不同量子控制硬件系统在功能上可能不尽相同,低层次的量子汇编程序难以保证在不同硬件上的可执行性.例如,虽然Quil支持实时经典操作,但现有许多量子控制硬件系统无法完全支持Quil描述的带经典逻辑的量子程序.

如何实现硬件编程接口和可移植的程序低层次描述的统一,是一个尚未解决的问题.这对于NISQ时代实现不同量子计算系统的联合发展具有实际的工程意义.

8.4 与历史无关的量子操作波形产生

量子软硬件接口使用指令触发量子操作对应的波形的一个隐含前提是,量子操作的脉冲波形在每次触发时是确定的.如多次施加Rx(π)门在一个Transmon量子比特上,可以固定地使用图6左侧所示波形.然而,这个假设对于不同类型的量子比特或不同类型的量子操作而言未必始终成立.如在Transmon量子比特上施加CZ操作时,一般需要在通量偏置线上短暂地施加一个直流方波信号.该信号从任意波形发生器产生至到达量子芯片的Pf端口,一般会经过一个低通滤波器.该滤波器不仅会改变信号的形状,还会产生一个长拖尾.为了抵消信号形变和之前的信号产生的长拖尾的影响,现有的实验中一般会利用软件提前对信号进行预处理,并使用AWG输出预处理的信号,使得最终到达Pf端口的信号是一个方波信号.这导致AWG为每个CZ操作预存的波形是不一样的,从而使得基于测量的实时反馈控制难以实现.

这构成了基于指令集的量子控制系统所面临的巨大挑战.为了解决这个问题,研究人员开始研究相关技术使得静态上传到任意波形发生器中的波形是固定的.相关研究主要包含2种方法:1)AWG在输出波形之前,利用无限响应滤波器进行实时的波形预处理,使得量子比特所见波形为预期波形.目前瑞士苏黎世仪器公司生产的高密度任意波形发生器(HDAWG)已实现了该功能.2)使用新型控制波形,使该波形经过滤波器之后可同样地更新量子比特状态,但不会产生长拖尾效应[129].目前2种方法在小规模的量子芯片得到了验证.前者在一个波形500 ns之后仍然会产生拖尾,而后者生成的受控相位门的保真度仅可达99.1%[129].能够生成与历史无关的量子控制波形是实现基于指令集并支持基于测量结果反馈控制的控制系统的必要条件.如何实现与历史无关的波形产生是量子控制体系结构面临的一个巨大挑战.

8.5 分布式量子控制微体系结构

现有的量子控制微体系结构中的数字处理器、AWG和测量识别模块一般通过定制FPGA实现.受限于FPGA片上存储大小、输入输出管脚数量、指令执行过程中的量子操作发射速率[112]等因素,实验中观察到平均每块FPGA可控制的量子比特数量小于10.已有的量子系统可集成60多个量子比特[10],且NISQ系统有望在几年内集成几百乃至上千个固态量子比特.因此,使用分布式的量子控制系统是实现NISQ系统控制的不二选择.分布式的量子控制系统中,很可能需要在多个微处理器内同时执行多个二进制,协作完成对大量量子比特的控制.分布式的量子控制系统需要将同一个量子应用拆分为多个二进制程序,每个二进制程序用于操作一组量子比特.由于量子算法允许任意量子比特之间的反馈控制,反馈控制不仅需要在控制系统的不同设备之间进行传递信息(主要是测量结果),还需要实现多个指令流间的周期级同步.如何将一个量子应用拆分为多个二进制程序,支持任意量子比特间的任意反馈并保证指令流之间周期级的同步,仍然是一个有待解决的问题.

9 结 论

随着迈入含噪中尺度量子技术时代,量子软件与量子硬件对接并支持量子-经典异构计算的需求日益明显.通过对比量子计算与经典计算的异同,我们发现量子计算是典型的存内计算.

由于未知的量子状态不可克隆,量子计算在程序设计语言、编译、体系结构等方面比经典计算更加关注对量子操作——而非数据——的描述、优化和产生.这使得量子计算机的系统结构设计未必需要基于冯·诺依曼体系结构.从工程实现的视角,本文介绍了量子-经典异构计算的宏观系统层次结构,讨论了如何组织和管理量子、经典软硬件资源,以支持量子-经典异构计算.本文讨论了量子程序设计语言、量子编译器、量子软硬件接口和量子控制微体系结构的功能定位、关键技术或设计思路和已有的实现,并以IPE算法为例介绍了一个量子计算算法从高级程序设计语言描述到硬件执行的整体流程.本文讨论了量子程序设计语言、量子编译器、量子软硬件接口和量子控制微体系结构等层次在支持量子-经典异构计算、时序控制、量子操作波形控制等方面面临的挑战.针对量子计算系统中的不同层次,本文在相应的章节提供了若干参考文献,以帮助有兴趣的读者深入了解对应领域.我们希望本文可以促进人们对NISQ时代下量子计算系统整体结构的理解,并激发更多相关研究.

致谢作者感谢朱晓波教授提供的超导量子比特的扫描电镜照片(图5).

猜你喜欢

体系结构波形指令
正面碰撞车身加速度对乘员腿部损伤的影响
基于时域波形掩护的间歇采样干扰对抗研究
基于思维导图的化学知识体系结构构建
软件通信体系结构(SCA)理念下的无线通信系统探究
基于抽象汇编指令的恶意软件家族分类方法
基于PPP工程采购模式的工程项目合同体系结构研究
《单一形状固定循环指令G90车外圆仿真》教案设计
通用6T系列变速器离合器鼓失效的解决方案
新机研制中总装装配指令策划研究
认知无线网络中的重点技术和研究