有用な量子命令セットを探索する
2020年の未踏ターゲット事業にご採択頂きまして「量子コンパイル基盤の最適化処理・分岐並列制御の開発と量子計算を体感するプレゼンテーション」というテーマで来年2月まで取り組ませて頂きます。
わたし(k_yamaz)はプロジェクトの取りまとめ役なのですが、4名のメンバーが明確な課題をもってそれぞれ取り組んでいこうとしています。もちろん全体感としては、昨年開発したフレームワークの上に成り立っていますので、基本的には全てが絡んでいて、連携しています。応用面や教育面からのアプローチで新しい機能を拡張したり、昨年はリファレンス実装という名目で見切りで仕様を策定した箇所を再検討したりするのが今年のタスクになります。今年は「応用・実用化枠」で採択されたこともあり、私たちが開発しているフレームワークがどのような方々に利用して頂きたいかという利用シーンも想定しながら、タスクを考えました。
それぞれのメインで担当するところをお伝えするエントリーを投稿させて頂いておりますが、本エントリーでは、わたし(k_yamaz)のテーマをご紹介します。
わたしは「課題1)量子コンパイラの最適化処理」に対して取り組みます。
ゲート型の量子コンピュータで任意の量子計算を実行しようとすると、それは数少ない量子命令セット(=量子誤り訂正が可能なユニバーサルな命令セット)に分解されなければなりません。例えば、私たちが昨年定義した RISC-V の K-Extension では、アダマール(H)や非クリフォードな π/8(T)ゲートはありますが、任意回転角の回転ゲートのような量子命令セットは準備していません。なぜなら、量子誤り訂正を意識しているからなのですが、この限られた量子命令セットしかないということがポイントです。任意の量子計算(任意のユニタリ演算)を実施したい場合は、それをこの定義された量子命令セットの列に変換する必要があります。これは、教科書にもよく登場する “Solovay-Kitaev の定理” を使えばよいので、それほど新しいことではありません。ただし、この処理で長くなった量子ゲートの操作列は、愚直に実行しても量子計計算はできますが、効率的かというとそれは自明ではありません。
ここに量子コンパイラが関わるべき「量子最適化処理」という処理の必要性があります。このように、量子コンパイラの量子最適化という視点で量子計算をみると、課題もたくさんあって、色々な角度から研究されており、様々な提案もされています。
私たちは、幸いにも LLVM をもとにした量子最適化のための Pass機構の枠組みを開発しました。その機能を実践的に活用しようというのが、今年の活動のベースにあるテーマです。
では、具体的に何をするかということですが、上で取り上げましたように、ある量子計算は、その下層で限定的に定義された量子命令セットと密接に関連していて、QPUで実行される前に(量子コンパイラにより)分解され・最適化されます。つまり、どのような量子命令セットを定義しておくかということは、量子最適化処理を行うには、検討されるべき重要なファクターです。そこで今年は、Pass機構とバックエンド(gccの量子対応の改造版)を使って、昨年定義した量子命令セット以外に、有用な量子命令セットがないかを探索します。
そして、この検証を進めるために、”Solovay-Kitaev の定理” を実装したりしたサンプルを開発して、検証していきます。
この活動を通じて、量子誤り訂正後の量子回路の最適化を考えたり、量子命令セットのアーキテクチャを検討する方々にとって、役立つフレームワークと利用例を提示することが、最終的な目標です。