量子中間表現
Quantum Intermediate Representation (QIR) は、量子プログラミング言語/フレームワークとターゲット量子計算プラットフォーム間の共通インターフェイスとして機能する中間表現です。 QIR では、LLVM IR 内で言語およびハードウェアに依存しない形式を使用して量子プログラムを表す一連の規則が指定されます。 QIR は、Microsoft がそのメンバーの 1 つである QIR Alliance によって開発されたプロジェクトです。
中間表現とは
従来のコンパイラの一般的なパターンでは、最初にソース言語が中間表現にコンパイルされます。 中間表現は、その名前が示すように、ソース コードからマシン言語への、命令の変換の中間ステップです。
中間表現は、プログラムの抽象表現として機能します。 すべてのプログラムは、その記述言語に関係なく、いわゆるフロントエンド コンパイラによってこの中間表現に変換され、バックエンド コンポーネントが、その中間表現をマシン表現に変換する役割を担います。 この中間表現により、ソース言語をハードウェア プラットフォームから切り離すことができ、モジュール形式でコンパイラを構築できます。各新しい言語では、バックエンドを使用できるすべてのプラットフォームで新しいフロントエンドをサポートするだけで済みます。
中間表現は、通常、さまざまなソース言語を表現できるように設計されています。 さらに、この中間レベルでは、最終的な実装をより効率的にする、最適化と回路の再配置を実行することもできます。 最終的な target 実行プラットフォームがわかったら、中間表現を実際の実行可能コードにコンパイルできます。
この方法により、多くのソース言語で、一般的なオプティマイザーと実行可能ファイル ジェネレーターのセットを共有できます。 また、さまざまな targetsに対して 1 つのソース言語を簡単にコンパイルできます。 中間表現は、多くのソースと targets 間で共有できる共通のプラットフォームを提供し、コンパイラの機械で多くの再利用を可能にします。
Quantum Intermediate Representation の概要
QIR は、Microsoft が属する QIR Alliance によって開発された量子プログラム用の中間表現です。 量子計算のために多くの言語と target プラットフォームをサポートする共通のインターフェイスを提供します。 QIR は、高レベルの言語とマシン間の通信を可能にするユニバーサル中間層言語と考えることができます。 Q# は QIR にコンパイルされますが、QIR は Q# に固有のものではありません。すべての量子プログラミング フレームワークで、QIR を利用して量子プログラムを表すことができます。 これはハードウェアに依存しないため、量子命令またはゲート セットを指定せず、 target コンピューティング環境に任されています。
QIR は、広く普及しているオープンソースである LLVM クラシック コンパイラに基づいています。 LLVM は、モジュール式で再利用可能なコンパイラおよびツールチェーン テクノロジのコレクションであり、幅広い言語セットによって適応されています。 QIR では LLVM で量子コンストラクトを表す一連の規則が指定されますが、LLVM の拡張や変更は必要ありません。
基になるツールチェーンが LLVM であるということは、QIR が古典的ロジックと量子ロジックの両方を自然に処理できることを意味します。 この機能は、量子コンピューティングのアプリケーションにとってますます重要になっているハイブリッド量子古典的アルゴリズムに不可欠です。 さらに、従来のコンピューティング業界のコンパイルおよび最適化のツールを利用できるため、変換を記述するコストを削減できます。
多くの主要な量子コンピューティング業界では、既に QIR が採用されています。 たとえば、NVIDIA、Oak Ridge National Laboratory、Quantinuum、Quantum Circuits Inc.、Rigetti Computing は、QIR を活用するツールチェーンを構築しています。
詳細については、 QIR 仕様を参照してください。 QIR を使用するコンパイラ ツールとプロジェクトに関心がある場合は、これらの QIR リポジトリを参照してください。
QIR アライアンスとは
QIR Alliance は、量子エコシステム内で完全な相互運用性を実現し、すべての関係者からの開発作業を削減し、現在および将来の異種量子プロセッサに適した表現を提供することを目的とした、将来の量子中間表現を開発するための共同取り組みです。
量子の SDK と言語は、速いペースで出現し、進化しており、互いに独自の異なる機能を備えた新しい量子プロセッサも同様です。 新しい言語と新しいハードウェア機能の相互運用性を提供するには、エコシステムが現在および将来の量子ハードウェアと連携する中間表現を開発して共有することが不可欠です。
QIRアライアンスは、共同で以下を目的としています。
- 異なるフレームワークと言語間の相互運用性を促進することで、すべての関係者の必要な開発作業を削減する。
- 量子アプリケーションの開発と量子コンパイラの開発の両方の共有ライブラリを開発できるようにする。
- 最先端のコンパイラ テクノロジを基に構築し、ハイパフォーマンス コンピューティングの既存のツール、ライブラリ、経験を活用する。
- 従来の計算と量子計算をハードウェア レベルで対話させる方法の段階的かつ斬新的な進化を実現する。
- 独自の差別化されたハードウェア機能を使用した実験を可能にする方法で、新しいテクノロジを簡単に組み込める柔軟性を提供する。
QIR Alliance は、Linux Foundation のオープン標準に関する共同開発財団の取り組みの一部です。 設立メンバーには、Microsoft のほか、Quantinuum (旧ハニーウェル)、オーク リッジ国立研究所、Quantum Circuits Inc.、Rigetti Computing が含まれます。
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
と呼ばれる名前付き不透明構造体型へのポインターとして表されます。
CreateBellPair
演算の QIR は非常に単純ですが、QIR は、ループ、条件、およびその他の複雑な制御フローを表現する LLVM のすべての機能を継承します。 QIR は、任意の古典的計算を表現する LLVM の機能も継承します。
詳細については、2021 Q2B イベントの Microsoft の開発者セッションをご覧ください。
Quantum Intermediate Representationが重要なのはなぜですか?
QIR は、実際のハードウェアで量子アルゴリズムを実行する際に不可欠なツールです。 ただし、より理論的なレベルでアルゴリズムを開発するだけの場合でも、中間表現は重要な役割を果たします。
たとえば、QIR で有効になっているアプリケーションの 1 つは、
さらに、中間表現を使用して、後で実際のデバイスの代わりに量子シミュレーターへの入力として提供されるコードを生成できます。これは、ソース コードとは異なる言語を使用する可能性があります。 このようにして、共通のフレームワークを使用して、さまざまな言語またはシミュレーターを簡単に比較してベンチマークできます。
コードの最適化に関しては、アルゴリズムの全体的な実装をより効率的にする中間レベルで実行できる最適化手順があります。 入力コードでこのような最適化を調査すると、アルゴリズムをより効率的にする場所と、量子プログラミング言語を改善する方法をより深く理解するのに役立ちます。
もう 1 つのアプリケーションは、標準の LLVM "pass" インフラストラクチャを使用して、QIR で動作する量子コード オプティマイザーを作成することです。 言語とハードウェアに依存しない QIR のアプローチにより、これらのオプティマイザーをさまざまな計算言語やコンピューティング プラットフォームで再利用でき、ほとんど手間はかかりません。