共用方式為


量子中繼表示法

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

什麼是中繼表示法?

傳統編譯程式中的常見模式是從將來源語言編譯成中繼表示法開始。 中繼表示法是 – 正如其名稱所示 – 從原始碼轉換為計算機語言的指示的中繼步驟。

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

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

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

什麼是 Quantum Intermediate Representation?

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

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

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

許多領先的量子運算產業已經採用 QIR。 例如,NVIDIA、橡樹嶺國家實驗室、Quantinuum、Quantum Circuits Inc.和 Rigetti Computing 正在建置利用 QIR 的工具鏈。

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

什麼是 QIR 聯盟?

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

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

在他們的集體工作和夥伴關係下,QIR 聯盟的目標是:

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

QIR 聯盟是Linux基金會聯合開發基金會開放標準的一部分。 創始成員包括Microsoft,以及昆蒂努姆(前霍尼韋爾)、橡樹嶺國家實驗室、量子電路公司和里蓋蒂運算。

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

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

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

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的具名不透明結構類型的指標。

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

如需詳細資訊,請觀看 Microsoft 2021 年第 2021 季 2B 事件的開發人員會話

為什麼很重要 Quantum Intermediate Representation ?

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

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

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

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

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