量子中繼表示法

Quantum Intermediate Representation (QIR) 是中繼表示法,可作為量子程式設計語言/架構與 targeted 量子計算平臺之間的通用介面。 QIR 會指定一組規則,以在 LLVM IR 中使用語言和硬體無關格式來代表量子程式。 QIR 是由 QIR 聯盟所開發的專案,Microsoft 是其其中一個成員。

什麼是中繼表示法?

傳統編譯程式中的常見模式是從將來源語言編譯成中繼表示法開始。 中繼表示法是 , 如同其名稱, 是將指令從原始碼轉換為電腦語言的中繼步驟。

中繼表示法可作為程式的抽象表示法。 不論其撰寫的語言為何,所有程式都會由所謂的前端編譯程序轉譯成此中繼表示法,而後端元件負責將該中繼表示法轉譯成機器表示法。 中繼表示法可讓來源語言與硬體平臺分離,並能夠以模組化的方式建置編譯程式,其中每個新語言只需要在後端可用的所有平臺上都支援新的前端。

中繼表示通常設計成允許代表許多不同的來源語言。 此外,在這個中繼層級,也可以執行一些優化和線路重新排列,讓最終實作更有效率。 一旦知道最終 target 執行平台之後,中繼表示法就可以編譯為實際的可執行程序代碼。

這種方法可讓許多來源語言共用一組常見的優化工具和可執行產生器。 它也可讓您輕鬆地針對許多不同的 targets編譯單一原始程序語言。 中繼表示法提供可跨許多來源共用的通用平臺,並允許 targets 在編譯程式機制中重複使用大量。

什麼是 Quantum Intermediate Representation?

QIR 是 MICROSOFT 所屬 QIR 聯盟所開發量子程式的中繼表示法。 它提供一個通用介面,可支援許多語言和 target 平臺進行量子計算。 您可以將 QIR 視為通用中間層語言,以啟用高階語言與機器之間的通訊。 雖然 Q# 編譯為 QIR,但 QIR 不是特定的 Q#:任何量子程式設計架構都可以利用 QIR 來代表量子程式。 它與硬體無關,這表示它未指定量子指令或網關集,而將它 target 保留在運算環境中。

QIR 是以熱門的開放原始碼 LLVM 傳統編譯程式為基礎。 LLVM 是模組化且可重複使用的編譯程式和工具鏈技術集合,由一組廣泛的語言所調整。 QIR 會指定一組規則來代表 LLVM 中的量子建構,不過它不需要對 LLVM 進行任何延伸或修改。

LLVM 是基礎工具鏈的事實,表示 QIR 自然能夠同時處理傳統和量子邏輯。 這項功能對於混合式量子傳統演算法而言非常重要,這對量子運算的應用程式而言越來越重要。 此外,它可讓您利用傳統運算產業的編譯和優化工具,因此,降低撰寫翻譯的成本。

許多領先量子運算產業都已經採用 QIR。 例如,NVIDIA、National 一個實驗室、Quantinuum、Quantum Circuits Inc.和 Rigetti 運算都是建置利用 QIR 的工具鏈。

如需詳細資訊,請參閱 QIR 規格。 如果您對使用 QIR 的編譯程式工具和專案感興趣,請參閱這些 QIR 存放庫

什麼是 QIR 聯盟?

QIR 聯盟是一個共同努力,以開發向前看的量子中繼表示法,目標是在量子生態系統中啟用完整的互操作性、減少來自所有合作對象的開發工作,並提供適合目前和未來異品質子處理器的表示法。

量子 SDK 和語言會以快速步調出現並演進,以及具有彼此獨特且不同功能的新量子處理器。 為了提供新語言與新硬體功能之間的互操作性,生態系統必須開發及共用與目前和未來量子硬體搭配運作的中繼表示法。

QIR 聯盟在其共同工作和合作關係中的目標是:

  • 藉由提升不同架構與語言之間的互操作性,減少所有合作物件所需的開發工作。
  • 針對量子應用程式開發,以及量子編譯程式開發啟用共用連結庫的開發。
  • 建置在最先進的編譯程式技術上,並運用現有的工具、連結庫和高效能運算的學習。
  • 允許在硬體層級進行傳統和量子計算如何互動的累加和漸進式演進。
  • 提供彈性,以允許以不同且區分的硬體功能進行實驗的方式,輕鬆連接新興技術。

QIR 聯盟是 Linux Foundation聯合開發基礎的 一部分,可處理開放式標準。 建立成員包括 Microsoft,以及 Quantinuum (先前稱為 Honeywell) 、National 一家實驗室、Quantum Circuits Inc. 和 Rigetti Computing。

看起來是什麼 Quantum Intermediate Representation 樣子?

由於 QIR 是以 LLVM 為基礎,因此 QIR 看起來像 LLVM。

例如,請考慮下列 Q# 程式代碼來產生鈴鐺配對:

operation CreateBellPair(q1 : Qubit, q2 : Qubit) : Unit {
    H(q1);
    CNOT(q1, q2);
}

編譯為 QIR 時,這會變成:

define void @CreateBellPair__body(%Qubit* %q1, %Qubit* %q2) {
entry:
  call void @__quantum__qis__h(%Qubit* %q1)
  call void @__quantum__qis__cnot(%Qubit* %q1, %Qubit* %q2)
  ret void
}

在此代碼段中,您可以看到一些 QIR 功能:

  • (或任何其他量子程式設計語言) 中的 Q# 作業是由 LLVM 函式表示。
  • 量子位會以名為 的具名不透明結構類型 %Qubit指標表示。

雖然作業的 CreateBellPair QIR 非常簡單,但 QIR 會繼承 LLVM 的所有功能,以表達迴圈、條件和其他複雜的控制流程。 QIR 也會繼承 LLVM 表達任意傳統計算的能力。

如需詳細資訊,watch 2021 Q2B 事件的 Microsoft 開發人員會話。

為什麼很重要 Quantum Intermediate Representation ?

QIR 是在實際硬體上執行量子演算法時不可或缺的工具。 但中繼表示法可以扮演重要角色,即使您只想在更理論上的層級開發演算法也一樣。

例如,QIR 所啟用的一個應用程式是使用適用於 LLVM 的 C 語言前端 C 語言編譯程式,將 QIR 編譯成傳統 target的可執行機器程式代碼。 藉由實作量子指令,這可讓您輕鬆地在 C 或 C++ 中建置模擬器,以簡化量子模擬器的建立。

此外,您可以使用中繼表示法來產生稍後提供作為量子模擬器輸入的程序代碼,而不是實際裝置,這可能會使用與原始程式碼不同的語言。 如此一來,您可以輕鬆地使用通用架構來比較和基準檢驗不同的語言或模擬器。

就程式代碼優化而言,您可以在中繼層級執行優化步驟,讓整體演算法實作更有效率。 調查輸入程式代碼的這項優化可協助您進一步瞭解讓演算法更有效率的位置,以及如何改善量子程式設計語言。

另一個應用程式是使用標準 LLVM「傳遞」基礎結構來建立在 QIR 上運作的量子程式代碼優化器。 QIR 的語言和硬體獨立方法可重複使用這些優化器,幾乎不費力地重複使用不同的計算語言和運算平臺。

下一步