全1489文字

 米グーグルが「量子超越性」を実証したと米国で記者発表した際、同社の量子コンピューター「Sycamore」を使ってプログラミングを体験してみる機会が記者に与えられた。グーグルの研究者が「楽譜を書くようなもの」と説明するその工程の難しさに、記者は震えるしかなかった。

 まずは量子コンピューターにおけるプログラミング、つまりは量子プログラミングがどのようなものか、現在のコンピューターにおけるプログラミングと比較しながら説明してみよう。

 現在のコンピューターにおけるプログラミングは基本的に、CPUに搭載されているALU(論理演算ユニット)やFPU(浮動小数点演算ユニット)など演算装置の操作である。ALUなどはANDゲートやORゲートなどの回路(ゲート)の組み合わせで成り立っているが、人間のプログラマーがゲートを直接操作することはない。CPUには演算装置を操作する命令セットが用意されているので、人間は命令セットを呼び出す順番などを記述する。

 ただし命令セットを直接呼び出す機械語は難解なので、通常は人間に分かりやすいプログラミング言語を使う。人間が書いたコードはコンパイラーが機械語に翻訳する。

演算装置も命令セットも無い

 それに対して量子コンピューターの場合、演算装置や命令セットのような便利な仕組みが用意されていない。量子コンピューターに存在するのは、「0」と「1」の情報を「重ね合わせ」た状態で保持できる「量子ビット」だけだ。グーグルのSycamoreは量子ビットを54個搭載している。量子ビットは格子状に接続されていて、複数の量子ビットの間で「量子もつれ」という現象が発生するようになっている。

 そして量子コンピューターにおいては、量子ビットに「重ね合わせ」や「量子もつれ」などの現象を発生させる操作のことを「量子ゲート」と呼ぶ。この量子ゲートをいくつか順番に(時系列上に)つなげていくと、何らかの演算ができる。量子コンピューターにおけるプログラミングとは量子ビットに対する操作(=量子ゲート)をつなげていくことである。現在のコンピューターで言うならば演算装置を設計しているのとほぼ同じレベルである。

 実際のプログラミングにおいては、どの量子ビットに対してどんな操作をするのかGUIベースのツールで指定していく。グーグルの研究者が量子プログラミングを「楽譜を書くようなもの」と説明したのは、ツールの画面に五線譜のように線がいくつも引かれているからだ。その線1本1本が量子ビットを意味するので、その線の上に量子ビットに対する操作(=量子ゲート)を、線と線の間に量子もつれを発生させる操作を置いていく。

 量子コンピューターの場合、最後に量子ビットの「観測」という操作をすると、演算完了となる。量子ビットは演算処理中は、値が0なのか1なのか分からない状態になっている。観測をすると、それが0か1か確定する。

 記者にとって量子プログラミングの体験は意味不明だった。現在のコンピューターでも「ANDゲートやORゲートを自由に配置して演算しましょう」と言われても、記者は手も足も出ない。それと同じとはいえ、量子力学という普段の生活では目にしない物理現象を自分の手で明示的に起こすという体験が、意味不明さに拍車をかけた。

 今から40~50年ほど前、コンピューターの性能が乏しかった頃。コンピューターを使おうと思ったら機械語やアセンブリ言語を使いこなす必要があった。現在の量子プログラミングはそれと大差ない状況だ。量子プログラミングへの挑戦は先人たちの苦労に思いをはせる体験でもあった。

中田 敦(なかだ・あつし)
日経xTECH/日経コンピュータ副編集長
中田 敦(なかだ・あつし) 1998年日経BP入社。2015年4月から19年3月までシリコンバレー支局長。著書に「クラウド大全」(共著)や「GE 巨人の復活」がある。