--- layout: page section: イントロダクション title: QPU とは description: 量子コンピュータの正しい位置付け prev: はじめに prev_url: ./index.html next: QPU は何が得意? next_url: ./what_qpu_do_faster.html ---

「量子コンピュータとは、従来のコンピュータとまったく異なる方式の超高速なコンピュータであり、近い将来には従来のコンピュータはすべて量子コンピュータに置き換わる」最近の加熱する量子コンピュータ報道では、こうした論調のものが少なくありません。

これは、大きな誤解です。はじめにで述べたように、量子コンピュータは量子探索や量子因数分解といった特定のタスクで威力を発揮するもので、従来のコンピュータでは解けなかったクラスの問題を扱うための特殊なアクセラレータの一種です。

量子コンピュータが得意なタスクは、実はまだあまり多くは知られていません。 古典アルゴリズムよりも高速な量子アルゴリズムの一覧は、Quantum Algorithm Zoo というサイトにまとまっています。しかし現時点でその数はまだ 60 個程度です。このことからも、近い将来に現在のコンピュータすべてが量子コンピュータに置き換わるわけではない、ということが分かるでしょう。

とは言っても、いくつかの量子アルゴリズムは期待できるものです。 たとえば量子検索や量子因数分解、HHL{% nmargin_note hhl %}連立一次方程式を高速に解くことのできる量子アルゴリズム。HHL はアルゴリズムを開発したホロー (Harrow)、ハシディム (Hassidim)、ロイド (Lloyd) 氏の頭文字を取ったもの。Aram W. Harrow, Avinatan Hassidim, Seth Lloyd, Quantum Algorithm for Linear Systems of Equations (2008){% endnmargin_note %} といった量子アルゴリズムは応用できる範囲がとても広いため、特定タスク向けアクセラレータとしての量子コンピュータが期待されているのです。

従来、特定のタスク向けのマシンやアーキテクチャを「ドメイン指向アーキテクチャ」と呼び、GPU (Graphic Processing Unit: 画像処理ユニット) が代表的存在です。もともとグラフィック処理向けに開発された GPU はコア数が非常に多いことから並列性が高く、ニューラルネットワークの計算を効率よく計算できることから、現在では機械学習ドメインに特化した専用 GPU も登場しています。量子コンピュータも、本来は従来のコンピュータと対立するものではなく、むしろ GPU と同じレイヤに位置付けられる「CPU 補助デバイス」と考えると分かりやすいでしょう。

そんな GPU からの類推として、量子コンピュータを QPU (Quantum Processing Unit: 量子処理ユニット) と呼ぼうという考えがあります。実際のところ、GPU と QPU にはどれだけ類似点があるでしょうか。まずは GPU プログラミングの特徴を挙げてみましょう:

- GPU に適したタスクもあれば、まったく適さないタスクもある。

  GPU は大量の単純な演算タスクに適しており、大量の積や和の計算が必要なディープラーニングなどがこれにあたります。 一方で、GPU の動作クロック数は CPU と比べて一般に 1000 倍以上低いため、CPU 並の高クロックが必要なタスクには適しません。

- プログラムの処理すべてを GPU 上で実行することは非常にまれ。

  プログラムのメイン処理は通常 CPU 上で実行されます。 CPU で実行するメインプログラムが一部のタスクを GPU で実行し、実行結果を回収しながら処理を進めます。

- GPU プログラミングには、特別な言語やコンパイラ、ライブラリが必要。

  GPU と CPU はハードウェア構成がまったく異なるため、GPU 専用の開発環境とランタイム環境が必要です。 NVIDIA 専用の CUDA や、C や Fortran で使える OpenACC などがその代表です。

興味深いことに、「GPU」を「QPU」に置き換えてもほぼ同じことがあてはまります!

それならば、GPU が辿ってきた道を振り返ることで、これから QPU が進む未来を大まかに予測できそうです。 1999 年に登場した GPU は、プログラミングパラダイムの大きな転換をプログラマにもたらしました。 それも過ぎ去った現在では、ゲーム産業や数値計算をはじめとした分野で、たくさんの GPU プログラマが活躍しています。 そう考えれば、QPU プログラミングにも最初は多少の混乱はあるでしょうが、数年後には当たり前の技術となっているでしょう。 それならいつかは自分にもできそう、そう思えてきませんか?