メインコンテンツへスキップ

OpenQASMの概要

OpenQASM(オープン量子アセンブリ言語)は、IBM® QPUと互換性を持つ機械非依存のプログラミングインターフェースであり、量子回路を記述するための命令型プログラミング言語です。OpenQASMは量子回路モデルを使用し、量子プログラムをパラメータ化された演算(ゲート、測定、リセットなど)とリアルタイム古典計算の順序列として表現します。量子アルゴリズムに加えて、OpenQASMは量子プロセッサの特性評価、検証、デバッグを目的とした回路の記述にも対応しています。

QPU開発のニーズの進化に伴い、OpenQASMの機能リストも拡充されてきました。最新バージョンであるOpenQASM 3は、古典フィードフォワードフロー制御、ゲート修飾子、パルス実装などの拡張機能を取り込んでいます。

OpenQASMはその汎用性の高さから、さまざまなユーザー層に選ばれています。OpenQASM 3の論文1の序文には、次のような例が挙げられています。

「OpenQASMは高水準言語ではありませんが、多くのユーザーは表現力豊かなドメイン固有言語を使って簡単な量子回路を手書きしたいと考えています。回路コンパイルを研究する研究者は、最適化・合成アルゴリズムに役立てるため、中間表現に記録された高水準情報を必要とします。実験者は比較的高い抽象レベルで回路を記述できる利便性を好む一方、回路の各所でタイミングやパルスレベルのゲート記述を手動で修正する必要がしばしばあります。古典コントローラやwave形成器を設計するハードウェアエンジニアは、ハードウェアの制約のもとでコンパイルが現実的であり、コントローラが活用できる明示的な回路構造を備えた言語を好みます。」

OpenQASMは、独立した量子ソフトウェアツール間で共通の交換フォーマットとして機能しています。回路の構築には別のツール、トランスパイルにはまた別のツール、というように使い分けたい開発者にとって、OpenQASMはそれらを橋渡しする*共通語(リンガ・フランカ)*です。

Qiskit SDKは、OpenQASMとQuantumCircuitクラスの間での相互変換手段を提供しています(手順についてはOpenQASM 2とQiskitおよびOpenQASM 3とQiskitを参照してください)。

詳細については、OpenQASMライブ仕様をご覧ください。

OpenQASMコード例:猫状態


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

次のステップ

おすすめの参考資料

Footnotes

  1. 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