科学と技術を雑学的に気まぐれに語るブログ 

科学と技術に関係したエッセイのようなもの

量子コンピューターはなぜ速いのか?

前回の最後に、「次回は量子ビットのお話を」と書いたのですが、よく考えてみたら、量子ビットの話の前に「量子コンピューターはなぜ速いのか?」という話をした方がよいと思い直しました。というわけで、今回は量子コンピューターの速さのカラクリを説明したいと思います。

わかりやすさを優先しますので、一部で厳密さ正確さを欠いていることがありますが、ご容赦下さい。

これまでの コンピューターの歴史において、計算の速さ(IOやネットワークの速さではなく、計算そのものの速さです)は主に2つの方法で進化してきました。

ひとつめは計算にかかる作業そのものを速く行う方法です。より具体的に言えば、CPUの動作周波数を上げることです。動作周波数とは、2.1GHz(1秒間に21億回)とか3.5GHz(1秒間に35億回)とか表される数値で、CPUの動作の最小単位に要する時間とみなしても良いと思います。動作周波数が大きくなることで動作の最小単位に要する時間は短くなりますから、結果として作業を速く行うことが可能になります。

ふたつめは並列化です。計算にかかる作業を分割して、それらを並列に(同時に)行うことで全体の作業に要する時間を短くします。並列化は色々なレベルで行われていますが、マルチコアのCPUによる並列化や、昨今のスーパーコンピューターの主流であるGPGPU(汎用的なグラフィック計算ユニット)による並列化が代表的な例です。

従来型のコンピューターは動作周波数向上と並列化によって高い処理能力を得て来ました。では量子コンピューターの速さのカラクリはというと、実はこれもまた並列化と言えます。ただし、量子コンピューターの並列化はマルチコアCPUやGPGPUによる並列化とは考え方が違います。

従来型コンピューターの並列化は計算を行うユニットを複数用意して、その複数のユニットを同時に動かす方式が主流です(その他の並列化もあることは承知していますが、量子コンピューターとの対比をわかりやすくするためにあえて無視します)。マルチコアCPUも、GPGPUも複数個(数個から数千個)の計算ユニットを持っていて、それらを出来るだけ同時に動かして全計算にかかる時間を短縮しています。スーパーコンピューターは複数個(何百、何千)というマルチコアCPUやGPGPUを利用するのが一般的です。

つまり、従来型コンピューターの並列化とは多数の計算ユニットによる人海戦術のようなものです。

一方で量子コンピューターの場合はひとつの計算ユニットによる並列化です。内部がマルチコアとか、ベクター演算とかの仕組みが隠れているわけではなく、本当にひとつの計算ユニットです。だとすると、「計算ユニットが並列化されてないのに、どうして計算を並列化出来るのか」という疑問が生じることと思います。その疑問の答えが、量子コンピューターのカラクリの核心です。

実は量子コンピューターは計算ユニットではなく計算されるデータが並列化されています。そして、例えばスーパーコンピューターに含まれる全計算ユニットの数と比べて、データの並列化の度合いは何億倍とかその上の桁になるほどに高いのです。

「データの並列化」の意味は一旦置いといて、ここまでの話をまとめると、以下のようになります。

コンピューターの種類 並列計算の原理 並列化の程度
スーパーコンピューター 計算ユニットの並列化 数100万程度(進化中)
量子コンピュータ データの並列化 兆、京、それ以上

この表が量子コンピューターが速い理由そのものです。つまり、従来型コンピューター(スーパーコンピューターも含む)に比べ、並列化の度合いが桁外れに高いことが、原理的な量子コンピューターの速さの理由です。「そもそも、データの並列化とはなんぞや?」という疑問を棚上げした状態ではありますが、一旦はこの表のレベルで理解して頂けると幸いです。

「データの並列化」が出来ることが、量子コンピューターの量子コンピューターたる所以です。量子力学の原理を応用することで、データの並列化が実現するのですが、その原理に密接に関係するのが量子ビット \left | 1 \right \rangleとか \left | 0 \right \rangleと表記します)です。

今回はここまでにして、次回は量子ビットと、量子ビットによるデータの並列化について説明したいと思います。量子力学がちょっと出てきます。