传统计算机硬件的计算单元与控制单元一样,都是数字电路,能够轻易集成在一块处理器上;传统软件输出的二进制代码则可以直接在处理器上运行。量子计算机与此不同,其计算单元是量子比特,而控制媒介是模拟信号,通常需要由独立于量子芯片的控制单元产生。额外的量子控制架构,作为量子软件与量子硬件之间的桥梁,构成了量子计算机与传统计算机在系统结构上最核心的区别之一。但在量子计算工程领域,以往量子软件与量子硬件的研究相对独立,这导致二者的设计及实现难以有机地联接在一起。
去年 8 月,荷兰代尔夫特理工大学博士生付祥及其所在团队提出了一种针对超导量子计算机的控制微体系结构,首次有机地连接了量子软件和量子硬件,并使传统处理器的设计技术能够为量子控制处理器所用(MICRO 2017 最佳论文奖)。
针对现有量子汇编语言信息密度低、无法在量子硬件上直接执行、难以支持量子程序流控制(如反馈控制)等问题,近日,该团队又开创性地提出了一种可执行的量子计算机指令集架构 eQASM,旨在为量子软件提供一个通用灵活的硬件抽象,实现量子计算机从软件到硬件的完整可编程性。该论文已于近日被计算机体系结构顶会 HPCA 2019 接收。
研究团队表示,希望 eQASM 能够像 RISC-V 指令集(一款传统计算机领域十分流行的开源指令集)一样,成为量子计算领域可供业界、学界自由使用的开源指令集。
从量子控制微体系结构出发的指令集架构
以往量子计算工程方面的研究主要集中在两端上:顶层的软件系统(如算法设计、语言设计、编译器、优化、低阶汇编语言等);和底层的物理系统实现(如超导、半导体、光子等不同的量子比特的实现、量子芯片结构的设计、量子比特的具体控制等)。由于这两个方向的发展都还很初级,二者相对独立,彼此之间的互动有限。这导致了量子软件与量子硬件之间的鸿沟:即量子软件的输出无法在量子硬件上直接执行,而需要额外的中间翻译步骤来将二者联系起来。
具体做法是,量子软件先输出低阶的量子汇编程序,然后额外的中间层软件将汇编程序转换为多个数字化表示的波形。这些波形包含了所需的全部量子操作。将这些波形上传到任意波形发生器之后,任意波形发生器通过数模转换产生出这些模拟波形并打到量子比特上,从而实现量子操作。
但这种方式有三个主要弊端:
模拟设备开销很大,扩展性较差;
系统的配置时间长,降低了量子比特的使用效率;
量子软件提供的灵活的编程能力无法被硬件支持。
针对这些问题,去年 8 月,荷兰代尔夫特理工大学从计算机工程的角度出发,提出了一个通用可编程的量子计算机的全系统层次的结构方案(如图+1 所示),以及一种针对超导量子计算机的控制微体系结构 QuMA(对应图+1 绿色部分)。QuMA 首次有机地连接了量子软件和量子硬件,使得传统计算机处理器的设计技术能够为量子控制处理器所用。
图+1:量子计算系统层次概览(X. Fu et al. MICRO-50, 2017)
经典计算机软件程序在用高级编程语言(如 C++)描述之后,会被编译器(如 GCC)翻译为一组指令集(如 x86)中的指令,最后被相应的处理器(如 Intel 处理器)执行。在这个过程中,指令集作为软件与硬件之间的接口存在,其地位至关重要。
基于 QuMA 的系统与此类似,量子编译器(如 OpenQL)可以编译量子程序产生该团队提出的量子微指令集 QuMIS 中的指令,并在量子控制微体系结构 QuMA 上执行,最后灵活地控制量子比特的操作。
由于无法实现基于对量子比特测量结果的反馈控制、与具体硬件耦合过于紧密等问题,量子微指令集 QuMIS 无法实现完整的量子程序流控制,不是一个合格的量子计算指令集体系结构(quantum instruction set architecture, QISA,对应图+1 黄色部分),从而无法像经典计算机中的 x86 等指令集一样,成为量子计算机软硬件之间的通用接口。
但现有低层次量子编程语言如 QASM、QASM-HL、Quil、OpenQASM、f-QASM 等,它们的目标是提供在数学上等效于量子线路模型的表达能力,却较少地考虑了在硬件上的执行能力。这导致某些代码在语法上可能是正确的,但在硬件上却不可执行。同时,量子程序不仅描述量子状态的演变,同等重要的是,它还描述了程序流的控制。
即使低阶汇编提供了程序流的控制能力,但国内外现有的量子云平台的硬件,都不具执行具有量子程序流控制的代码的能力。如 IBM 的 Quantum Experience 和 Rigetti 的 Forest 硬件,都还无法实现量子程序流的控制。
其次,由于有噪声的中等规模量子(Noisy Intermediate-Scale Quantum, NISQ)设备对环境变化敏感,用于校准量子位和量子操作的实验需要周期性地执行。这些实验通常占据了量子比特使用时间的很高比例。这些实验的例子包括如测量量子比特的弛豫时间(T_1)和校准量子操作的波形的参数(幅度、相位、频率等)等。它们需要使用未经校准或不常见的量子操作,并明确地改变操作的时序。现有的量子汇编语言主要基于已经校准好的操作,因此描述能力高度受限甚至不能描述很多各种量子实验。
再之,因为能够表达的硬件特性非常有限,量子编译器很难通过在满足约束的同时利用可能的硬件特性在各个方面上进行彻底的优化。这一事实在一定程度上限制了量子软硬件的协同设计。
针对这些问题,基于广泛使用的量子汇编语言 QASM,代尔夫特研究团队再次开创性地提出了一种可执行的量子计算指令集 eQASM (executable QASM)。eQASM 定义了一个明确可行的经典与量子相结合的异构编程模型,不仅可以描述量子算法,还可以描述许多常用的量子校准实验,可大幅提升对量子比特的可操作性及量子比特的使用效率。
作为软件输出,eQASM 可由量子编译器生成,来描述对应的量子程序;作为硬件输入,eQASM 可被量子控制微体系结构 QuMA_v2 支持,能直接在量子硬件上执行。eQASM 既包含量子指令,也包含辅助性的经典指令来支持复杂的量子程序流控制。与 IBM 的 OpenQASM 支持参数化的量子操作不一样,eQASM 支持离散的量子操作指令,这可有效地降低控制硬件的设计复杂度。
eQASM 是个开源的指令集,允许使用者可根据自己需求添加指令,但会由独立团队根据开发者需求维持该指令集的一个标准。该研究团队目前正在开发支持 eQASM 的开源体系结构模拟器及相关工具链,助力开发者自由开发用于控制特定的量子芯片的量子控制微体系结构。
相关论文:eQASM: An Executable Quantum Instruction Set Architecture
论文地址:https://arxiv.org/abs/1808.02449
本论文的主要贡献如下:
全面的量子程序流控制:eQASM 提出了两类反馈控制以及用于实现这些反馈的微体系结构机制:简单但快速的快速条件执行和用户可任意定义的全面反馈控制。在这个基础上,eQASM 可支持全面的量子程序流控制,包括顺序、选择分支、循环、递归等。
灵活的实现:eQASM 是一种 QISA 框架,其定义侧重于汇编语法以及将汇编语言映射成二进制语言的基本规则。它需要针对特定平台自定义二进制格式(这个过程被称为实例化),这有助于 eQASM 高效地控制不同的物理硬件,保证它的实用性。
编译时可配置的量子操作:经典指令集能够支持的操作一般是在设计之初就定义好的,与之不同,eQASM 允许编译器根据应用程序的需要选择所需的量子运算,这为基于编译器的优化留下了充足的空间。
eQASM 概览
作者认为,与 GPU 或 FPGA 类似,通过异构架构来整合量子计算与经典计算是一条可行之路。在量子-经典异构体系结构中,量子部分可作为协处理器,来加速经典处理器难以处理的特定任务。下面将介绍 eQASM 的编程和编译模型、eQASM 的设计原则、体系结构状态和指令的概况。
编程及编译模型
OpenCL 是一种传统异构并行计算的开放式行业标准,这被用作了定义 eQASM 的基础。图 1 展示了 eQASM 的编程和编译模型。
图 1:异构式量子编程和编译模型
一个量子-经典混合程序包含一个主程序以及一个或多个量子核(quantum kernel),这些量子核可加速计算中的特定部分。主程序使用 Python 或 C++ 等经典编程语言描述,量子核使用 Scaffold 或 Q|SI> 等量子编程语言描述。混合编译基础架构会使用 GCC 等传统编译器将主程序编译成传统指令集代码,之后再由主 CPU 执行。
OpenQL 等量子编译器则会以两个步骤编译量子核。第一步,量子核会被编译成 QASM 或一种在数学上等效于线路模型的格式。这种格式与硬件无关,而且可以移植到不同的量子硬件平台上。第二步会考虑大部分硬件限制,编译器会在这一步执行量子比特的调度及低层次的优化。其输出是由 eQASM 指令构成的量子代码。这种量子代码既包含量子指令,也包含用于支持包括反馈在内的量子程序流控制的辅助性经典指令。在主 CPU 将量子代码加载进量子处理器之后,量子代码就可直接执行了。
设计原则
eQASM 的设计重点是提供在真实硬件上可执行的全面的量子程序表达能力。它应该要能描述不同量子技术的量子应用,而不受限于特定的控制设备。在 NISQ 时代,量子校准实验通常会占据相当大比例的量子比特使用时间。eQASM 也有望助益校准量子比特和量子运算所需的实验。eQASM 的设计遵循五个主要原则:
eQASM 应该包含经典指令,以支持运行时反馈等量子程序流控制。
eQASM 应该包含可明确指定量子操作时序的明确方法。
低层面的硬件信息应该被尽可能多地从 eQASM 汇编语言中抽离,以避免 eQASM 受限于特定的硬件实现。
量子指令编码的信息密度应该很高,可以采用如经典架构中单指令多数据(SIMD)和超长指令字(VLIW)等方法。
通过配置,eQASM 允许使用不同的量子指令,从而支持不同的量子实验及激进的编译器优化技术(比如量子最优控制)。
指令概览
量子技术发展迅猛,谁也不知道哪种量子技术会造就未来的量子计算机。为避免 eQASM 的格式受限于特定量子技术实现,eQASM 的定义侧重于汇编层面以及将汇编代码映射二进制指令的基本规则。二进制格式在 eQASM 实例化阶段定义,可针对具体的控制电路设置和量子芯片定义。这在保证了 eQASM 汇编代码的表达能力的同时,也给(微)体系结构设计师留下了相当大的自由度,让他们可以根据微架构的实用性和性能进行设计。
eQASM 程序由混合的量子指令和辅助性的经典指令组成。表 1 给出了 eQASM 指令的概览。因为主 CPU 可以提供经典计算能力,因此这里的辅助性经典指令都是用于支持量子指令执行的简单指令,不包含复杂指令(比如浮点指令)。
表 1:eQASM 指令概览
eQASM 代码示例
AllXY 实验是一个用于检验量子操作是否准确的常用实验。下图显示了实现 AllXY 实验的 eQASM 代码的一部分。这段代码中显示了两种不同的对量子操作的时序的描述方式:即通过显式的 QWAIT 指令(第 5 行与第 9 行),或隐式的前置等待时间(第 6 至 8 行)。这两种方式规定的是前后两个操作的起始时间差。假定每个单量子比特门的时间为 1 个周期(20 ns),那么在第 6 行的 Y 门完成之后,第 7 行的两个量子门 X90 与 X 会紧跟着同时执行。在第二个周期结束之后,第 8 行的测量操作开始执行。用这种方式可以准确地描述了量子门的时序、并行性等。据团队表示,将量子操作的时序显式地纳入量子汇编语言是 eQASM 的特点之一,这使得 eQASM 能够高效地支持量子计算实验与算法优化对时序的控制需求。
图 3:描述 AllXY 实现的 eQASM 代码的一部分
下面的代码则显示了 eQASM 的反馈控制能力。在这段代码中,首先测量量子比特 Q1(第 4 行),在等待 30 个周期(第 5 行,一个周期 20ns)之后,经典指令获得测量结果,并根据测量结果选择后续程序分支(第 6 至 8 行):如果对 Q1 的测量结果是 0,那么对量子比特 Q0 执行一个 X 操作(第 10、11 行),否则对量子比特 0 执行一个 Y 操作(第 13 行)。基于量子指令与经典指令的混编,eQASM 提供了对程序流的控制能力。在硬件上可实现的量子程序流控制,这构成了 eQASM 与其他现有量子汇编语言相比的突出之处。
图 5:使用辅助性经典指令实现基于量子比特测量结果的反馈控制
eQASM 实例及实验结果
eQASM 实例化
针对一个七量子比特的超导量子处理器,论文将 eQASM 实例化成一个 32 位的指令集,并通过使用第二代量子控制微体系结构 QuMA_v2(如图 9)对量子比特进行的控制。其硬件实现如图 10 所示。
图 9:支持针对七量子比特超导量子芯片实例化的 eQASM 的量子微体系结构
图 10:实现针对七量子比特超导量子处理器实例化 eQASM 的硬件结构。细线和粗线分别代表数字和模拟信号。
可行性验证
由于目标七量子比特量子芯片在写作之时仍处于测试中,论文使用了一个具有两个量子比特的超导量子芯片以验证 eQASM 设计。在验证过程中,量子芯片的结构(如比特的数量及其互连结构)通过一个配置文件进行描述。实验中,量子编译器 OpenQL 根据这个配置文件产生全部所需的 eQASM 代码及底层硬件配置。文章表示,使用 eQASM 控制量子实验显著提高了量子实验的效率,拓宽了量子汇编的应用范围。
文章首先利用图 3 中的代码执行了一个两比特 AllXY 实验,实验结果如图 11。该实验中,测量结果(蓝点)与预期结果(红线)的吻合表明 eQASM 能够实现对量子操作的精确控制。
图 11:两量子比特 AllXY 结果
为了评估操作时序对量子算法保真度的影响,论文执行了对单量子比特的随机化基准测试(single-qubit randomized benchmarking)。这种测试可在常用的的噪声模型下评估一组量子操作的平均错误率。实验过程中,通过使用 eQASM 的显示时序控制能力,连续的量子比特门的起始点之间被插入不同间隔时间(320、160、80、40 和 20 ns)。实验结果如图 12 所示。数据显示,量子操作之间的间隔越大,平均每个量子操作的错误率就越高。这不仅表明了量子操作的时序对最终计算结果的保真度有显著影响,更证明了为实现针对特定平台的优化(尤其是编译层面的优化),在 QISA 代码中显示规定量子操作的时序是必要的。
图 12:量子操作起始点之间不同的间隔时间对单量子比特随机化基准测试结果的影响。虚线标示了 10% 的错误率供参考。
多元化学术背景的科研团队
据了解,从去年该团队提出的量子计算控制微体系结构原型,到今年该论文中提出的可执行的量子指令集架构 eQASM,都是由多位分别具有不同背景的工程师与科学家合作完成。两篇文章中的合作者中,有三位编译器研究人员,两位体系结构工程师、两位高级 FPGA 工程师、两位电子电路设计工程师、两位系统软件开发工程师、两位物理博士和三位导师。
在做计算机工程的成员加入之间,以往的量子控制设备开发流程是,物理学家提出实际的物理控制需求,电子电路工程师设计实现所需的控制设备、FPGA 工程师针对需求开发固件。在做计算机工程的成员加入之后,团队分工就变成了:物理学家会提出实际的物理控制需求;编译器工程师提出软件输出需求;做体系结构的人构思软硬件之间的接口,在满足软件输出需求的同时,极大地优化硬件系统设计;电子电路工程师实现电子电路的设计;FPGA 工程师与体系结构工程师一起实现量子控制微体系结构;编译器工程师开发高级量子编程语言及量子编译器。这样,研究团队可以构建从量子程序语言到量子编译器、量子指令集体系结构、量子控制微体系结构、模拟设备、量子芯片的全套系统。
团队成员科研背景的多元化是这两项工作的一大特点。这种形式的科研团队配置,在量子计算这个需要多学科知识背景融合的领域,很好地促进了不同视角理论与经验的碰撞及融合,也很大程度上保证了体系架构设计思想和逻辑结构的可行性及完备性。以图 3 为例,在量子汇编语言中显式地支持量子操作的时序控制,这算是计算机工程服务于物理实验的一次尝试。
这两项工作均由两篇文章的第一作者付祥领导团队合作完成。付祥是代尔夫特理工大学计算机工程实验室与物理系量子计算实验室联合培养的博士生,也是该团队唯一的华人。其导师是来自计算机工程实验室(现独立为量子计算体系结构实验室)的 Koen Bertels 教授与物理系量子计算实验室的 Leonardo DiCarlo 教授。
提到后续工作,研究团队表示:一方面会使用 eQASM 来控制其它物理体系的量子处理器,包括量子芯片拓扑结构不同的超导量子处理器以及自旋量子点、钻石色心等完全不同的量子硬件;另一方面,也更为重要是,团队会继续开发 eQASM 相关的工具链,使得更多人能够使用 eQASM。