警告Emptor:以下は、私自身の研究とQCの分野に関する見解に大きく偏っています。これは、この分野の一般的なコンセンサスを構成するものではなく、自己宣伝が含まれる場合もあります。
量子コンピューティングの「ハローワールド」を示す問題は、ライプニッツまたはバベッジが現在のコンピューターから離れていたのと同じくらい基本的に量子コンピューターから遠いということです。それらが理論的にどのように動作するかはわかっていますが、物理的な量子コンピューターを実際に構築する標準的な方法はありません。その副作用は、量子コンピューティングの単一のプログラミングモデルがないことです。ニールセンなどの教科書 「量子回路」図が表示されますが、これらは正式なプログラミング言語とはほど遠いものです。古典的な制御や入力/出力/測定結果の処理などの詳細について少し「手を振る」ことができます。
プログラミング言語のコンピューター科学者としての私の研究で私に最も適しているのは、QCの精神を他のコンピューター科学者に伝えるために、私が遭遇した最も単純なQCモデルを使用することです。
すべての重要な要素を含む最も単純な量子計算プログラムは、私が遭遇した最も単純な量子プログラミングモデルの小さな3命令プログラムです。基本を理解するために「こんにちは世界」と同じように使用します。
ダノス他による測定計算の簡単な要約を簡単に与えさせてください。に 基づいている1は一方向量子コンピューターに基づいています2:量子ビットは測定時に破壊されますが、それを測定すると、量子ビットと絡み合った他のすべての量子ビットに影響します。フォトニックチップによって実現される「回路ベース」の量子コンピューターよりも理論的および実用的な利点がいくつかありますが、それは別の議論です。
N、E、M、X、Zの5つの命令しか持たない量子コンピューターを考えてみましょう。その「アセンブリ言語」は通常のコンピューターに似ています。1つの命令を実行すると、シーケンス内の次の命令に進みます。各命令は、ターゲットの量子ビット識別子を取ります。ここでは、数字と他の引数のみを使用します。
N 2 # create a new quantum bit and identify it as '2'
E 1 2 # entangle qubits '1' and '2', qubit 1 already exists and is considered input
M 1 0 # measure qubit '1' with an angle of zero (angle can be anything in [0,2pi]
# qubit '1' is destroyed and the result is either True or False
# operations beyond this point can be dependent on the signal of '1'
X 2 1 # if the signal of qubit '1' is True, execute the Pauli-X operation on qubit '2'
したがって、上記のプログラムは補助器を作成し、入力キュービットと交絡させ、入力を測定し、測定結果に応じて補助器で操作を実行します。その結果、アダマール操作後のキュービット2にキュービット1の状態が含まれるようになります。
上記は当然、手作業でコーディングしたくないほど低いレベルです。測定計算の利点は、サブルーチンと同様に、より大きなアルゴリズムを作成できる、ある種の構成可能なマクロである「パターン」を導入することです。1命令パターンから始めて、そこからより大きなパターンを成長させます。
アセンブラーのような命令シーケンスの代わりに、プログラムをグラフとして書き留めることも一般的です。
input .........
\--> ( E ) ---> (M:0) v
(N) ---> ( ) ------------> (X) ---> output
ここで、完全な矢印はキュービット依存性であり、点線の矢印は「信号」依存性です。
以下は、「量子プログラマー」が使用すると想像するのと同じ小さなプログラミングツールで表現された同じアダマールの例です。
編集:(「古典的な」コンピューターとの関係を追加する)古典的なコンピューターは、最善を尽くすという点で依然として非常に効率的であるため、量子コンピューターを使用して特定のアルゴリズムをオフロードすることが、現在のコンピューターがグラフィックをGPU。上記で見たように、CPUは命令ストリームを送信して量子コンピューターを制御し、ブール値の「信号」から測定結果を読み返します。このようにして、CPUと量子状態による古典的な制御と量子コンピューターへの影響を厳密に分離できます。
たとえば、量子コプロセッサを使用して、ランダムなブール値またはコイントスを計算します。古典的なコンピューターは決定論的であるため、良い乱数を返すのは苦手です。量子コンピューターは本質的に確率論的ですが、ランダムな0または1を得るために私がしなければならないことは、均等にバランスの取れたキュービットを測定することです。CPUと「QPU」間の通信は次のようになります。
qrand() N 1; M 1 0;
==> | CPU | ------------> | QPU | ==> { q1 } , []
start()
| | ------------> | | ==> { } , [q1: 0]
read(q1)
| | ------------> | |
q1: 0
0 | | <----------- | |
<==
{ ... }
量子ビットを含むQPUの量子メモリはどこにあり、[...]
ブール値を含むその古典的な(信号)メモリはどこにありますか。
- ダノス等。測定計算。arXiv(2007)vol。quant-ph
- ラウセンドルフとブリーゲル。一方向の量子コンピューター。フィジカルレビューレター(2001)vol。86(22)pp。5188-5191