《量子信息網絡產業聯盟:2024量子匯編語言和量子中間表示發展白皮書(78頁).pdf》由會員分享,可在線閱讀,更多相關《量子信息網絡產業聯盟:2024量子匯編語言和量子中間表示發展白皮書(78頁).pdf(78頁珍藏版)》請在三個皮匠報告上搜索。
1、量子匯編語言和量子中間表示發展白皮書 1 一、量子計算與量子編程概述(一一)量子計算量子計算 隨著社會生產力的發展,人們對高性能計算提出了更高的要求。面對摩爾定律的逐漸失效,科學家和工程師正全力研究發展新的計算技術,推動算力發展。量子計算以量子比特為基本計算單元,利用量子疊加等原理實現并行計算,能在某些計算困難問題上提供指數級加速,是未來計算能力實現跨越式發展的重要方向。當前,量子計算正處于發展初期階段,超導、離子阱、中性原子、光量子、半導體等多種硬件處理器平臺并行發展,開放競爭,技術路線尚未收斂。隨著量子計算硬件平臺逐漸進入具有百位量子比特的中規模含噪聲量子(Noisy Intermedia
2、te-Scale Quantum,NISQ)處理器時代,基于NISQ樣機開展應用研究探索已成為產業界和行業用戶的共同目標。近年來,量子計算應用聚焦組合優化、量子模擬、量子人工智能等多類問題展開探索。量子組合優化通過利用量子算法在大量可能方案中更高效準確的找到最佳方案,具體可用于金融投資組合、金融衍生品定價、物流優化、旅行商問題等問題。量子模擬運用人工可控的量子系統模擬另外一個量子系統的性質和演化規律,應用范圍涵蓋基礎物理研究、生命科學、制藥、化工等多個領域。量子人工智能將量子計算與人工智能相結合,在處理大數據模型時具備潛在的加速優勢,有望在機器學習、自然語言處理、大數據分析等問題中實現應用價值
3、。量子應用在量子計算機上的執行需要借助特定的量子算法來實現。當前,實現量子算法的一種主要的方式是數字量子計算量子匯編語言和量子中間表示發展白皮書 2(Digital Quantum Computing),它與基于數字邏輯門的經典計算機類似,根據具體的量子芯片處理器底層架構,構建了一套通用量子邏輯門操作(簡稱為“量子門”)??梢宰C明,特定的量子門集合能夠滿足圖靈完備性,可以完成通用的量子計算任務。量子計算機在執行量子算法之后,返回的是量子態。為了獲得具體的量子態信息,我們還需要執行量子測量操作。根據量子力學基本原理,測量后的量子態會發生塌縮,單次測量會得到確定的狀態輸出。通過重復制備相同的量子態
4、,進行多次測量,可以統計出不同狀態的概率,獲得更具體的量子態信息。量子計算機的輸出結果通常是不同量子態的概率。常見的量子門和量子測量門圖標如圖 1 所示1?;诹孔娱T和量子測量門的集合,按照特定的順序進行編排,可以構建出量子線路,實現一些常見的通用量子算法,如 Deutsch算法、Shor算法和Grover算法等。在NISQ階段,量子計算機端到端解決問題的能力還較弱。在量子測量得到結果之后,利用經典計算機根據測量結果更新量子計算機所需要運行的量子線路,然后再繼續利用量子計算機得到量子測量結果。這種利用經典計算機來輔助量子計算機,進行迭代計算的 1 來源:量子信息網絡產業聯盟 圖 8 常見的量子
5、邏輯門和量子測量操作1 量子匯編語言和量子中間表示發展白皮書 3 模式叫做經典-量子混合計算,這類算法通常被稱為變分量子算法,可以應用到量子化學模擬、量子組合優化和量子機器學習等領域。量子計算機是實現量子計算應用的基石,其構建涉及量子硬件平臺、量子軟件、量子算法等多項必備要素,其中量子軟件包括應用開發軟件和量子計算編譯軟件兩大類。量子計算編譯軟件作為底層軟件,需要滿足量子計算的底層理論與算法邏輯,涵蓋量子匯編語言、量子中間表示等,特異性與專業性較強,目前處于設計開發與生態構建的早期階段,是國內外研究布局的重點。本文重點聚焦量子匯編語言和量子中間表示,調研當前量子編程的發展現狀,并探討未來的發展
6、方向。(二二)量子編程量子編程 量子計算機是一個綜合軟件和硬件的復雜系統,從量子應用到量子硬件的過程,簡單來說可以用下面的量子計算全棧系統圖來描述,如圖 2 所示2。從圖中可以看到,量子編程是處于量子算法和量子硬件的中間層,是將量子計算的應用成功在量子計算機上執行的承上啟下的一個重要部分。量子編程需要借助一些工具來實現,這個工具就是量子編程語言。參照量子編程語言在整個量子計算機全棧系統圖中所處的層次,可以將量子編程語言分為如下幾類:高級量子程序設計語言(High-level Quantum Programming Language)、量子中間表示(Quantum Intermediate Re
7、presentation,QIR)和 量 子 匯 編 語 言(Quantum 2 來源:量子信息網絡產業聯盟 量子匯編語言和量子中間表示發展白皮書 4 Assembly Language,QASM)。類比于經典編程語言,高級量子程序設計語言是一種面向用戶的程序語言,開發者通過調用預制的量子算法庫和自定義算法,從而可以方便的實現自己的量子應用。量子匯編語言則是更加貼近于量子硬件的編程語言,可以通過量子操作系統直接調用底層量子指令。在當前階段,量子編程語言和量子硬件仍然處在發展階段,人們可以直接通過高級量子程序設計語言來生成量子匯編語言,將量子匯編語言作為構建編譯器的中間表示。對于小規模的量子任務
8、,人們也可以直接根據量子算法需求直接用量子匯編語言來編寫程序,并且在量子硬件上執行。圖 9 量子計算系統全棧示意圖2 量子匯編語言和量子中間表示發展白皮書 5 量子中間表示也是將高級量子程序設計語言編譯成量子匯編語言的工具,它是一種特殊的數據結構,能夠方便的使用一些經典的編譯工具和自定義編譯優化方法,將量子程序編譯的更為高效。在編寫量子線路已經固定的、整個執行邏輯比較簡單的量子算法時,可能很難會需要用到特殊的量子中間表示來進行編譯。但是在涉及到復雜的量子算法,比如經典-量子混合算法時,使用量子中間表示構建的編譯器就可以更容易實現一些加速優化方法。比如在進行經典-量子混合算法時,可能會遇到迭代的
9、過程中,所有的量子門操作參數均為 0 的情況。這種情況下,所有的量子門操作等價于恒等操作(identity),量子線路的運行結果就是其初始的量子態。通常如果是直接使用量子匯編語言來編寫的量子算法,那么這種操作也會在量子計算機上運行。如果是用高級量子程序設計語言來編寫,并且使用量子中間表示來進行編譯、轉換和優化,那么在編譯優化的過程中可以方便的定義一些優化轉換的方法,使得這種不會產生任何實際效果的迭代結果可以直接得到,不需要使用量子計算機。并且與直接使用量子匯編語言作為中間表示進行的編譯相比,量子中間表示可以讓整個編譯過程更加高效,功能更加豐富?;诹孔又虚g表示的量子編譯器是運行復雜量子算法的必
10、由之路。自從量子計算機理念被提出來后,人們就開始了量子編程語言的設計。下表統計了部分量子編程語言,并區分了其在整個量子計算機系統中的層級。在后面的章節中,我們先簡要介紹高級量子程序設計語言,然后再詳細介紹本白皮書重點關注的,與量子硬件關系更為密切的量子匯編語言和量子中間表示。量子匯編語言和量子中間表示發展白皮書 6 表 1 量子編程語言概覽3 時間時間 量子編程語言量子編程語言 抽象層級抽象層級 研發單位研發單位 1998 QCL 低 維也納研究所(奧地利)2003 Q language 高 圖盧茲實驗室(法國)2014 ScaffCC 低 普林斯頓大學(美國)2016 QASM 低 洛斯阿拉
11、莫斯國家實驗室(美國)2016 ProjectQ 高 蘇黎世聯邦理工學院(瑞士)2016 Quil 高 Rigetti Computing(美國)2017 OpenQASM(2.0)低 IBM(美國)2017 eQASM 低 代爾夫特理工大學(荷蘭)2017 Qiskit 高 IBM(美國)2017 QPanda 高 本源量子(中國)2018 cQASM 低 代爾夫特理工大學(荷蘭)2018 Cirq 高 Google(美國)2018 XACC 低 橡樹嶺國家實驗室(美國)2018 QPanda 高 本源量子(中國)2019 QRunes 低 本源量子(中國)2020 QIR 低 QIR 聯盟
12、(美國)2020 Quingo 高 國防科技大學、華東師范大學(中國)2021 NetQASM 低 代爾夫特理工大學(荷蘭)2021 QCIS 低 中國科學技術大學(中國)2021 MindQuantum 高 MindSpore 開源組織(中國)2021 OpenQASM 3.0 低 IBM(美國)2022 isQ 低 弧光量子(中國)3 來源:量子信息網絡產業聯盟 量子匯編語言和量子中間表示發展白皮書 7 二、高級量子程序設計語言概述及分類(一一)概述概述 高級量子程序設計語言是專為設計和實現量子算法而創建的工具。隨著量子計算技術的發展,越來越多的高級量子程序設計語言正在被開發出來,以幫助研
13、究人員和開發者更好地利用量子計算機的潛力。在這些高級量子程序設計語言中,我們可以根據它們是否依賴于現有的經典編程語言來分為兩類:嵌入式量子程序設計語言和獨立式量子程序設計語言。嵌 入 式 量 子 程 序 設 計 語 言 是 一 種 嵌 入 式 領 域 特 定 語 言(embedded Domain-Specific Language,eDSL),它是基于現有經典編程語言(如 C+或 Python)構建的。這些語言通常作為庫或框架集成到宿主語言中,允許開發者使用熟悉的語法和工具來編寫量子程序。嵌入式量子程序設計語言可以輕松地與經典代碼交互,并利用經典編程生態系統的強大功能,例如編譯器、調試器和開
14、發環境等。此外,嵌入式量子程序設計語言還可以簡化經典-量子混合計算的編程任務 獨立式量子程序設計語言則是從零開始設計的高級量子程序設計語言,不依賴于任何現有的其他編程語言,其定位類似于經典編程語言中的 C+或 Python 等通用的編程語言。獨立式量子程序設計語言的目標是提供一個更直觀且與硬件無關的抽象層,以便專注于量子算法的設計和優化。由于它們獨立于任何特定的經典編程語言,因此獨立式量子程序設計語言可能需要開發者學習新的語法和編程量子匯編語言和量子中間表示發展白皮書 8 范式。然而,這種全新的設計也為開發者提供了更多自由度,能夠更好地表達量子計算特有的概念,比如疊加態、糾纏和測量等。無論是嵌
15、入式還是獨立式量子程序設計語言,它們都旨在降低量子計算的入門門檻,使更多的研究人員和開發者能夠參與到這個快速發展的領域中來。下面我們將針對部分嵌入式和獨立式量子程序設計語言進行更為深入的介紹。(二二)嵌入式量子程序設計語言嵌入式量子程序設計語言 典型的嵌入式量子程序設計語言包括 Qiskit、ProjectQ、MindSpore Quantum、QPanda等。下面將列舉幾類來介紹。1.Qiskit Qiskit4是由 IBM 公司開發的、基于 Python 的量子計算編程語言,主要用于在量子線路、操控脈沖、量子算法級別運作的量子計算機上。Qiskit 提供了豐富的工具用于創建和操控量子程序,
16、并支持把該程序下發到量子原型機上運行。它遵循通用量子計算的電路模式,可以運行在任何遵循該模式的量子計算設備上。2.ProjectQ ProjectQ5是由蘇黎世聯邦理工學院發起的一款用于量子計算的開源軟件架構。它提供了豐富的軟件工具,旨在幫助研究人員去發現新的量子算法,并通過測試、調試和運行來改進量子算法。值得一提的是,ProjectQ雖然也是基于 Python的 eDSL語言,但是其內置 4 https:/qiskit.org/5 https:/doi.org/10.22331/q-2018-01-31-49 量子匯編語言和量子中間表示發展白皮書 9 了一些較為高級但對于量子計算來說又十分直
17、觀的語法風格,這使得 ProjectQ的特定域編程的特點更加突出。3.MindSpore Quantum MindSpore Quantum6(簡 稱“MindQuantum”)是 基 于 昇 思MindSpore開源深度學習框架和HiQ量子計算云平臺開發的通用量子計算框架,支持多種量子神經網絡的訓練和推理。融合了 HiQ 團隊的高性能量子計算模擬器和昇思 MindSpore 高性能自動微分能力,MindQuantum 能夠高效處理量子機器學習、量子化學模擬和量子優化等問題,為廣大的科研人員、老師和學生提供快速設計和驗證量子機器學習算法的高效平臺。4.QPanda QPanda7是由本源量子發
18、布的開源量子計算編程框架,以 C+為宿主語言,提供基于 C+的庫 QPanda2 和基于 Python 的庫 pyqpanda兩種編程調用方式,經過幾年的更新和迭代,形成了比較完備的架構。在設計之初,QPanda 便以服務研究人員為出發點,以開放性、極簡性、異構性為設計原則,實現高性能仿真、多元化仿真為目標,并在此之上提供諸多實用便捷的工具。在上層應用方面,QPanda 提供了許多基本算法,有效的簡化了研究人員的開發時間,在底層運算上,提供了多種模擬后端,包括全振幅、部分振幅、單振幅、張量網絡、密度矩陣和稀疏態模擬等多種模擬后端,與此同時,QPanda支持調用集群、超算和真實量子芯片的計算資源
19、。QPanda將 6 https:/ 7 https:/ 量子匯編語言和量子中間表示發展白皮書 10 經典、量子操作相統一,支持經典量子混合編程,提供諸多有利于量子程序構建、編譯優化、運行、分析的實用工具,而且 QPanda 還支持 qif、qwhile 等控制流的量子程序設計方式。QPanda 擁有一個完開放的社區,完善的工具鏈,簡便的編程方式,期望成為通用的量子編程框架,為研究人員的使用提供了更加高效的方式。(三三)獨立式量子程序設計語言獨立式量子程序設計語言 獨立式量子程序設計語言往往會提供大量經典和量子數據類型、控制結構和高級能力。對應經典領域中,如 Python、C/C+等通用的高級
20、編程語言。典型的獨立式量子程序設計語言包括 QRunes、Quingo、isQ等。1.QRunes QRunes 是高級量子經典混合編程語言,提供了高級抽象、自動取消計算、比特重用等功能的實現,利用完備的類型系統和健全的語法語義,協調約束量子操作和經典操作。QRunes 采用運行時編譯,并且可拓展可重構。QRunes 編寫的程序可以被編譯成用戶指定的目標,該目標可以是任何編程接口或者量子匯編語言。在設計量子語言 QRunes 時,為了和其他量子語言或者軟件包進行區分,考慮了兩個問題:其一是量子編程環境應該滿足混合量子計算的需求;其二是量子代碼的可重用性。量子經典混合編程結合了量子計算機和經典計
21、算機的力量。例如量子控制流 Qif、Qwhile的實現和變分量子算法,這些場景要求量子語言不是只考慮量子電路的搭建,還要考慮在整個算法過程中是如何編譯的。在經典編程中,跨平臺語言在現在軟件工程中得到了廣泛的應用。對比到量子編程量子匯編語言和量子中間表示發展白皮書 11 中,QRunes 希望實現可重用或者可移植的量子程序,從而省略語言差異和實現細節,實現只包含量子算法邏輯的量子語言。QRunes 包含大量高級語言特性,擁有豐富的類型系,包括經典類型系統和量子類型系統。與其他量子高級語言相比,QRunes 在語言的高級抽象上進行了嘗試,把量子過程中確定過程的操作抽象成指令或表達式的形式,如+=、
22、-=操作,再由編譯器根據上下文編譯到對應后端的量子匯編語言上。QRunes 的這些高級抽象嘗試在對量子算法的設計和量子編程的傳播上有重大意義。QRunes 特有量子內存管理機制,其類似于經典操作中的運行時管理,通過取消臨時變量的計算來達到輔助比特的回收利用。在運行量子程序時,臨時變量與目標變量的糾纏會對測量結果產生影響,QRunes 研發能夠針對臨時變量進行自動取消計算,消除臨時變量對結果產生影響的優化技術。通過可行的自動取消計算實現的算法,研究量子資源管理技術。該算法要求在保留原本量子程序的計算操作的同時,能夠消除臨時變量對于結果的影響,并且不會對結果造成影響。對于能夠進行自動取消計算的臨時
23、變量,如果為每一個臨時變量都單獨分配一個量子比特會導致量子資源大量的被消耗,根據臨時變量的生命周期,在臨時變量完成自動取消計算優化后,此時臨時變量的作用比特為|0態。對該作用比特進行重新利用,使得一個比特可以保持多個臨時變量,達到節約資源的目的。2.Quingo 使用量子程序設計語言控制 NISQ硬件時,可能產生兩個需求:一是利用實時經典邏輯實現量子-經典異構計算,從而支持描述帶實量子匯編語言和量子中間表示發展白皮書 12 時測量反饋的量子算法,例如迭代相位估計算法;二是顯式地控制量子操作的時序甚至波形等底層信息,從而可以描述量子校準實驗。絕大部分高級量子程序設計語言無法同時滿足這兩點需求。當
24、涉及到基于量子比特測量結果的實時經典運算時,絕大部分高級量子程序設計語言要么無法描述實時經典邏輯(如 Qiskit 等),要么相應的描述復雜且不夠直觀(如 Pyquil等)。聚焦上述需求和已有高級量子程序設計語言的不足,國防科技大學 QUANTA 團隊、悉尼科技大學、華東師范大學等國內外團隊共同提出了 Quingo(青果)語言,設計了面向 NISQ 時代的 Quingo 量子編程框架,可同時支持描述量子算法和量子實驗。Quingo 語言相比于其他語言最核心的不同之處在于,Quingo 語言在高級語言設計上對量子-經典異構計算和量子實驗的強有力的支持。這兩個特性的體現和其背后的 Quingo 框
25、架是密不可分的。一定程度上可以說,Quingo 語言所蘊含的特點是 Quingo 框架的執行模型等諸多設計的表象,介紹Quingo語言實質上是揭示Quingo框架蘊含的內容。Quingo 框架包含四個組成部分,分別為量子程序、量子編譯器、量子經典相關硬件以及運行時系統。量子程序的執行模型決定了這些組件的組織方式和工作模式。綜合并總結以往的高級量子程序設計語言執行模型的演變可發現,伴隨著量子計算系統的成熟,執行模型大致可以分為 3類QRAM(Quantum Random Access Machine,量子 隨 機 存 取 機)模 型,受 限 的 量 子-經 典 異 構 計 算(HQCC,Hete
26、rogeneous Quantum-Classical Computation)模型以及改進的 HQCC量子匯編語言和量子中間表示發展白皮書 13 模型,如圖 3 所示8。QRAM 模型是在 1996 年被 Knill 提出,由于當時沒有成熟的量子計算物理系統,所以 QRAM模型(圖 3(a))忽略了對量子經典異構的體系結構考慮。而受限的 HQCC 模型,如圖 3(b)所示,在經典主機與量子比特層添加了專門用于調控量子比特的執行層,使得在經典主機端編譯過后的可執行量子程序通過執行層轉換為施加在量子比特上的波形。但受限的 HQCC 模型并沒有考慮量子協處理器等相關概念,也沒有考慮到基于測量的反饋
27、控制的算法需求。因此,參考 OpenCL 的增強的 HQCC 模型應運而生。在此執行模型下,量子協處理器端的量子控制硬件可以實時地處理與量子比特的交互邏輯,從而保證諸如相位估計算法等面向NISQ的量子算法成功運行。為了支持量子-經典異構計算,Quingo 框架采用了增強的 HQCC。因此 Quingo 框架的量子程序主要由經典程序設計語言編寫的主程序和由 Quingo 語言編寫的量子內核程序組合而成。量子內核程序負責描述圖 3(c)中量子協處理器上所執行的邏輯,通過量子編譯器、運行時系統以及相關硬件的配合,使得面向 NISQ的量子算法可以很好 8 來源:Quingo:A Programming
28、 Framework for Heterogeneous Quantum-Classical Computing with NISQ Features,https:/arxiv.org/abs/2009.01686 圖 10 高級量子程序設計語言的三種不同的執行模型8 量子匯編語言和量子中間表示發展白皮書 14 地完成執行。這也是 Quingo 語言不同于一些其他高級量子程序設計語言,可更好地支持面向量子-經典異構計算的原因。此外,在 Quingo 語言層面對底層量子操作的時序控制,除了在Quingo 語言層面向用戶提供基于時間自動機的時序控制接口之外,還需要整個 Quingo 框架的支持,確
29、保量子控制器可以準確地按照語言層面描述的時序規則,發射施加于量子比特的脈沖信號??偟膩碚f,Quingo 語言作為 Quingo 框架對外描述量子協處理器上行為的接口,其諸多語言上的特性本質上是 Quingo 框架所具備的能力的表象。借助 Quingo 框架的支持,Quingo 語言可以面向量子-經典異構計算模型,編寫面向 NISQ的量子算法并支持描述一部分常用的量子實驗過程。3.isQ isQ 是一款支持經典-量子混合編程的高級量子程序設計語言。在經典語法設計方面,isQ 支持多種經典變量類型,如整形,浮點型,布爾型等,在語法功能上,支持包括經典變量定義,四則運算,邏輯運算,位運算,函數定義及
30、調用,控制流等。在量子語法設計方面,isQ 引入量子類型,支持量子比特的定義及基本的酉門操作和測量操作,以及自定義酉門,自定義量子 oracle 等高級量子操作。此外,isQ 提供用以表示控制的修飾符,用戶可通過該修飾符定義在量子算法中常見的受控門。此外為方便量子變分算法,量子機器學習等算法的編寫,isQ還支持參數化編程。在編譯層面,isQ 基于 MLIR 框架,定義了特有的量子中間表示,并根據 MLIR 提供的轉換接口,實現了如量子電路綜合,量子酉門量子匯編語言和量子中間表示發展白皮書 15 分解,量子線路優化等優化功能,并最終通過代碼生成模塊,將優化后的中間表示轉化為更底層的量子中間表示或
31、匯編語言,如 qir,qcis 等。在底層對接層面,isQ 提供了高效的量子模擬器,并已實現了國內外多家量子硬件的對接工作。三、量子匯編語言現狀及進展(一一)概述概述 量子匯編語言(QASM)是從經典計算機的匯編語言中拓展出來的一個概念。在現代的計算機體系結構中,匯編語言是一種用來描述電子計算機、微處理器或其他可編程器件的低級語言。在不同的設備中,匯編語言對應著不同的機器語言指令集,因此一種匯編語言專用于某種計算機系統結構。匯編語言不僅可以被直接用來實現程序設計,還可以通過編譯器從高級語言(如 C/C+、Python 等)編譯而來,然后通過匯編過程轉換成可執行的機器代碼。匯編語言包含的指令和具
32、體實現有關,一般包括數據傳輸指令、算術指令、邏輯指令、比較指令、控制指令、內存管理指令和 I/O指令等。值得注意的是,不同的處理器架構在具體指令的實現上會存在差別。當前主流的匯編語言有 x86 匯編語言、ARM 匯編語言、MIPS 匯編語言等。量子匯編語言需要描述的處理器是量子處理器,如同經典的匯編語言一樣,是一種用來標識處理器的機器語言的低級別量子編程語言??梢宰鳛榱孔佑布c量子軟件的接口,向上可以由量子編譯器從高級量子程序設計語言轉換而來,向下可以轉換成量子處理器量子匯編語言和量子中間表示發展白皮書 16 可以識別的物理信號。一般來說需要包含量子單比特門、量子兩比特門、量子測量等指令。不同
33、的量子硬件架構(超導電路、離子阱、中性原子等)的 QASM 可以有諸多共同的部分,同時會存在一定的差異,例如超導量子計算機可以采用 QuMIS9作為量子匯編語言,它是由若干個單量子比特門和兩量子比特門組成;而對于光量子線路,初等量子門則表示單光子上的一些基本運算。目前已有的 QASM 包括 Quil、OpenQASM、cQASM、eQASM、NetQASM、QCIS 等,如下表 5 所示。根據 QASM 與硬件的依賴關系可大致分為兩類:一類是硬件獨立的量子匯編語言,例如 Rigetti發布的 Quil;一類是面向特定硬件系統(量子線路或物理系統)的匯編語言,如我國中科院量子創新院等聯合發布的
34、QCIS是針對超導量子硬件系統建造的。表 2量子匯編語言概覽10 量子匯編 語言 提出/發表時間 特點 組織/機構(國別)License Quil 2016 首次引入量子與經典共享內存的架構模型 Rigetti(美國)Apache License 2.0 OpenQASM(2.0)2017 最為廣泛使用和支持的量子匯編語言。IBM(美國)Apache License 2.0 eQASM 2017 一種面向“量子+經典”混合編程定義的匯編語言 代爾夫特理工大學(荷蘭)NA cQASM 2018 一種與硬件無關的通用量子匯編語言 QuTech(荷蘭)NA 9https:/arxiv.org/abs
35、/1708.07677 10 來源:量子信息網絡產業聯盟 量子匯編語言和量子中間表示發展白皮書 17 NetQASM 2021 一種面向量子網絡的編程匯編語言 代爾夫特理工大學(荷蘭)MIT QCIS 2021 一種面向物理系統的控制匯編語言 中國科學技術大學、中國科學院(中國)NA OpenQASM 3.0 2021 在 OpenQASM 2.0的基礎上增加循環、實時測量反饋等功能,支持更廣泛的量子線路。IBM(美國)Apache License 2.0 (二二)OpenQASMOpenQASM 1.OpenQASM 2.0 量子匯編語言是用電路模型描述量子計算的機器獨立語言,基于早期的 Q
36、ASM 提出的 OpenQASM 2.0 是一種基于量子電路模型的通用量子電路的命令式量子電路編程語言。它提出參數化酉矩陣來定義新量子門的概念,通過內置的單量子比特通用門和 CNOT 及自定義新門來控制物理系統。理論上任何基于超導與離子阱量子理論構建的量子計算都能用 OpenQASM 2.0 描述計算電路。1.1 OpenQASM 2.0 的特點的特點 1)基本定義 量子比特 在 OpenQASM 2.0 中,量子比特是描述量子信息的基本單位。每個量子比特可以處于 0、1、或是這兩個狀態的疊加態。使用 qreg 關鍵字定義量子寄存器,例如 qreg q3;表示定義了一個包含 3 個量量子匯編語
37、言和量子中間表示發展白皮書 18 子比特的寄存器。量子比特在電路中通過 qi 的形式進行引用,其中 i 是量子比特的索引。示例:qreg q2;/定義包含 2 個量子比特的寄存器 h q0;/對第一個量子比特施加 Hadamard 門 cx q0,q1;/在第一個和第二個量子比特之間施加 CNOT門 該示例定義了一個 2 量子比特,并且在第一個量子比特上施加了一個 H門,然后在第一個和第二個量子比特之間施加 CNOT門。經典比特 經典比特用于存儲和處理經典信息,與量子比特相對應。使用 creg 關鍵字定義經典寄存器,例如 creg c2;表示定義了一個包含 2個經典比特的寄存器。經典比特在電路
38、中通過 ci 的形式進行引用,其中 i 是經典比特的索引。示例:creg c1;/定義包含 1 個經典比特的寄存器 measure q0-c0;/測量第一個量子比特,并將結果寫入第一個經典比特 1)量子門和操作定義 在 OpenQASM 2.0中,一些常見的量子門包括:Hadamard門(H門):在給定量子比特上施加Hadamard門,將量子比特從經典狀態|0 或|1 轉換為等概率的疊加態。Pauli門:包含 X、Y和 Z門。在給定量子比特上施加 Pauli門,實現對應的 Pauli操作。量子匯編語言和量子中間表示發展白皮書 19 CNOT 門(Controlled-NOT 門):在控制量子比
39、特上為目標量子比特施加 CNOT 門。如果控制量子比特的狀態為|1,則目標量子比特翻轉。測量操作(Measure):測量給定量子比特的狀態,并將結果存儲在相應的經典比特中。U 門(任意單量子比特門):在給定量子比特上施加一個任意單量子比特門,其中、是門的參數。SWAP門:交換兩個量子比特的狀態。Rx、Ry、Rz 門:分別繞 X、Y、Z 軸旋轉的任意角度的單比特旋轉門。OpenQASM 2.0 已經支持以下門:ID|CX|X|Y|Z|S|SDG|H|T|TDG|CCX|C3X|C4X|C3SQRTX|RX|RY|RZ|CZ|CY|CH|SWAP|CSWAP|CRX|CRY|CRZ|CU1|CU3
40、|RXX|RZZ|RCCX|RC3X|U1|U2|U3 足夠滿足當前開發需求。2)測量 在 OpenQASM 2.0 中,測量是一個用于獲取量子比特狀態的重要操作。語法:measure qubit-classical_bit;描述:測量給定量子比特的狀態,并將結果存儲在相應的經典比特中。示例:qreg q1;/定義一個包含 1 個量子比特的寄存器 量子匯編語言和量子中間表示發展白皮書 20 creg c1;/定義一個包含 1 個經典比特的寄存器 measure q0-c0;/測量第一個量子比特,并將結果寫入第一個經典比特 在這個例子中,measure 操作將第一個量子比特的狀態測量,并將結果寫
41、入第一個經典比特。測量后,量子比特的狀態將塌縮到經典比特所測得的值,這是量子計算中不可逆的過程。3)程序結構 OpenQASM 2.0 的程序結構主要由量子電路和經典位定義組成。一般由頭文件庫、寄存器定義、電路構建、測量組成。以下是一個典型的 OpenQASM 2.0 程序結構的示例:/1.導入必要的庫 include qelib1.inc;/2.定義量子寄存器 qreg q3;/定義一個包含 3 個量子比特的寄存器/3.定義經典寄存器 creg c3;/定義一個包含 3 個經典比特的寄存器/4.構建量子電路/通過在量子寄存器上應用量子門來構造電路 h q0;/在第一個量子比特上施加 Hada
42、mard 門 cx q0,q1;/在第一個和第二個量子比特之間施加 CNOT門/5.進行測量 measure q0-c0;/測量第一個量子比特,并將結果寫入第一個經典比特 量子匯編語言和量子中間表示發展白皮書 21 measure q1-c1;/測量第二個量子比特,并將結果寫入第二個經典比特 measure q2-c2;/測量第三個量子比特,并將結果寫入第三個經典比特 在這個示例中:include qelib1.inc;導入了一些基礎的量子門,例如 Hadamard 門等。這是一個標準的庫文件,它包含了一些常用的量子門定義。qreg q3;定義了一個包含 3 個量子比特的量子寄存器。creg
43、c3;定義了一個包含 3 個經典比特的經典寄存器。在 h q0;和 cx q0,q1;等語句中,通過在量子寄存器上應用量子門,構建了量子電路。measure q0-c0;和類似的語句進行了測量操作,將測量結果存儲在經典寄存器中。4)量子經典混合 OpenQASM 2.0可用于可編程的超導量子計算機,以指令的形式簡潔的描述了對指定比特位量子進行操作。相對于常規匯編代碼,OpenQASM 2.0具有更高可讀性與可編寫性,只需要關心”執行操作-量子參數-待操作量子位”即可完成量子電路的編寫。被稱為最簡單的量子匯編語言。OpenQASM 2.0是針對超導量子計算機開發的語言,不存在經典計算機中描述的“
44、地址”與“指令集”,所以 OpenQASM 2.0是無法直接運行在經典計算機上。但是可以通過模擬的方式,在經典計算機上進行模擬計算。需要注意的是隨著仿真的比特位的增加,仿真消耗的資源將會以指數增加。量子匯編語言和量子中間表示發展白皮書 22 1.2 工具鏈工具鏈 OpenQASM 2.0 是用于描述量子電路的編程語言,通常與量子計算的硬件和模擬器一起使用。IBM Quantum Experience 提供了一個在線平臺,允許用戶在真實的 IBM Quantum 硬件上運行量子程序,或者在模擬器上測試其量子算法。用戶可以使用 OpenQASM 2.0 編寫量子程序,并通過 IBM Quantum
45、 Experience 將其提交到 IBM Quantum 計算機上執行。Qiskit 是 IBM 提供的開源量子計算軟件開發框架,支持使用 Python 編寫量子程序。Qiskit 包括用于構建、優化和執行量子電路的庫,以及與 OpenQASM 2.0 集成的工具。用戶可以通過 Qiskit 使用 OpenQASM 2.0 編寫和運行量子算法。Q#是由 Microsoft 提供的用于量子計算的編程語言,其中也包含 OpenQASM 2.0 的支持。Quantum Development Kit 提供了與 Visual Studio 集成的工具,使用戶能夠使用 Q#編寫和模擬量子程序。Quip
46、per是由 Microsoft Research提供的另一個量子計算編程語言,它支持使用 OpenQASM 2.0 描述量子電路。Quipper 提供了一系列用于量子算法開發的工具和庫。QuIDE 是一個用于設計和模擬量子電路的圖形用戶界面工具。它允許用戶通過拖放量子門來構建量子電路,并提供了與 OpenQASM 2.0 的集成。1.3 總結總結 OpenQASM 2.0作為針對超導量子計算機開發的匯編語言,可以運行在超導量子計算機上,而無需其他針對匯編代碼的改動。其易量子匯編語言和量子中間表示發展白皮書 23 讀性十分方便科研人員直接修改 OpenQASM 2.0 開發的量子電路,極大減小開
47、發難度。自從 OpenQASM 2.0 提出以來,大多數量子編程語言、框架、編譯器軟件或后端都支持 OpenQASM 2.0 或使用 OpenQASM 2.0 作為公共交換格式進行互操作。OpenQASM 2.0 是 IBM Quantum Experience 的編程接口語言,當前已經廣泛的被使用。但是 OpenQASM 2.0 沒有傳統編程語言的變量與循環的功能,這使得使用 OpenQASM 2.0 編輯較大量子比特的量子電路時,匯編代碼會極其龐大而導致可讀性極大降低。在面對參數偏移的方法更新參數時,OpenQASM 2.0 需要通過更新整個 QASM 匯編文件才能完成參數更新。2.Ope
48、nQASM 3.0 2.1 OpenQASM 3.0 的特點的特點 OpenQASM 3.011在 OpenQASM 2.0 上做了拓展,旨在用超越簡單量子比特和門的概念來描述更廣泛的量子電路,這些概念主要是任意經典控制流、門修飾符(如 control 和 inverse)、時序和微碼的脈沖實現。OpenQASM 3.0擴展功能時盡可能保持貼近 OpenQASM 2.0 語言結構,盡量保證向后兼容,但其與 OpenQASM 2.0 語法仍存在一些差異,如版本號字符串、標識符命名規則等。OpenQASM 3.0擴展量子電路概念,定義其為對量子數據的量子操作(如門、測量、重置)和必須在量子比特相干
49、時間內執行的并發實時經典計算的有序序列構成的計算例程。數據在量子操作和實量子匯編語言和量子中間表示發展白皮書 24 時經典計算間流動,經典計算可依賴測量結果,量子操作可涉及或以實時經典計算的數據為條件執行。圖 4 展示了量子程序的編譯和執行模型11,以及 OpenQASM 3.0在其中的位置。量子程序包括近時(Near Time)計算和擴展的量子電路。近時計算時間要求沒那么嚴,不在 OpenQASM 3.0 的考慮范圍中。量子程序通過輸出 OpenQASM 3.0 電路和外部實時函數與量子硬件交互。量子程序發出要在量子處理器(QPU)上執行的載荷。載荷由擴展的量子電路和外部的實時經典函數組成。
50、OpenQASM 3.0是描述量子電路的語言,其中包括對外部經典函數的接口調用。它雖被認為是低級編程語言,但一般不被量子控制硬件直接使用,而是通過手寫、腳本生成(元編程)或高級工具軟件生成,然后進一步編譯成在控制量子系統的模擬信號級操作的低級指令。OpenQASM 3.0 編譯器可以轉換和優化用 IR 描述的電路的所有方面,包括所使用的基門、量子位映射、時序、脈沖和控制流。最終的物理電路和外部函數被傳遞給目標代碼生成器,該生成器為 QPU生成二進制文件。工具鏈 11來源:OpenQASM 3:A Broader and Deeper Quantum Assembly Language,http
51、s:/dl.acm.org/doi/10.1145/3505636 量子匯編語言和量子中間表示發展白皮書 25 OpenQASM 3.0 是 2021 年新發布的規范,目前支持的工具相對不多,主要有:Amazon Braket 現在支持 OpenQASM 3.0(實際上是一個子集)用于基于門的量子器件和模擬器。用戶可以直接提交OpenQASM 3.0程序,或用 SDK編寫的 Braket電路。isQ編譯器可以把程序先轉換為 isQ-IR,然后生成 OpenQASM 3.0、QCIS 或 QIR。另外,IBM的高級量子程序設計語言 Qiskit既支持 OpenQASM 2.0,也支持 OpenQ
52、ASM 3.0,但是對于 OpenQASM 2.0 的支持相對更完善一些。2.2 總結總結 圖 11 量子程序的編譯和執行模型11 量子匯編語言和量子中間表示發展白皮書 26 OpenQASM 3.0能描述更多的新型電路和實驗方法,使編寫量子算法更容易。定義清晰量子程序編譯和執行模型、邏輯 OpenQASM 和物理 OpenQASM劃分、OpenQASM在工作流中的定位及相應組件功能界定對近期混合量子-經典編程具有重大意義。OpenQASM 3.0語言添加了變量與循環功能,解決了 OpenQASM 2.0 語言在面對大尺寸電路時會出現的超長匯編文件的問題,同時變量功能化簡了參數偏移功能下需要更
53、新全局文件的問題。(三三)QuilQuil Quil12是 Regetti Computing 公司于 2017 年推出的一種量子計算匯編語言,定義了一個量子抽象機應該包含固定且任意數量 Nq 的量子比特、Nc 比特的經典內存、固定且任意的靜態量子門和參數門、固定且任意序列的指令和整數型程序計數,提出了經典與量子反饋模型(如圖 5)12,支持經典與量子混合的的量子計算范式。Quil 匯編語言是一種基于行的類匯編式編程語言,可以直接被用作量子編程或者被經典程序使用作為中間形式。12來源:A Practical Quantum Instruction Set Architecture.2016.a
54、rXiv:1608.03355 量子匯編語言和量子中間表示發展白皮書 27 1.語言特性語言特性 1)基本定義 量子比特 量子比特由非負整數索引表示。對于例如,量子比特 Q5 用 5 表示。經典內存地址采用索引加中括號的形式,如索引為 7 的經典內存地址 C7被表示為7。2)靜態量子門與參數量子門 靜態量子門 包含常見的單比特和兩比特量子門,單比特量子門一般形式為NAME N,表示作用在 N 量子比特上 NAME 門。兩比特表示類似NAME 2 5 DEFGATE Quil 語言還支持自定義量子門(DEFGATE),開發者可將量子門定義為可選參數化復數矩陣。Quil 語言也支持參數化量子門和量
55、子線路,也就是開發者可以自定義量子線路(DEFCIRCUIT),這些量子門和線路可以被參數化。圖 12 經典量子反饋模型12 量子匯編語言和量子中間表示發展白皮書 28 舉例:DEFGATE HADAMARD:1/sqrt(2),1/sqrt(2)1/sqrt(2),-1/sqrt(2)3)測量 Quil提供效果測量和記錄測量方式,比如MEASURE 5表示測量編號為 5 的量子比特。MEASURE 7 8表示測量編號為 7 的量子比特,并記錄到經典內存8的位置 4)程序結構 Quil 指令的位置由標簽表示,標簽是前面帶有”符號的名稱,如start??梢酝ㄟ^ JUMP命令實現執行序列的跳轉。5
56、)量子經典混合 Quil 語言沒有分配內存的概念,使用經典內存,只需要聲明即可使用。經典存儲器地址由括號中整數表示。例如,指向位 C7的地址 7 稱為7。再如 C63C62.C1C0,表示 0-63的經典比特位。Quil 語言中包含的量子經典混合計算特性。Quil 支持測量量子位并將測量結果記錄到經典存儲器中,并且支持無條件或有條件地根據經典存儲器中的位值進行分支跳轉指令(JUMP)。同時,Quil 支持經典和量子指令同步,比如 WAIT 指令,在條件未滿足前,程序將停止在 WAIT指令處,直到條件滿足。Quil 語言支持將文件作為模塊化,并且可以 Quil 庫包括在內,如語言內置的標準庫,比
57、如:INCLUDE stdgates.quil 量子匯編語言和量子中間表示發展白皮書 29 6)編譯器支持 在編譯方面,Quil支持 PRAGMA關鍵字。這樣程序員可以提供在 Quil 語言中提供附加的信息。針對目標 QPU 的場景,可以利用PRAGMA 指令添加的附加信息改變程序的處理方式。同時PRAGMA指令不改變原有的執行語義。在現代超導量子比特架構上,不同門的應用需要不同的時間。這可能會影響指令計劃執行的方式。處理 Quil 的程序可能希望允許物理執行用 PRAGMA定義的門所需的時間??梢栽陂T操作前定義如下的 PRAGMA的編譯指令。PRAGMA gate_time H 50 ns
58、PRAGMA gate_time CNOT 150 ns H 0 CNOT 0 1 2.工具鏈工具鏈 在配套工具鏈方面,PyQuil 是 Python 庫,用于可以在 Rigetti Forest SDK上運行的 Quil程序;Quil提供 Rigetii高性能的 QVM;并且針對量子指令語言 Quil提供的高級優化編譯器 quilc。3.總結總結 Quil 作為一種獨立的語言,獨立于具體的執行設備(真實或虛擬的)。利用 Rigetti 公司提供了轉換工具,可以將 Quil 程序的格式做方便的轉換,比如使用 quil-json 將 Quil轉為 JSON格式。量子匯編語言和量子中間表示發展白皮
59、書 30(四四)eQASMeQASM eQASM13(executable Quantum ASseMbly)量子匯編語言是由代爾夫特理工大學 QuTech 提出的可執行的量子匯編語言。與諸如 Quil、f-QASM 以及 QASM 等主流的低層次量子編程匯編語言過多的關注量子線路層次的描述而忽略了實際控制硬件中的約束不同,eQASM量子匯編語言設計之初便聚焦于量子協處理器側的量子指令與經典指令的混合計算,能夠描述帶有經典控制的量子實驗程序的同時,支持量子經典混合計算相關的算法的運行。1.eQASM 語言特點語言特點 1)基本定義 量子操作自定義 eQASM沒有固定一組確定的量子操作,比如H,
60、T,CNOT。相反,用戶可以在編譯期間將多種可在硬件執行的量子操作進行配置從而與在匯編語言體系結構層面的指令碼綁定在一起。靈活的量子操作自定義需要匯編器,微指令單元和波形發生器的協同配合。使用者可以通過配置匯編器的配置文件,將任意eQASM 上的量子操作符號與指定的操作碼綁定在一起。同時,指定的操作碼可經由微指令單元生成可觸發特定波形的微指令,完成從eQASM 量子操作符到波形的轉換,從而實現任意量子操作到自定義波形間的綁定。量子比特選址機制 13 eQASM:An executable quantum instruction set architecture,https:/arxiv.org
61、/abs/1808.02449 量子匯編語言和量子中間表示發展白皮書 31 由于存在將一個量子操作施加在多個不同量子比特的表達需求,eQASM 通過一個非直接的量子比特選址機制去選定將一個或多個目標量子比特綁定到特定的目標寄存器之上。eQASM分別提供了指定一個量子比特到目標寄存器的 SMIS指令以及指定兩個量子比特到目標寄存器的 SMIT指令。具體語法格式如下所示。當用戶將目標量子比特指定到目標寄存器過后,便可以通過將目標寄存器選定為操作數的方式,將特定量子操作施加在一個或多個量子比特之上,以實現同一個量子操作的并行執行。量子操作時序控制 eQASM 通過構造一個順序時間線精確控制各個量子操
62、作的執行時刻。語義上eQASM通過維護一個隱含的全局時鐘記錄每個時刻系統正在發生的行為,且僅有 QWAIT 指令可改變全局時鐘的狀態。這意味著兩個 QWAIT 指令間的所有量子操作的執行時刻相同,將被同時執行。QWAIT 操作的操作數描述了前一個執行時刻和下一個執行時刻間的時間間隔。時間間隔的大小可以使用立即數或寄存器的值去刻畫,其單位為處理器的時鐘周期。時間等待指令的指令格式如下所示。時間等待指令 QWAIT Imm QWAIT Rs 由于在一些測試集上觀察到,大部分情況下兩個執行時刻間的時間間隔值較小,為了提高量子指令發射率,eQASM 還支持在量子目標寄存器選定指令 SMIS Sd,SM
63、IT Td,量子匯編語言和量子中間表示發展白皮書 32 指令前添加與前一個執行時刻的時間間隔,從而省略掉 QWAIT 指令。其匯編格式如下所示:PI,其中,PI 為與前一個執行時刻的時間間隔,若一個量子操作前存在這一參數,則可以轉換為如下兩條指令:QWAIT PI 基于超長指令字的量子束指令 eQASM 支持將多個可并行執行的不同的量子操作合并到一個基于超長指令字的量子束指令。量子束指令可以忽略各個量子操作的執行時間,而去描述即將并行執行的各個量子操作的共同執行時刻。量子束指令的匯編格式如下所示:PI,|*在匯編格式下任意數量的量子操作都可以合并進量子束指令當中,但在具體硬件上由于受指令字長的
64、限制,只有少數有數個量子操作可被合并進單個量子束指令。所以在 eQASM指令實例化期間通過配置超長指令字長的大小,限定可以被合并進單個量子束指令的量子操作數量。所以當一個量子束指令中被合并進的量子操作數量大于已配置好的超長指令字長大小時,可以將一個量子束指令字拆分為若干滿足超長指令字長的量子束指令。其中拆分出來的量子束指令其等待時間參數 PI 的值應當為 0。若一個量子束指令合并的量子操作數量小于超長指令字長,默認使用 QNOP 指令填補剩余的位數,已完成指令的對齊。舉例當超長指令字長的大小為 2 時,若有一個量子束指令為:量子匯編語言和量子中間表示發展白皮書 33 PI,X S5|H S7|
65、CNOT T3 這一指令可被已配置好的匯編器分解為如下兩個量子束指令:PI,X S5|H S7 0,CNOT T3|QNOP.2)程序結構 程序結構上eQASM通過控制指令支持描述分支選擇和循環兩種程序結構。eQASM的控制類指令分為CMP比較指令和 BR分支跳轉指令。此外,eQASM 默認維護比較標志寄存器去存儲多種比較結果。eQASM的控制指令的匯編格式如下表所示:控制指令 CMP Rs,Rt BR,Offset CMP 比較指令的操作數由兩個待比較寄存器對象組成,CMP 指令將會比較Rs和Rt兩個寄存器中的值的大小關系,并根據比較的結果將值存儲到對應比較寄存器的特定標志位之中。例如,Rs
66、 和 Rt 兩個寄存器的值相等,CMP指令會把 CompFlag.EQ置為 1。BR 分支跳轉指令的操作數也由兩個操作數組成。第一個操作數便是跳轉條件判斷操作數,可以指定特定的比較標志寄存器的某一個標志位,若標志位為 1 則根據第二個操作數跳轉偏移量跳轉到指定代碼塊。跳轉偏移量加上程序計數器中的值,便是要跳轉的目標地址。3)量子經典混合 一個eQASM程序由可配置的量子指令和簡單的輔助經典指令混合構成。輔助經典指令包含算數運算、邏輯運算、數據傳輸以及程序控制指令。輔助經典指令主要負責支持測量結果的獲取,基于測量子匯編語言和量子中間表示發展白皮書 34 量結果的實時計算,待執行量子操作參數計算以
67、及量子指令程序流控制等任務。這一特點使得eQASM能夠較好的描述量子控制器上的實時量子經典混合邏輯。由于上一節在描述 eQASM所支持的程序結構時已經介紹了程序控制指令,這一節重點介紹剩下三類輔助經典指令。數據傳輸類指令 eQASM 目前只支持對整型數據的操作。數據傳輸上,eQASM除了支持基礎的數據裝載指令(LoaD,LD)和數據存儲指令(Store,ST)以外,還引入了取條件狀態指令 FBR 和取測量結果指令 FMR。eQASM的數據傳輸類執行的匯編格式如下所示:數據傳輸類指令 LDI Rd,Imm LDUI Rd,Imm,Rs LD Rd,Rt(Imm)ST Rs,Rt(Imm)FBR
68、,Rd FMR Rd,Qi 取條件狀態指令 FBR 顧名思義是將第一個操作數對應的特定比較標志寄存器中的值賦給第二個操作數的目標寄存器,以支持在比較結果上完成算術或邏輯運算。而取測量結果狀態指令 FMR 則是為了支持基于測量結果的實時經典計算。FMR 指令的執行離不開 eQASM編程模型和體系結構狀態的支持。經典運算類指令 經典運算類指令包含算數運算和邏輯運算類指令。其匯編格式如下表所示:量子匯編語言和量子中間表示發展白皮書 35 運算指令 邏輯運算 AND Rd,Rs,Rt OR Rd,Rs,Rt XOR Rd,Rs,Rt NOT Rd,Rt 算數運算 ADD Rd,Rs,Rt SUB Rd
69、,Rs,Rt 2.工具鏈工具鏈 我們認為量子經典異構架構由圖 6所示14,由經典主機端,量子控制處理器以及量子芯片三部分組成。一般地從主機端到量子協處理器的計算行為我們稱之為近時(near-time)計算,發生在量子協處理器上的計算行為稱之為實時計算(real-time),而 eQASM 所描述的便是量子協處理器上的實時計算行為。為了支持eQASM程序的正確運行,需分別完成量子控制處理器和量子芯片的模擬。為了探索量子-經典異構架構控制器體系結構的設計空間和驗證eQASM編寫的量子程序的正確性,國防科技大學設計并實現了一款基于 SystemC 的控制體系結構模擬器 CACTUS(Control
70、ArChiTectUre Simulater)以周期級精確地模擬量子控制器的所有體系結構行為。此外,Quantumsim、QI-Circuit 等量子計算模 14 來源:https:/ 量子匯編語言和量子中間表示發展白皮書 36 擬器完成量子比特狀態的模擬。CACTUS 對接量子模擬器便能準確模擬量子協處理器的系統行為。3.總結總結 eQASM 由一組可配置的量子指令和輔助經典指令混合構成。輔助經典指令包含算數運算、邏輯運算、數據傳輸以及程序轉移指令,是eQASM所定義的量子經典異構編程模型的表象,是利用實時經典邏輯來輔助量子計算從而完成量子-經典異構計算的基礎。量子指令則可以分為以下三類:1
71、)設置量子操作目標寄存器的目標寄存器指令 目標寄存器選定指令主要可以分為兩種:一為指定單個目標量子比特的 SMIS(Set Mask Immediate for Single operations)選定指令,圖 13 量子經典異構架構14 量子匯編語言和量子中間表示發展白皮書 37 二為指定兩個目標量子比特的 SMIT(Set Mask Immediate Two-qubit operations)選定指令。eQASM通過目標選定指令表示對任意目標量子比特的標識,由于多量子比特情況下皆可以將目標量子比特綁定于特定的目標寄存器,所以表示量子比特的指令位數是恒定的,這種設計一定程度上減輕了指令位數
72、上的資源沖突。2)指定量子操作間的時間間隔的等待指令 eQASM 通過 QWAIT 指令的引入支持量子操作時序的精確描述。QWAIT 指令根據操作數的不同可以分為兩個不同的類別。當操作數為立即數時,QWAIT 指令后面的 eQASM 指令需等待立即數大小的時鐘周期過后才能被得到執行。同理當操作數為寄存器時,等待的時鐘周期數應等于寄存器中所存有的值的大小。3)基于超長指令字的量子操作束指令 在實際的應用場景中,存在多個量子操作并行執行的需求,又考慮到指令發射速率的限制可能會導致量子控制硬件無法在規定時間內完成所有量子指令的提取,所以 eQASM中引入了基于超長指令字的量子操作束指令 quantu
73、m bundle。量子操作束指令由兩種位段構成:時間間隔位段和量子操作束位段。量子束位段中存放若干個并行執行的量子操作,時間間隔位段則存有與前一個量子指令的時間間隔大小。盡管eQASM的設計在連接量子軟硬件做出了努力,但其仍具備一些局限性。代爾夫特理工大學研究團隊實現和部分驗證了在七個超導量子比特場景下eQASM匯編語言的微體系結構二進制實例化。但隨著量子比特規模的擴展,eQASM 和其對應的微控制體系結構仍受困于量子操作發射速率問題。此外,當前的eQASM指令只能用于量子匯編語言和量子中間表示發展白皮書 38 描述單量子比特門和兩量子比特門,無法靈活地表達多量子比特門。如何隨著量子計算物理系
74、統規模的增大,隨著量子操作表達靈活度的提高,設計出一套確實可用的量子編程匯編語言是一個亟待解決的問題。(五五)cQASMcQASM cQASM15,16(common Quantum ASseMbly)是由 QuTech 的研究人員提出,定義了一個通用的 QASM 匯編語言,旨在抽象量子比特技術的細節,并能確保所有支持該標準的量子編譯和仿真工具之間的互操作性。cQASM 定義為一種獨立于硬件的語言,由量子編譯器生成,作為從高級語言編寫的代碼到量子匯編代碼的翻譯過程的輸出。用高級語言編寫的算法可以被優化并編譯成通用硬件獨立的 cQASM代碼,cQASM 指令可以作為量子計算機模擬器的輸入,也可以
75、作為較低級別編譯器的輸入,后者編譯生成特定用于硬件的指令,或 eQASM代碼,適合由目標量子處理器執行。1.語言特性語言特性 cQASM匯編語言包括以下特性:1)基本定義 量子比特可以利用關鍵字“Qubits”分組到量子寄存器中,并可通過它們的索引“qi”去尋址。為了增強量子程序的可讀性,可以使用關鍵字“map”來命名量子比特。15 https:/doi.org/10.48550/arXiv.1805.09607 16 https:/www.quantum- 39 2)量子門 cQASM 語法支持完整的、通用的量子門集,其中包括單量子、雙量子和三量子門。另外,可通過門名前加上“c-”的形式來擴
76、展門集。例如“c-X”為二進制控制的 X 門。cQASM 允許在一條語句中對多個量子比特進行尋址,而不是為每個量子比特寫一行代碼。例如 h q0:2,為阿達瑪門同時應用于量子比特 0,1,2。平行量子門 cQASM 中可以使用代碼例如prep_z q0|prep_z q1|prep_z q2 的語法來定義一組量子門。括號之間的門用“|”隔開,且可以并行執行。這個語法在同一行中定義多個量子門,避免了程序冗長。3)測量 可以使用關鍵字“measure”后面跟著目標量子比特在默認在 z 基上分別測量每個量子比特,例如“measure q0”。通過使用專用指令measure_x,measure_y 或
77、 measure_z,可以在這三種基(x,y,z 基)中進行單個量子比特測量。另外,可以使用相同的關鍵字 measure_all一次性測量整個量子寄存器,而不指定任何目標量子比特。程序結構 4)子電路 cQASM 語法可定義量子電路。通過定義子電路,可以將代碼行組合在一起以提高代碼的可讀性。在 CQASM 中子電路的指表達方式為以一個圓點開頭,在其后緊跟子電路的名稱。例如.init 函數和.grover函數。5)靜態循環 量子匯編語言和量子中間表示發展白皮書 40 重復子電路是某些算法的重要組成部分,cQASM 可實現簡單的for循環構造。例如 grover(3)語法指重復運行 grover子
78、電路 3次。6)cQASM的特殊功能 cQASM 不支持量子經典混合,但是可以進行奇偶校驗測量,通過關鍵字“measure_parity”即可實現。2.工具鏈支持工具鏈支持 OpenQL 是 C+/Python 的量子編程框架,該框架提供了一個支持量子代碼優化的編譯器。編譯器為各個量子目標平臺生成中間量子匯編語言和編譯后的微代碼。OpenQL 的量子匯編代碼采用cQASM。cQASM支持在 QX的量子模擬器上運行。3.總結總結 cQASM 為實現硬件無關語言鋪平了道路,該語言由量子計算社區共享,并由實現大規模量子計算所需的許多工具實現。cQASM 語法規范允許以一種相對緊湊的方式描述量子電路,
79、同時保持在量子門級別并抽象出底層硬件細節。盡管是一種匯編語言,但SGMQ(Single Gate Multiple-Qubits,單門多量子比特)指令等一些特性允許以相對緊湊的方式表達門級并行性,并允許模擬工具和編譯器以直接的方式指定執行時間和門調度。cQASM 語法的兩個主要部分,一個是表達基本量子電路所需的最小語法,以及一組提供不同特性的擴展,如并行度表達式、循環結構或特殊測量。盡管被提議的 cQASM語法可以提供表達能力,允許對量子電路進行直觀的描述,但它當前的語法并不能以完全令人量子匯編語言和量子中間表示發展白皮書 41 滿意的方式解決量子計算和經典計算之間的相互作用,存在幾個限制應當
80、在未來的版本中提出和解決:1)部分重要的特性,如分支支持、條件循環或動態旋轉角度計算,需要經典寄存器和經典匯編語言。2)子電路重用:目前子電路不能多次調用,將子電路重用為可調用函數可以使算法規范更加緊湊,促進代碼重用并節省指令空間。3)支持與經典指令混合:經典存儲器可以為一些量子算法中可能需要的中間經典計算提供存儲空間。(六六)QCISQCIS 量子控制指令集(Quantum Control Instruction Set,QCIS17)是由中國科學技術大學量子計算機研發團隊提出,是一套對超導量子計算機硬件系統進行控制的匯編語言,旨在將硬件控制用指令進行抽象標準化。不同于量子計算機匯編語言 Q
81、ASM(Quantum Assembly Language),兩者的區別在前者面向的是原始的物理系統而后者是對量子門的抽象表達。QCIS 目前已經可以由量子編譯器生成,利用國產的 isQ 和Quingo 高級量子程序設計語言,可以將高級語言編寫的算法優化并編譯成 QCIS 代碼,QCIS 指令可以直接作為相關團隊的量子編程語言輸入給量子操控系統,直接驅動量子芯片。目前,中科院量子創 17 https:/ 量子匯編語言和量子中間表示發展白皮書 42 新院的量子計算云平臺和國盾量子計算云平臺,支持 QCIS作為原生語言,直接驅動其接入云端的量子計算機。1.語言特性語言特性 QCIS匯編語言包括以下
82、特性:1)基本定義 量子比特 量子比特直接使用物理比特的編號作為其指代,如 Q0,Q1,.Q65 等。暫時不支持數組等索引形式,但該索引工作可以有經典程序輔助生成。另需要注意的是 QCIS指令屬于直接指令,其不會對用戶使用的比特做二次映射(mapping)操作。量子門 QCIS 只支持限定類型的量子計算門,其中包括單量子、雙量子。其支持的門被分為原生門和復合門兩類。原生門為量子計算機直接支持,原則上是做過專項優化的門,可以被量子計算機直接支持,但量子計算機優化程度不同,原生門的具體門種類和數量都可能不同。復合門為量子計算機間接支持,需要在送入量子計算機前,有量子計算機控制系統按照預設規則翻譯為
83、原生門后再被送入量子計算機執行。復合門相當于官方提供的一個預定義門,便于用戶按照量子邏輯門的習慣直接調用。但因為存在翻譯過程,所以對于對效率要求嚴格的線路,用戶可以手動將復合門轉為原生門并進行優化,得到最優的僅由原生門組成的線路,提交給量子計算機直接執行。量子匯編語言和量子中間表示發展白皮書 43 現階段官方支持的復合門數量不多,僅滿足基礎編程習慣需求,用戶可以根據實際需求,向官方建議添加相應的復合門。2)測量 使用關鍵字“M”后面跟著目標量子比特,在 z 基上分別測量每個量子比特,例如“M Q0 Q1”。2.工具鏈支持工具鏈支持 目前國產的 isQ 語言,Quingo 語言支持直接編譯輸出
84、QCIS 語言,同時兩種語言還提供 QCIS語言的仿真器。中科院量子創新院和國盾量子云平臺的 SDK,可以直接將 QCIS語言提交到指定的量子計算機,并且 SDK 提供了基于 QCIS 語言的線路優化/化簡,線路映射等工具。其 SDK 還提供與 QASM 語言的相互轉換支持,便于用戶快速體驗基于 QCIS的國產量子計算機。同時,QCIS 的開發團隊和兩個云平臺團隊都非常歡迎用戶提交工具類支持開發請求,提交 bug 修復等。3.總結總結 QCIS 是一套對超導量子計算機硬件系統進行控制的匯編語言,旨在將硬件控制用指令進行抽象標準化。其優化了軟件方面對量子計算實體機操控的技術性能,提升線路操作在物
85、理機上的精度。作為國內第一個面向超導量子物理系統的編譯匯編語言,QCIS實現中國量子計算技術自主可控,保障了中國在該技術領域的先進性和核心競爭力。(七七)其他匯編語言其他匯編語言 1.NetQASM 量子匯編語言和量子中間表示發展白皮書 44 NetQASM18是一種用于量子互聯網應用的低層次匯編語言架構,由 QuTech 于 2021 年提出。定位是一個通用的、獨立于平臺的、可擴展的匯編語言,支持本地量子門、強大的經典邏輯和用于遠程使用量子計算機的一種語言。NetQASM 允許應用層的經典邏輯和通信與物理層的量子操作緊密結合,其架構如圖 7 所示。NetQASM 還提供基于 Python 的
86、 SDK 包供用戶使用,利用 SDK編 寫 的 應 用 程 序 可 以 在 模 擬 器 后 端 運 行,如 SquidASM 或SimulaQron。未來,這些相同的應用程序可能會在由量子網絡控制器的實際實現組成的硬件后端上運行。2.f-QASM 18 https:/doi.org/10.1088/2058-9565/ac753f 圖 14 NetQASM 架構示意圖18 量子匯編語言和量子中間表示發展白皮書 45 f-QASM是 QASM的擴展,是 Q|SI中為操作量子硬件而定義的帶反饋的 QASM,是支持交互的匯編語言。它增加了一個反饋指令以實現基于測量的 case和 loop語句。其編譯
87、器把 while程序轉換成 f-QASM 指令序列,再生成等價的量子電路(即可執行量子門序列)。f-QASM的 goto 結構比 QASM或 QASM-HL包含更多信息。3.QASM-HL 量子電路顯示了兩種突出的量子操作類型:foral循環和repeat循環。關于重復量子操作的進一步信息可以以 QASM 格式,以循環的形式保留。使用 QASM-HL比 QASM-H 時代碼大小減少很多。(八八)小結小結 量子匯編語言是量子處理器的機器語言的第一級抽象,是高級量子語言編譯軟件與量子硬件的接口。Quil、OpenQASM、cQASM、eQASM、NetQASM、QCIS 等 QASM 是業界在這方
88、面工作的研究成果。在既有的量子比特、門等概念基礎上,目前已開始對時序或脈沖級門描述、可在相干時間內執行的并發實時經典控制等方面的探索,以便能描述更廣泛的量子線路和更多的新型電路和實驗方法。量子編程匯編語言定義量子硬件的功能,應該是量子計算機軟硬件之間的通用接口,由于目前實現基于對量子比特測量結果的反饋控制困難、與具體硬件耦合過于緊密等問題,尚無法實現完整的量子程序流控制,因此還沒有一個足夠成熟的量子計算匯編語言設計能夠滿足不同方面的需求,這方面正在引起業界關注和投入,前述匯編語言均為有益的探索,其中以eQASM、OpenQASM為佼佼者。eQASM 是一種可執行的量子計算匯編語言,定義了一個明
89、確可行的量子匯編語言和量子中間表示發展白皮書 46 經典與量子相結合的異構編程模型,不僅可以描述量子算法,還可以描述許多常用的量子校準實驗,可大幅提升對量子比特的可操作性及量子比特的使用效率。作為軟件輸出,eQASM 可由量子編譯器生成,來描述對應的量子程序;作為硬件輸入,eQASM 可被量子控制微體系結構 QuMA_v2 支持,能直接在量子硬件上執行。eQASM支持離散的量子操作指令以便降低控制硬件的設計復雜度。eQASM是個開源的匯編語言,允許使用者可根據自己需求添加。量子匯編語言架構需要具有不同背景的工程師與科學家合作完成:編譯器工程師提出軟件輸出需求;體系結構工程師構思軟硬件之間的接口
90、,在滿足軟件輸出需求的同時,極大地優化硬件系統設計;電子電路工程師實現電子電路的設計;FPGA工程師與體系結構工程師一起實現量子控制微體系結構;編譯器工程師開發高級量子程序設計語言及量子編譯器。這樣才能最終構建從量子程序語言到量子編譯器、量子匯編語言體系結構、量子控制微體系結構、模擬設備、量子芯片的全套系統。從產業合作的角度,目前 OpenQASM 2.0 在業界的影響力比較大,它是以開源社區的方式運作,建立 OpenQASM 工作組和技術指導委員會,其成員包括來自 IBM、英偉達、加州大學圣芭芭拉分校等機構成員,有一定業界代表性。這種開源社區的運作模式也值得我國相應的量子計算上下游企業合作參
91、考。量子匯編語言和量子中間表示發展白皮書 47 四、量子中間表示現狀及進展(一一)概述概述 在量子編程語言中,高級量子程序設計語言關注的是對于算法和應用的描述,這類描述在量子硬件上沒法直接執行,需要通過量子編譯器來進行轉換。量子中間表示(QIR)是用于構建量子編譯器的編程語言,是從量子算法和應用到量子硬件中,起著承上啟下作用的關鍵一環。量子中間表示通常與高級量子程序設計語言及具體的硬件平臺均無關,這使得任意基于量子門的高級量子程序設計語言都可以它來表示;同時,量子中間表示也不指定具體的量子匯編語言,將其留給目標計算環境。量子中間表示為了同時兼容經典和量子程序的編譯過程,通常是基于經典編譯器的中
92、間表示構建的,因此我們先從經典的編譯器及中間表示開始介紹。1.編譯器及中間表示編譯器及中間表示 現代的計算機軟件基本上都是由高級編程語言來編寫的,在運行軟件時,需要使用編譯器,將軟件變成硬件上的可執行文件,從編程語言到運行程序的過程就是經典的“編譯-鏈接-運行”模式。常見的編譯器,如 GNU C Compiler(gcc),就是使用這種模式。編譯的時候,需要將高級編程語言編寫的軟件模塊,準確的轉換成另一種語言來表示,即“中間表示”。鏈接則是將轉換后的模塊整合成一個完整的程序。在編譯器的構建過程中,最核心的問題是構造合適的中間表示。如果中間表示是低層次的匯編代碼,那么在鏈接和運行的時候能夠做的優
93、化就非常少,因為匯編代碼丟失了高級編程語言的很多特性量子匯編語言和量子中間表示發展白皮書 48 信息。這種中間表示的問題是編譯過程快,但是運行的時候不夠快。如果對編程語言構建一個高層次的中間表示,那么在鏈接和運行的時候能做的優化就會比較多,但是還要再根據高級中間表示生成匯編代碼。這種情況下,編譯的時候非常慢,但是編譯好的程序運行就會相對快一些。為了解決這個問題,2000 年 Chris Lattner 在伊利諾伊大學香檳分校開始碩士研究的時候,創建了 LLVM 項目,并提出了 LLVM IR的中間表示。LLVM IR 的特點是一種多平臺的、具備高級特性的低級語言,從 LLVM IR可以很方便的
94、生成不同硬件平臺,如 x86、ARM、RISC等的匯編代碼。并且它是基于靜態單賦值(static single assignment,SSA)形式的,即每個變量只能被定義和賦值一次,因此可以方便地進行數據流分析和優化。同時 LLVM IR 又具備高級語言的特性,它有很多高級語言的數據類型和指令,因此可以很方便的表示復雜的程序結構,也能進行高層次的程序優化。使用 LLVM IR 來編寫編譯器比傳統的方法要簡單,只需要關注將高級編程語言準確的轉換為 LLVM IR,就可以利用 LLVM IR提供的各種功能和優化方法,以及對于不同硬件平臺的支持。隨著計算機科學的發展,特別是機器學習領域興起之后,出現
95、了一些需要用到高層級的分析和優化的應用場景,比如機器學習里面數據流圖的優化以及算子表示。這些場景往往沒法用 LLVM IR 來有效的處理,因為 LLVM IR 本質上是一種低層級的、面向硬件的中間表示,雖然它也具備一些高級語言的特性,但是也沒法應對軟件工程上的新需求。在這種情況下,2017 年 Chris Lattner 又提出了MLIR的中間表示。它是一種構建可復用和可擴展的編譯器基礎設施量子匯編語言和量子中間表示發展白皮書 49 的新方法,旨在解決軟件碎片化的問題,改進異構硬件的編譯,降低構建特定領域編譯器的成本,并將現有的編譯器連接在一起。MLIR 與 LLVM IR 有一些相似之處。M
96、LIR 也是基于 SSA 形式的,并且也支持多種高級的數據類型和指令。MLIR的主要特點在于它可以支持不同的抽象層級,并且支持自定義方言(Dialect),使其可以靈活的擴展和定制,以適應不同領域的需求。相比之下,LLVM IR 的類型和指令都是基本固定的,如果要增加自定義的類型和指令的話,需要涉及到源代碼修改,會增加維護的難度和成本。MLIR與 LLVM IR之間不是競爭關系,MLIR提供了一種新的編譯框架,可以將 LLVM IR 以及其他不同的中間表示集成在一起,以便利用不同中間表示的優化和代碼生成能力?;?MLIR 編寫的編譯器,可以在編譯的過程中利用不同的中間表示,對源編程語言進行逐
97、級的轉換和優化,最后一直遞降到低層次的 LLVM IR以及匯編代碼??傊?,LLVM IR 和 MLIR 都是為了解決軟件碎片化問題而構建出來的編譯基礎設施,是得到廣泛認可的經典編譯器的中間表示。2.量子中間表示量子中間表示 近年來隨著量子計算硬件的飛速發展,量子計算機的軟件和編程也變得熱門起來,上文中已經提到過,很多高級量子程序設計語言被開發了出來,其中大部分語言,如 Qiskit,ProjectQ,Mindspore Quantum等,在編譯的時候,一般是用有向無環圖(Directed Acyclic Graph,DAG)或者指令列表的形式,將量子線路表示出來。這種編量子匯編語言和量子中間表
98、示發展白皮書 50 譯的方式雖然在現階段是高效的,但是隨著量子比特數量的快速增長,編譯過程消耗的時間很快就會變得無法接受。借助傳統計算機中編譯的概念和方法,我們也可以在量子編程中引入編譯器,并且在構建編譯器的時候,使用特定的量子中間表示,來對量子程序進行優化,并生成對應硬件或模擬器的目標代碼,整個過程如圖 8所示19。量子中間表示是一種介于量子高級編程語言和量子計算機的機器編程語言之間的表示,在左側可以支持多種不同的高級量子程序設計語言,如 Qiskit、ProjectQ 等,在右側可以連接對應不同量子計算機硬件的匯編語言或機器語言,如 OpenQASM 2.0、eQASM等。目前量子編譯器的
99、相關研究已經有很多,并且為了實現編譯器的功能,也都使用了特定的量子中間表示。為了實現同時編譯經典編程語言和高級量子程序設計語言的需求,很多都是基于經典的中間表示如 LLVM IR、MLIR等來編寫的擴展。其中 MLIR得益于其良好的擴展性,漸漸成為主流的量子中間表示實現方式。下表列舉了 19 來源:量子信息網絡產業聯盟 圖 15 量子中間表示19 量子匯編語言和量子中間表示發展白皮書 51 從 2014 年以來的一些量子中間表示成果。在接下來的章節中,我們將對一些比較具有代表性的量子中間表示,包括 QIR、ScaffCC-IR、XACC-IR、OriginIR、isQ-IR和 Quingo-I
100、R進行比較詳細的介紹。表 3量子中間表示概覽20 量子中間表示 時間 研究機構 基于的經典中間表示 ScaffCC-IR21 2014 普林斯頓大學,加州大學圣塔巴巴拉,IBM(美國)LLVM XACC-IR22 2018 橡樹嶺國家實驗室(美國)OriginIR 2020 本源量子(中國)LLVM/MLIR QIR23 2021 QIR Alliance,成員包括 Microsoft、Nvidia、Quantinuum、Rigetti Computing、QuantumCircuits Inc.、橡樹嶺國家實驗室(美國)LLVM QSSA24 2021 印度國際信息研究所(印度)QIRO25
101、 2021 Microsoft(美國),蘇黎世聯邦理工大學(瑞士)MLIR isQ-IR26 2022 弧光量子(中國)MLIR Quingo-IR27 2022 國防科技大學、華東師范大學(中國)MLIR 20 來源:量子信息網絡產業聯盟 21 https:/ 22 https:/code.ornl.gov/qci/xacc 23 https:/ 24 https:/doi.org/10.5281/zenodo.5988606 25 https:/ 26 https:/ 27 https:/ 量子匯編語言和量子中間表示發展白皮書 52 QuSL28 2022 啟科量子(中國)Catalyst
102、-IR29 2023 Xanadu(加拿大)MLIR (二二)QIRQIR QIR 是 QIR 聯盟(QIR-Alliance)推出的量子中間表示標準,該聯盟是Linux基金會旗下的聯合發展基金會在開放標準方面工作的一部分,它的創始成員包括微軟、Quantinuum(前霍尼韋爾)、橡樹嶺國家實驗室、量子電路公司和 Rigetti Computing。1.QIR 特點介紹特點介紹 QIR 規范包含七個部分:數據類型(Data Types)、可調用對象(Callables)、經典運行時(Classical Runtime)、量子運行時(Quantum Runtime)、元數據(Metadata)、
103、代碼生成器(Code Generation)、配置文件(Profile)。QIR 的數據類型包括了經典數據類型和量子數據類型。經典數據類型包括簡單類型、測量結果、量子比特、字符串、大整數、元組、Unit 和數組。同時 QIR 對于上述數據類型都提供了相應的操作接口定義,方便對這些數據類型的操作。QIR 規范定義了針對量子操作的可調用對象??烧{用對象由最多四個不同的 LLVM 函數表示:基本、伴隨、受控、受控伴隨。由于伴隨算子和受控算子操作的重要性,QIR 提供了對可調用對象的伴隨和受控操作。28 https:/ 29 https:/ 量子匯編語言和量子中間表示發展白皮書 53 QIR 支持經典
104、運行時和量子運行時。在經典運行時方面,除數據類型相關的經典運行時外,還定義兩個消息函數:正常消息接口和失敗消息接口。QIR 不要求運行時提供垃圾回收,而是指定一套運行時函數,若源語言要求自動內存管理,則通過編譯器調用這些函數實現引用計數的方式代替實現。在量子運行時方面,QIR 定義了四個基本的量子比特分配和回收操作:分配單個量子比特、批量創建量子比特、釋放單個量子比特、批量釋放量子比特。QIR 配置文件(Profile)中定了兩個功能子集:基本量子功能集和基本測量反饋功能集?;玖孔庸δ芗x了 QIR 的最小子集,包括了量子操作,但不包括基于測量的反饋?;緶y量反饋功能集擴展了量子功能集,允
105、許基于測量結果控制的量子操作。另外,QIR中的元數據和代碼生成器主要繼承 LLVM的能力。2.工具鏈工具鏈 QIR代碼倉(https:/ 9。表 4 QIR 代碼倉結構30 代碼倉 主要功能 qir-spec qir 規范定義 pyqir PyQIR 是用戶生成、解析、評估量子中間表示的 python版 API。包括pyqir-generator、pyqir-evaluator、pyqir-parser(待實現)三個部分。30 來源:量子信息網絡產業聯盟 量子匯編語言和量子中間表示發展白皮書 54 qcor QCOR 是一個 C+語言擴展和相關的編譯器,用于混合量子-經典編程,是的開發者能使用
106、 C+語言工作,并定義獨立的量子代碼。qat QAT(QIR Adaptor Tool),允許人們將一個 QIR轉換為滿足某種要求的另一種 QIR。nwqsim 支持 QIR 的高性能 CPU、GPU 模擬器 3.優劣勢分析優劣勢分析 QIR 基于流行的開源 LLVM 經典編譯器。LLVM 是業界成熟的模塊化和可重用的編譯器和工具鏈技術,已被多種語言所采用。QIR 利用來自經典計算行業的編譯和優化工具,從而降低編寫編譯軟件的成本。QIR 能夠處理經典邏輯和量子邏輯。這一特性對于混合量子經典算法至關重要。QIR已經被許多業界領先組織采用,QIR聯盟的成員都在構建利用 QIR的工具鏈。圖 16 Q
107、IR 組件結構圖30 量子匯編語言和量子中間表示發展白皮書 55(三三)ScaffCCScaffCC-IRIR 1.ScaffCC-IR 量子中間表示特點量子中間表示特點 ScaffCC 是 LLVM 編譯框架的一個擴展,其 IR 經典部分沿用LLVM IR,量子部分則在 LLVM IR 中添加了代表量子門的內置函數和代表量子比特的數據類型。其編譯時,其首先將檢測所有純經典可逆邏輯模塊,并將其轉化為 QASM,并與量子模塊相鏈接,最后通過 QASM-to-IR模塊轉化為 LLVM-IR。LLVM 工具包可將計算表示為圖形,這有助于量子程序分析。ScaffCC 的數據流分析利用這特點,可對輸入程
108、序進行程序正確性檢查,例如“非克隆”和“糾纏”,也可以用于獲得電路估計,例如關鍵電路路徑或其量子位的使用和操作。利用 IR 的計算圖模型,ScaffCC 還可提供估計大型算法運行可能需要的時間的功能。ScaffCC 執行分層關鍵路徑估計,這涉及在無限量子資源的假設下調度指令。當量子指令共享一個或多個操作數時,無克隆定理強制量子指令之間的數據依賴性(與經典計算相反,讀取或寫入之間沒有差異)。根據這些依賴性,關鍵路徑時序分析通過盡快重新排序指令來調度操作(ASAP)。ScaffCC 編譯器可以處理多維量子比特寄存器、經典控制流等量子匯編語言不支持的特性,從而將 ScaffCC-IR轉換為 Open
109、QASM。2.工具鏈工具鏈 Scaffold 是一種命令式的高級量子程序設計語言,被設計為 C的擴展,其編譯器采用ScaffCC編譯框架實現,實現從上層高級量子程序設計語言到 LLVM-IR的轉化過程。量子匯編語言和量子中間表示發展白皮書 56 QX 是量子程序模擬器,其接收 ScaffCC 編譯得到的結果,并模擬運行。模擬器目前支持大約幾十個量子比特(30)的模擬。RKQC 是可逆邏輯電路的編譯器,其輸入文件包含可逆電路的描述,輸出文件是電路的匯編指令。RKQC被 Scaffold量子電路編譯器用作編譯純經典可逆邏輯模塊或預言的子程序。3.優劣勢分析優劣勢分析 ScaffCC基于LLVM編譯
110、框架,可以很好的適應大規模應用程序的編譯,以及適用一些先前的經典技術。在其 IR 的基礎上,可以利用 LLVM 工具包構建計算圖模型,并基于此提出了程序正確性檢查的方法以及可逆邏輯綜合的新方法。此外,其還可以根據該圖模型,通過計算電路關鍵路徑來估計大型算法運行可能需要的時間。ScaffCC 經典部分的優化需要自己實現,如常量傳播,控制流優化等,雖然基于 LLVM,可以編寫相關轉換來實現,但這無疑會加大編譯器編寫的工作量,且自己實現的經典優化效果也并不一定能得到保障。(四四)XACCXACC-IRIR XACC 是用于混合量子-經典計算架構的可擴展編譯框架。它提供了量子協處理器編程模型,低級系統
111、軟件接口,支持跨平臺編程,支持模塊化和可擴展的編譯前端和硬件后端,這些模塊通過其量子中間表示粘合在一起。1.XACC-IR 的特點的特點 量子匯編語言和量子中間表示發展白皮書 57 XACC-IR 是一種多態數據模型,其抽象程度略高于 QASM,并提供了一種可操作的、內存中的、易于轉換和優化的量子程序表示,能有效地將多種語言與各種硬件匯編語言集成在一起。XACC-IR 是接口的實例,主要由以下三個接口構成。Instruction接口描述了通用匯編指令,這些指令具有唯一名稱,對一組量子位進行操作,有具體或可變參數參數化,并且可以啟用/禁用等特點。其中參數化允許指令依賴于運行時參數,如為迭代算法提
112、供一次編譯,多次運行的實現。Composite Instruction 繼承自 Instruction,包含一個子指令列表。它通常被用于動態生成電路,該接口在編程遞歸電路,如量子傅里葉變換等場景中是非常實用的。IR 接口用來收集上述 Composite Instruction,并提供了查詢和獲取 IR實例的方法,該實例可以通過轉化方法生成到如 QASM等更底層的匯編語言上。2.工具鏈工具鏈 qcor 基于 XACC 框架,實現了一種對 C+編譯器的擴展,可以在單個源代碼文件中實現異構經典量子混合編程,編譯和執行。在編程階段,qcor 提供了量子內核函數定義,編譯階段,將量子內核轉化為 XACC
113、-IR,并為電路優化,分析,量子比特映射等功能提供用戶可擴展的 hooks。TNQVM是利用張量網絡理論模擬量子電路的加速器實現。XACC 目前支持在 IBM、Rigetti 和 D-Wave QPU 上執行量子內核。3.優劣勢分析優劣勢分析 量子匯編語言和量子中間表示發展白皮書 58 XACC 提供了一種模塊化和可擴展的方法,其分層架構,促進了雙源,協處理器編程模型。量子代碼能表示為高級的內核,并進一步將這些內核表達式映射XACC-IR上。XACC-IR適用于低級量子程序的優化和分析,也能很方便的對接后端基礎設施,為硬件不可知的量子計算提供便利 通過接口實例化實現的 XACC-IR 在進一步
114、向下轉化時,存在一定的局限性。其能很方便的對接純量子的底層匯編語言,如 QASM,但對于經典量子混合匯編語言,如 QIR,則很難實現相應轉換。(五五)OriginIROriginIR OriginIR 是本源量子推出的一種量子匯編語言,主要包含量子比特、經典寄存器、量子邏輯門、轉置共軛操作、添加控制比特操作、QIf、QWhile和經典表達式。1.OriginIR 的特點的特點 OrigiIR 不僅可以表示絕大部分量子邏輯門類型,還增加了經典表達式的支持,并在此基礎上,提供了靈活的控制流模式,Qif 和QWhile,可以實現量子程序內嵌經典程序,除此之外 OriginIR 還提供了針對多個量子邏
115、輯門(子線路)的 control 和 dagger 的表達模式。2.工具鏈工具鏈 在工具鏈上 OriginIR提供了基于 C+的量子編程框架 QPanda和基于 Python 的量子編程框架 pyqpanda。使用 QPanda 或 pyqpanda 可以非常方便的實現 OriginIR 與編程框架中的數據結構互轉,進而實現 Origin-IR的編譯、優化、模擬計算等。3.優劣勢分析優劣勢分析 量子匯編語言和量子中間表示發展白皮書 59 OriginIR 是一種非常簡潔的量子中間語言,可以非常簡單緊湊的表達量子程序,不僅支持常規的量子邏輯門操作,還對經典的表達式做了適配,具備經典量子混合編程的
116、基礎。由于 OriginIR 還是基于比較傳統的匯編語言模式,對于比較高級的量子線路的編譯優化方式的支持尚有不足。(六六)isQisQ-IRIR 1.isQ-IR 量子中間表示特點量子中間表示特點 isQ 基于 MLIR 編譯框架,定義了經典量子混合中間表示 isQ-IR。MLIR 是一種分層的編譯框架,每一層都通過其方言(dialect)系統來表示。isQ 基于此在量子層面設計了對應的量子方言。該量子方言中,主要定義了量子類型,及一些列量子操作,如量子門的申明和使用,量子測量等。在經典層面,MLIR提供了許多現有的方言,包括仿射變換,數學運算,控制流等。量子方言與這些現有的經典方言共同構成了
117、 isQ-IR。isQ-IR利用MLIR的方言轉換接口,進行了多層的轉換優化。經典部分采用 MLIR 現有的優化層,主要包括常量傳播,函數內聯,循環優化等,量子部分則針對性的開發了多層轉化,主要包括量子門分解,量子電路綜合,量子電路優化等。經過這些優化,isQ-IR將被轉化到僅有 LLVM方言構成的 IR上,并最終生成到 QIR。isQ編譯器提供了isQ-IR到QIR的轉換,其中包括了上文提到的許多量子層面的優化組件,其工作流程大致為 isQ-IR-量子電路綜合-量子門分解-量子門轉化-量子電路優化-QIR。量子匯編語言和量子中間表示發展白皮書 60 為使 isQ-IR能對接到真實量子硬件上,
118、isQ編譯器提供了代碼生成模塊,可以進一步將 QIR 轉換到不同量子硬件匯編語言上。此外,isQ 編譯器還提供了量子比特映射算法,以便量子線路能運行在不同拓撲結構的硬件上。2.工具鏈工具鏈 isQ 是一種支持經典量子混合編程的領域專用語言。isQ 編譯器前端程序可以將 isQ 語言的源碼轉換為 isQ-IR。isq-opt 程序可以在isQ-IR上施加用戶選定的優化轉換方法。isQ 模擬器提供了 QIR 及一些量子硬件匯編語言(如 QCIS)的模擬運行功能。3.優劣勢分析優劣勢分析 isQ基于MLIR編譯框架去定義isQ-IR,可以在IR層面做許多優化工作。首先,利用 MLIR 現有的豐富的經
119、典方言及其優化轉化,可以輕松的實現經典層面的深度優化,避免了重復開發。量子方言中靈活的量子門使用方式為 isQ-IR 在量子層的優化提供了便利,結合 MLIR 轉化接口,我們可以很方便的在每一層優化中針對特定類型的量子操作進行優化。此外,MLIR轉化接口自帶的遞歸遍歷模式,為基于窺孔優化和模板匹配的量子電路優化算法帶來很大的便利。最后,由于 MLIR 現有的 LLVM 方言,isQ-IR 可以很自然的轉換到更底層的中間表示,如 QIR上。作為一款獨立的量子中間表示,目前 isQ-IR對于實時(real-time)量子計算有著很好的支持,但是對于近時(near-time)量子計算,需通過其他的宿
120、主語言,如 Python,來進一步實現。量子匯編語言和量子中間表示發展白皮書 61(七七)QuingoQuingo-IRIR 1.Quingo-IR 量子中間表示的特點量子中間表示的特點 一個語言的設計始終離不開編譯器的實現,語言中的諸多特性都需要編譯器所支持。Quingo-IR 則便是伴隨 Quingo 語言一同出現的Quingo編譯器中的中間表示,是一種特殊的數據結構。Quingo-IR是一款基于 MLIR 實現的中間表示,起到記錄高級語言原始信息等作用。目前,Quingo-IR 分為三種不同的方言:Quantum-Dialect、List-Dialect 以及 Timing-Dialec
121、t,以便記錄和應對對不同信息的優化和管理。Quantum-Dialect中預定義了一大類常用的quantum operation,并可以通過 json 文件定義內置量子門名稱、矩陣以及旋轉軸等基本量子操作所需的信息。這在限定內置 quantum operation 種類以方便后續量子優化的執行的基礎上,提供了有限度的靈活性。List-Dialect顧名思義則專門存儲了 List 等經典數據結構以便編譯期間對經典指令進行更多的優化。Timing-Dialect 則通過定義 TimingConstraintOp存儲高級語言中存在的時序語義以支持編譯器進行時序編譯。TimingConstraintO
122、p 使用仿射關系,描述任意兩個量子操作間的時序約束??偟膩碚f,基于 MLIR 的中間表示形式為后續的編譯優化帶來了很強的支持,以及多樣化的方言設計可以全方位的支持量子程序設計語言在實際應用中存在的多樣化的需求。2.工具鏈工具鏈 量子匯編語言和量子中間表示發展白皮書 62 由于 Quingo-IR是基于 MLIR框架實現的中間表示,所以其天然地可以使用與 MLIR 相關的所有工具鏈。特別是在量子編譯優化過程中的靜態優化階段,可以使用 MLIR 中本身提供的死代碼消除、常量傳播等優化手段,極大地提高工程效率與降低優化過程的復雜度。同時,在編寫量子線路相關的優化遍(Pass)時,可以復用 MLIR所
123、提供的模式匹配、操作重寫等工具,保證工程實現的正確性的同時,提高工程人員的代碼效率 3.優劣勢分析優劣勢分析 上一節已經提到由于 Quingo-IR與 MLIR進行了深度綁定,所以可以較好的運用經典編譯器中的優化方法優化量子程序的同時,也可以使用經典編譯器中的工具輔助實現量子編譯器,提高最終編譯器實現的正確性。此外,避免了重復造輪子并極大地提高了工程效率和工程實現的正確性。MLIR 所提供的方言系統,也保證了 Quingo-IR 在量子編譯優化的過程中不斷轉化為最適合相關優化轉換的數據結構,可以支持程序設計語言的多樣化的表達需求,如量子實驗中對各個量子操作發生時刻的精確描述;也可以較好地支持量
124、子門優化等優化遍的執行支持,如 Quingo-IR 還可以作為基礎中間表示轉化為 QSSA-IR 的形式。QSSA-IR 是一種量子靜態單賦值形式的中間表示,易轉化為有向圖等數據結構,可以有效存儲量子門之間的依賴關系,其常用于量子門消除等量子線路優化。但當前的Quingo-IR仍存在很多可以進步和改善的空間,引入并實現更多的方言以應對不同場景下的量子編譯優化、為每個量子操量子匯編語言和量子中間表示發展白皮書 63 作實現對應的 operation 種類方便優化過程中的選取和轉換等。作為一種工程中的產物,只有經過反復迭代和升級才是走向“成熟”的正道。(八八)其他其他 IRIR 除了上述量子中間表
125、示以外,一些研究機構和公司還提出了其他的量子中間表示,包括 QuSL、QSSA、QIRO、Catalyst IR 等。QuSL 是啟科量子開發的 QuTrunk 量子編程框架中的量子中間表示,它是一套類似 OpenQASM 的量子匯編語言。QuSL 主要特點是最左邊是一個量子門操作,中間加入(*)號鏈接符,最右邊是操作的量子比特,形如:Op(param)*qarg。QuSL量子匯編提供三個層面的量子操作語句實現,分別是:基礎量子門,量子算符和量子元操作。QSSA是基于SSA(Static Single Assignment,靜態單賦值,即每個變量只有唯一的賦值)的中間表示,它對于量子操作的建模
126、不是用副作用的方式實現的,而是讓量子操作的輸入和輸出一一對應,量子比特在執行量子操作的過程中不會被創造或銷毀。因此,量子線路完全可以編碼在定義使用鏈中,使得我們可以利用傳統 SSA 表示中的分析和優化方法,如冗余消除和死碼消除等,來對量子線路的編譯進行優化。QIRO也是一種基于 SSA的量子中間表示,它基于 MLIR的經典中間表示,通過直接暴露量子和經典數據之間的依賴關系來實現量子-經典程序協同優化。QIRO 中包含兩種方言,一種是輸入方言,另一種是為量子-經典協同優化而定制的方言。其中第一種方言使用了更加直觀的內存語義的方式來表示量子比特,量子操作作用在量量子匯編語言和量子中間表示發展白皮書
127、 64 子比特上不會消耗掉量子比特的值,而是通過副作用的方式影響該量子態。第二種方言使用值語義,即量子操作會被消耗掉,然后產生新的值。這樣就可以將量子的數據流集成到中間表示的 SSA 圖中,并且能夠使用基于數據流分析的大量優化手段。QIRO 支持在應用程序的規模上進行量子-經典協同優化。Catalyst-IR 是一種基于 MLIR 的量子中間表示,它是用于Pennylane 這個量子程序設計語言的即時編譯器 Catalyst 的中間表示。Catalyst-IR 定義了一種新的量子方言,將量子操作表示為狀態值,從而實現數據流分析和優化。Catalyst-IR 還支持量子和經典的梯度方法、控制流和
128、設備后端。在使用 Pennylane 編寫的量子程序中,可以使用qjit裝飾器調用 Catalyst 編譯器。(九九)小結小結 當前量子中間表示已經有不少有價值的成果。這些紛繁多樣的量子中間表示,可以根據它們在量子程序設計和量子應用軟件中所處的位置,分成 3 類,如下表所示:表 5 量子中間表示的分類31 面向特定應用 XACC-IR,Catalyst IR 與應用和硬件無關 QIRO,QSSA,isQ-IR,Quingo-IR 面向特定硬件 ScaffCC-IR,QuSL,QIR,OriginIR 其中處于最上層的,是面向特定應用的量子中間表示,比如其中的 XACC-IR,主要針對的是經典-
129、量子混合算法的應用。處于中間 31 來源:量子信息網絡產業聯盟 量子匯編語言和量子中間表示發展白皮書 65 層的量子中間表示,與應用和硬件均無關,主要面向整個量子計算過程的加速和優化,比如 QIRO,支持多種的轉換方法,加快了編譯的過程。最為底層的量子中間表示,能夠直接編譯成硬件可執行的代碼,比如 QIR,在經典的編譯部分,可以直接編譯到 LLVM 所支持的硬件上然后運行。當前量子計算的發展尚未穩定,量子應用仍在探索,量子硬件存在多條路線、多種體系,如何構建一套同時適合不同量子應用和量子硬件體系的量子中間表示,在工程上仍然極富挑戰。對于量子應用的開發人員,可以考慮自上而下,根據特定量子計算任務
130、來構建一套量子中間表示。而對于量子硬件的開發人員來說,可以自下而上。先定義好底層的量子硬件的編程模型,然后再來構建整套量子中間表示。量子應用和量子硬件兩個方向同時推進,才能構建出合適的量子中間表示。在經典計算領域,有 LLVM IR/MLIR 這兩種強大的編譯器基礎設施的優秀實踐。對于經典-量子混合的編程模型來說,基于 LLVM IR/MLIR 來構造量子中間表示,是比較高效的實現路徑,也是目前大多數量子中間表示,如 QIR、isQ-IR、Quingo-IR、Catalyst-IR等的實現方法。同時我們也注意到,量子中間表示的發展,離不開強大的生態支持。目前在國外,已經有不少量子中間表示生態,
131、比如 QIR,通過建立 QIR-Alliance聯盟,依托 Linux 基金會方式運作,其成員包括了主要的量子計算企業和重要的研究機構,目前已經具備較為完善的軟件生態鏈。同時需要注意的是,能夠被廣泛支持的量子中間表示,往往是從開源軟件中發展出來的,這一點可以從 LLVM IR/MLIR 的成功中得到借鑒。目前從產業鏈角度,可以依托量子信量子匯編語言和量子中間表示發展白皮書 66 息產業聯盟和相應的開源基金,共同推進聯盟內量子中間表示規范的制定和推廣。量子匯編語言和量子中間表示發展白皮書 67 五、總結展望與建議(一一)總結總結 前文我們已經詳細介紹了量子編程語言的三個重要組成部分:高級量子程序
132、設計語言,量子匯編語言和量子中間表示。這些部分都已經有不少優秀的成果。高級量子程序設計語言存在嵌入式和獨立式量子程序設計語言兩種類型,其中嵌入式量子程序設計語言目前主要是基于 Python 的擴展語言,目前主要的量子計算廠商都是走這個路線。而獨立式量子程序設計語言主要是基于學術成果。量子匯編語言是量子計算機軟硬件之間的通用接口。目前量子硬件發展尚未成熟,諸如測量反饋功能尚未穩定完善,而量子匯編語言與硬件耦合過于緊密,導致還沒有一個足夠成熟的設計,能夠滿足不同方面的需求。量子中間表示作為量子編譯器的基礎,目前在面向特定應用、與應用和硬件均無關以及面向特定硬件這三個層次上也各有不少成果,但是總體上
133、仍處于發展的早期階段??偟膩碚f,量子編程語言目前部分發展較快,總體上仍未完全成熟。量子編程語言作為量子計算工程化的重要一步,只有反復的迭代和升級,才能逐步走向成熟,這個過程中的發展離不開廣大用戶和開發者的支持。下面的表 6和表 7統計了部分高級量子程序設計語言和量子中間表示(或者相應的編譯器)的生態構建情況。從表中的數據可以看到,作為整個量子編程語言上層的高級量子程序設計語言在生態上最為活躍,可能原因是高級量子程序設計語言作為直接面向用戶的接口,被很多量子計算初創企業所重視,作為生態建設的重要部分。而量子中間表示以及相應的編譯器,由于跟底層硬量子匯編語言和量子中間表示發展白皮書 68 件的發展
134、相關,目前更多的是進行一些學術研究探索,在生態建設上仍有較大的發展空間。量子匯編語言更多是作為一種與底層量子計算硬件溝通的標準和規范,在此沒有對其生態統計。表 6 高級量子程序設計語言的生態統計32 高級量子程序設計語言 star fork 下載次數(萬)論文引用次數 Qiskit 4185 2163 395.4 952 ProjectQ 859 271 17.0 589 MindSpore Quantum 1474 2575 2.1 11 Qpanda 1196 100 37.0 5 isQ 38 14 2 Quingo 27 8 13 Qrunes 19 2 2 表 7 量子中間表示(或編
135、譯器)的生態統計33 量子中間表示 star fork 論文引用次數 ScaffCC 184 55 340 XACC 156 76 140 QIR 47 16 QIRO 2 2 10 Quingo 19 8 13 此外,領先的科技巨頭 IBM 在量子生態建設方面也已經取得了一定的優勢,依托于其在全球內構建的量子硬件合作網絡,在高級量子程序設計語言Qiskit上,遠遠領先于其他對手。國內的公司和研究機構在量子編程方面起步相對較晚,并且整體的生態建設主要是 32 來源:量子信息網絡產業聯盟。截止到 2023 年 12 月,下載次數統計來自 pypi,獨立式語言未做統計。論文引用次數統計來自 Goo
136、gle Scholar 33 來源:量子信息網絡產業聯盟。截止到 2023 年 12 月 量子匯編語言和量子中間表示發展白皮書 69 集中在國內,沒有擴展到全世界,因此在量子編程語言的生態上相較于美國科技巨頭有一定的差距。(二二)展望展望和建議和建議 當前量子計算正處于高速發展的階段。預計未來幾年,基于超導量子電路和里德堡原子技術的量子計算機硬件普遍能實現超過1000 量子比特的計算能力。在這種硬件條件下,量子應用在未來幾年有更廣闊的發展空間和更多超越經典計算的潛力。量子計算正迎來大規模的應用爆發期,而量子編程語言作為構建量子應用的基礎,尤其是其中與量子硬件關系更為密切的量子匯編語言和量子中間
137、表示,其發展水平對于量子應用來說尤為重要。展望未來,我們認為量子編程語言的整體發展要以同時滿足量子硬件和量子應用的需求為出發點,繼續豐富功能。首先,從硬件發展的角度看,作為與量子硬件直接對接的量子匯編語言,仍然需要保持多樣性,以適應特定硬件的發展需求。在這個基礎上,隨著量子硬件的逐步成熟,量子匯編語言需要針對特定的量子硬件,完善整體的控制邏輯框架,定義好抽象層次,以適應好上層的量子應用對于量子計算的更高需求。其次,基于量子中間表示需要發展更高級的編譯優化技術。當前針對每個具體量子計算問題的實例,通常情況是,自定義的底層運算邏輯要比通用編譯出來的算法表現力更好(這種情況同樣存在于經典高性能計算中
138、)。而且當前很多相關的研究工作主要集中在低層次的電路優化上,專注于純量子部分,而不是整個程序結構上的優化。因此,在量子中間表示上也要參考傳統編譯器的中間表示,量子匯編語言和量子中間表示發展白皮書 70 支持高層次的控制流構造和優化。同時結合不同層次的量子中間表示,能夠對量子計算應用構建通用的編譯解決方案。最后,在高級量子程序設計語言上,一方面可以根據特定的量子應用場景來進行構造。比如現在最常見的量子應用場景是經典-量子混合算法,很多高級量子程序設計語言都以這個模型為基礎進行構造。未來隨著量子硬件的不斷成熟,可以進一步考慮基于通用糾錯型量子計算機進行構造。另外一方面,可以參考經典語言的邏輯模型來
139、構造高級量子程序設計語言,以降低新入門的量子應用開發者的門檻。同時我們也要清醒的認識到,雖然量子計算各個領域一直在快速發展,涌現出不少優秀的成果,但是能夠在實際中產生實用價值的成熟量子應用并未出現。作為量子應用構建基礎的量子編程語言,雖然發展迅速,但是也可以說是尚處于起步探索階段,不同層次的量子編程語言均在不斷更迭,距離實現成熟的通用架構和語言尚需時日。在量子計算逐步發展的過程中需要保持耐心,保持穩定且持續的投入,推動整個量子計算的編程語言和應用場景逐步走向成熟。與此同時,與國外的發展現狀對比,可知我國量子編程語言領域整體起步稍晚,產品較少。為避免重蹈在經典計算機領域的基礎軟件落后于西方國家的
140、覆轍,未來應考慮加強政策及資金支持,引導和推動量子計算軟硬件一體化協同發展,注重交叉領域人才培養,協調各相關領域人才通力合作,統籌發展,加緊布局,為我國未來量子計算的國際地位夯實基礎。量子匯編語言和量子中間表示發展白皮書 71 附錄:中英文詞匯對照表 英文全稱 英文縮寫 中文翻譯 Control ArChiTectUre Simulater CACTUS 控制體系結構模擬器 Directed Acyclic Graph DAG 有向無環圖 Dialect 方言 embedded Domain-Specific Language eDSL 嵌入式領域特定語言 Heterogeneous Quan
141、tum-Classical Computation HQCC 量子-經典異構計算 High-level Quantum Programming Language HQPL 高級量子程序設計語言 Intermediate Representation IR 中間表示 Noisy Intermediate-Scale Quantum NISQ 中等規模含噪聲量子 Pass 優化遍 Quantum Intermediate Representation QIR 量子中間表示 Quantum Assembly Language QASM 量子匯編語言 Quantum Random Access Machine QRAM 量子隨機存取機 Quantum Control Instruction Set QCIS 量子控制指令集 Single Gate Multiple-Qubits SGMQ 單門多量子比特 Set Mask Immediate for Single Operations SMIS 指定單個目標量子比特 Set Mask Immediate Two-qubit Operations SMIT 指定兩個目標量子比特 Static Single Assignment SSA 靜態單賦值