量子ソフトウェア開発環境について俯瞰したいと思ってまとめ記事を作成しました。次の内容で分割した連載記事になる予定です。
- 量子アセンブリ言語
- 量子プログラミング言語
- 量子SDK
- 量子クラウドコンピューティング
この記事では「量子アセンブリ言語」を紹介します。比較表で量子アセンブリ言語の違いをまとめてあります。
それぞれの言語ごとに論文へのリンクと ベル状態(Bell state) のコードサンプルを載せています。
量子アセンブリ言語とは
量子アセンブリ言語とは量子コンピュータやそのシミュレータを動かすためのプログラミング言語でハードウェアには直接依存しません。量子アセンブリ言語を使って量子回路を操作したり値を測定するコードを記述します。
量子アセンブリ言語の比較
主要な量子アセンブリ言語を開発年順に並べました。
量子アセンブリ言語 | サポート団体 | 開発年 | ライセンス | 実行環境(シミュレータ) |
---|---|---|---|---|
QMASM | D-wave | 2016 | BSD-ish | D-Wave Ocean |
Quil | Rigetti | 2016 | APL2.0 | qvm |
OpenQASM | IBM | 2017 | APL2.0 | IBM Q Emulator |
cQASM | QuTech | 2018 | APL2.0 | QX emulator |
Blackbird | Xanadu | 2019 | APL2.0 | Strawberry Fields simulator |
量子アセンブリ言語 (Quantum instruction sets)
QMASM
QMASM は D-wave が開発した量子アセンブラ。量子アニーリング型コンピュータで組み合わせ最適化問題を解くための言語。論文 は 2016年に公開されました。
量子アニーリング型のためコードサンプルなし
Quil
Quil は Rigetti がサポートしているアセンブリ言語。2016年に 論文 があります。
PyQuil で Quil のプログラムを生成して quilc でコンパイルします。qvm でシミュレーションできます。
Quil のコード
H 0
CNOT 0 1
OpenQASM
OpenQASM は IBM Q が対応しているアセンブリ言語。現状では v3 のドラフトを策定中。OpenQASM v1 と OpenQASM v2 の論文がそれぞれ公開されています。
OpenQASM 2.0 による Bell state のコードサンプル
OPENQASM 2.0;
include "qelib1.inc";
qreg q[2];
creg c[2];
reset q[0];
h q[0];
reset q[1];
cx q[0],q[1];
measure q[0] -> c[0];
measure q[1] -> c[1];
cQASM
cQASM は QuTech がサポートしてる量子アセンブリ言語。2018年に cQASM v1.0: Towards a Common Quantum Assembly Language の論文が公開されている。libqasm という名前のライブラリで提供されていて C と Python の API があります。
cQASM による Bell state のコードサンプル
qubits 2
.prepare
prep_z q[0:1]
.entangle
H q[0]
CNOT q[0], q[1]
.measurement
measure_all
Blackbird
Blackbird は Xanadu がサポートするアセンブリ言語。フォトニックモードを使います。2019年に公開された 論文 があります。
Blackbird を使った Bell state のサンプルコード
version 1.0
target X8_01 (shots=1)
Vac | 0
Vac | 1
BSgate(pi/4, pi) | (0, 1)
Rgate(pi/2) | 1
MeasureFock() | 0
MeasureFock() | 1
参考文献