
今年初めに説明したように、量子コンピューターを運用するには、実行および解釈する必要がある測定と制御操作の量を考慮すると、古典的なコンピューティング リソースへの多額の投資が必要になります。つまり、量子コンピューターを動作させるには、量子側からの情報の流れを制御し解釈するためのソフトウェア スタックも必要になります。
しかし、何かが実行されるずっと前に、ソフトウェアも関与します。ハードウェアに送信されるコマンドの完全なセットを定義することで、量子ハードウェア上でアルゴリズムを実行することは可能ですが、ほとんどのユーザーは、単一の量子ハードウェアの制御の詳細ではなく、アルゴリズムの開発に集中したいと考えています。 「全員が落ち着いてノイズが何なのかを知り、パフォーマンス管理ツールを使用し、ハードウェアを介して量子回路をコンパイルする方法を知らなければならない場合、専門家にならなければできないことが多すぎます」アルゴリズムの発見を行うためです」とIBMのジェイ・ガンベッタ氏は語った。そのため、企業が量子ハードウェアを制御するために開発しているソフトウェア スタックの一部には、量子アルゴリズムの抽象表現を、その実行に必要な一連のコマンドに変換するソフトウェアが含まれています。
このソフトウェアの IBM バージョンは Qiskit と呼ばれます (ただし、オープンソース化され、その後他の企業によって採用されました)。最近、IBM は Qiskit に関していくつかの発表を行い、他のソフトウェア スタックと比較して Qiskit をベンチマークし、サードパーティ モジュールに開放しました。新機能の詳細に入る前に、ソフトウェア スタックが何を行うのかを見てみましょう。
ソフトウェアスタックは何をするのでしょうか?
IBM の Qiskit をコンパイラーと同等のものとみなしたくなります。最も基本的なレベルでは、人間が定義したアルゴリズムを取得し、ハードウェアで実行できるものに変換するという点で、これは合理的な類似点です。しかし、細部には大きな違いがあります。従来のコンピューターのコンパイラーは、コンピューターのプロセッサーがプロセッサーのハードウェアを構成して操作を実行するために使用される内部命令に変換するコードを生成します。
いわゆる「機械語」を使用する場合でも、プログラマーはハードウェアを直接制御しません。プログラマは、ハードウェア上のどこで物事が実行されるか(つまり、どのプロセッサまたはそのプロセッサ内の実行ユニットか)、さらには命令が実行される順序さえも制御できません。
少なくとも現時点では、量子コンピューターでは状況が大きく異なります。まず、プロセッサー上で起こるすべてのことは外部ハードウェアによって制御され、外部ハードウェアは通常、一連のレーザーまたはマイクロ波パルスを生成することによって機能します。したがって、IBM の Qiskit や Microsoft の Q# などのソフトウェアは、与えられたコードをプロセッサの外部にあるハードウェアに送信されるコマンドに変換することによって機能します。
これらの「コンパイラ」は、プロセッサのどの部分で問題が発生しているのかを正確に追跡する必要もあります。量子コンピューターは、個々の量子ビットまたは量子ビットのペアに対して特定の操作 (ゲートと呼ばれる) を実行することによって機能します。そのためには、どの量子ビットをアドレス指定しているのかを正確に知る必要があります。また、超伝導量子ビットなどの場合、デバイスごとにばらつきが生じる可能性があるため、最終的にどのハードウェア量子ビットを使用するかが計算の結果に大きな影響を与える可能性があります。
その結果、Qiskit などのほとんどのものは、ハードウェアに直接アドレス指定するオプションを提供します。ただし、プログラマがそうしないことを選択した場合、ソフトウェアは一般的な命令を、エンコードされたアルゴリズムを実行する正確な一連のアクションに変換できます。これには、どの物理量子ビットを使用するか、どのゲートと測定を実行するか、およびそれらをどのような順序で実行するかについてソフトウェア スタックが選択することが含まれます。
ただし、ソフトウェア スタックの役割は、今後数年間で大幅に拡大する可能性があります。多くの企業が、あるタイプの一般的なエラーが発生したときにフラグを立てることができるハードウェア量子ビット設計を実験しており、エラー訂正を可能にする論理量子ビットの開発も進んでいます。最終的に、量子コンピューターへのアクセスを提供する企業は、アルゴリズムを設計する側の労力を必要とせずにこれらの機能を有効にできるように、ソフトウェア スタックを変更したいと考えるでしょう。