入門 OpenQASM
OpenQASM (オープン量子アセンブリ言語)は、 IBM® QPUと互換性のあるマシンに依存しないプログラミング・インターフェースで、量子回路を記述するための命令型プログラミング言語である。 OpenQASM は、量子回路モデルを用いて、量子プログラムをパラメータ化された操作(ゲート、測定、リセットなど)の順序シーケンスとして表現し、古典的な計算をリアルタイムで実行する。 量子アルゴリズムに加えて、 OpenQASM、量子プロセッサの特性評価、検証、デバッグを目的とした回路を記述することができる。
QPU開発のニーズが進化するにつれ、 OpenQASM's の機能リストも拡大してきました。最新版である OpenQASM 3 では、古典的なフィードフォワードフロー制御、ゲート修飾子、パルス実装などの拡張機能が組み込まれています。
OpenQASM は、その汎用性の高さから、さまざまな観客に選ばれている。 OpenQASM 3紙1 の序文に例がある:
" OpenQASM "は高級言語ではないが、多くのユーザーは、表現力豊かなドメイン固有言語を使って簡単な量子回路を手で書きたいと考えている。 回路コンパイルを研究する研究者は、最適化と合成アルゴリズムに情報を提供するために、中間表現に記録された高レベルの情報を必要としている。 実験者は、比較的高いレベルで回路を記述できる利便性を好むが、回路のさまざまな箇所でタイミングやパルスレベルのゲート記述を手作業で修正する必要があることが多い。 古典的なコントローラと波形発生器を設計するハードウェア・エンジニアは、ハードウェアの制約を考慮した上でコンパイルが実用的で、コントローラが利用できる回路構造を明示する言語を好む。"
OpenQASM は、独立した量子ソフトウェアツールの間で共通の交換フォーマットです。 あるツールは回路構築に、別のツールはトランスパイルに、といった使い分けを好む開発者にとって、 OpenQASM はその橋渡しをする共通言語なのだ。
Qiskit SDKは、 OpenQASM と QuantumCircuit クラスの間で変換する方法が用意されています (手順については OpenQASM 2 と Qiskit および OpenQASM 3 と Qiskit を参照してください)。
詳細については、 OpenQASM のライブ仕様書をご覧ください。
OpenQASM コード例: cat state
OPENQASM 3;
include "stdgates.inc";
const n = 3; // number of qubits
qubit[n] q; // a register 'q' of n qubits
bit[n] c; // a register 'c' of n classical bits
h q[0]; // Hadamard
for k in [0:n-1] {
cnot q[k], q[k+1]; // Controlled-NOT from control qubit q[k] to target qubit q[k+1]
}
c = measure q; // measure quantum register
次のステップ
- IBM Quantum Composerのガイドで、 OpenQASM コードを生成する方法を学んでください。
- OpenQASM 3の機能一覧表を確認する。
- OpenQASM 3 Qiskit API リファレンスを読む。
- OpenQASM 2 Qiskit API リファレンスを読む。
- OpenQASM ライブ仕様をご覧ください。
Footnotes
-
Andrew W. Cross et al. ""OpenQASM 3: A broader and deeper quantum assembly language," ACM Transactions on Quantum Computing, Volume 3, Issue 3 (2022). https://doi.org/10.48550/arXiv.2104.14722 ↩