(57)【特許請求の範囲】
【請求項１】
古典プログラムを実行可能な古典コンピュータ機能部と量子プログラムを実行可能な量子コンピュータ機能部とを備え、
前記量子コンピュータ機能部は、量子部、古典記憶装置及び制御装置を備え、
前記古典記憶装置は前記量子部に対する操作命令の列である量子マイクロコードを記憶しており、該量子マイクロコードは、前記量子プログラムと、前記量子部での処理対象となる入力データと前記古典プログラムとに基づいて生成された中間データとから変換されたものであり、
前記制御装置により、前記量子マイクロコードに記述されたシーケンスに基づいて前記量子部を制御する
ことを特徴とする量子コンピュータシステム。
【請求項２】
請求項１において、
前記量子部は、
少なくとも１個以上のキュービットから構成される量子レジスタと、
前記量子レジスタに対して操作を行う制御ゲートと、
前記量子レジスタの状態を観測する読出しゲートとを有し、
前記古典記憶装置は、前記量子プログラムから変換され、前記制御ゲートないしは前記読出しゲートに対する操作命令の列である前記量子マイクロコードを記憶し、
前記制御装置は、前記古典記憶装置から前記量子マイクロコードを読み出して前記制御ゲートないしは前記読出しゲートを制御する
ことを特徴とする量子コンピュータシステム。
【請求項３】
請求項２において、
前記量子プログラムを前記量子マイクロコードに変換する量子コンパイラを有し、
前記量子コンパイラは、前記入力データを前記量子マイクロコード内に埋め込んで出力する
ことを特徴とする量子コンピュータシステム。
【請求項４】
請求項３において、
前記古典コンピュータ機能部が前記量子コンパイラを有する
ことを特徴とする量子コンピュータシステム。
【請求項５】
請求項３において、
前記量子コンピュータ機能部が前記量子コンパイラを有する
ことを特徴とする量子コンピュータシステム。
【請求項６】
請求項３において、
前記制御ゲートないしは前記読出しゲートを前記制御装置が制御することで実現可能な操作の種類や制約を前記量子コンピュータ機能部の機能として定義した、ハードウェア機能情報を有し、
前記量子コンパイラは、前記ハードウェア機能情報で定義された制約を満たす前記量子マイクロコードを生成する
ことを特徴とする量子コンピュータシステム。
【請求項７】
請求項３において、
前記量子レジスタを構成する前記キュービットの其々について利用可否及びエラーレートの情報を記憶するハードウェア制限情報を有し、
前記量子コンパイラは、前記ハードウェア制限情報で利用可能なキュービットのみを用いた前記量子マイクロコードを生成する
ことを特徴とする量子コンピュータシステム。
【請求項８】
請求項７において、
前記ハードウェア制限情報は、前記量子レジスタを構成するＮ個のキュービットの各々に関して、利用可否、ステータス、及び、エラーレートを示す情報を含み、
前記エラーレートは前記キュービットの、観測データと期待値とが異なるエラー率を記録したものであり、
前記ステータスは前記各キュービットのエラーレートの状態を記録したものである
ことを特徴とする量子コンピュータシステム。
【請求項９】
請求項８において、
前記キュービットの利用可否の判断ないしはエラーレートの測定を行うトレーニング用量子プログラムを有し、
前記トレーニング用量子プログラムを実行して前記ハードウェア制限情報を更新する
ことを特徴とする量子コンピュータシステム。
【請求項１０】
請求項３において、
前記量子レジスタ内の前記キュービットは隣接して配置された前記キュービット間のみで操作を行うことが可能なものであり、
前記制御ゲートは、前記隣接して配置されたキュービット間の状態を交換するスワップ操作を有し、
前記量子コンパイラは、前記量子マイクロコードに前記スワップ操作を挿入する
ことを特徴とする量子コンピュータシステム。
【請求項１１】
請求項３において、
前記量子レジスタは、０，１，もしくは０と１の重ね合わせの状態を保持できる前記キュービットを１個以上有する
ことを特徴とする量子コンピュータシステム。
【請求項１２】
請求項３において、
前記量子コンピュータシステムの量子アルゴリズムが、前処理フェーズ、本処理準備フェーズ、本処理フェーズ、及び後処理フェーズの少なくとも４段階で構成されており、
前記前処理フェーズにおいて、入力データを入力として、古典オブジェクトを実行し、処理結果として中間データを生成し、
前記本処理準備フェーズにおいて、前記中間データを入力とし、前記本処理を担う前記量子プログラムを前記量子コンパイラで量子マイクロコードに変換し量子マイクロコードを生成し、
前記本処理フェーズにおいて、前記量子マイクロコードを前記量子部で実行し、処理結果を観測データとして観測レジスタに取得し、
後処理フェーズにおいて、前記観測データを入力データとして前記古典オブジェクトを実行し、実行結果を取得する
ことを特徴とする量子コンピュータシステム。
【請求項１３】
請求項１２において、
前記量子コンピュータシステムは、常温部、低温部、及び前記常温部と前記低温部間の通信を行うための伝送路で構成されており、
前記前処理フェーズ、トレーニングフェーズ、前記本処理準備フェーズ及び前記後処理フェーズを前記常温部で動作する前記古典コンピュータ機能部により実行し、
前記トレーニングフェーズにより、前記量子コンピュータシステムを動作させ、前記量子部を構成する素子の動作を検査し不安定な可能性がある素子の使用を制限するハードウェア制限情報を取得し、
前記本処理フェーズを、前記低温部で動作する前記量子コンピュータ機能部により実行する
ことを特徴とする量子コンピュータシステム。
【請求項１４】
請求項１２において、
前記量子コンピュータシステムは、常温部、低温部、及び前記常温部と前記低温部間の通信を行うための伝送路で構成されており、
前記前処理フェーズ、及び前記後処理フェーズを前記常温部で動作する前記古典コンピュータ機能部により実行し、
トレーニングフェーズ、前記本処理準備フェーズ、及び前記本処理フェーズを、前記低温部で動作する前記量子コンピュータ機能部により実行し、
前記トレーニングフェーズにより、前記量子コンピュータシステムを動作させ、前記量子部を構成する素子の動作を検査し不安定な可能性がある素子の使用を制限するハードウェア制限情報を取得する
ことを特徴とする量子コンピュータシステム。
【請求項１５】
量子コンピュータシステムの制御方法であって、
前記量子コンピュータシステムは、古典プログラムを実行可能な古典コンピュータ機能部と量子プログラムを実行可能な量子コンピュータ機能部とを備え、
前記量子コンピュータ機能部は、量子部、古典記憶装置、及び制御装置を備え、
前記量子プログラムと、前記量子部での処理対象となる入力データと前記古典プログラムとに基づいて生成された中間データとを変換して量子マイクロコードを生成し、
該量子マイクロコードを前記古典記憶装置に記憶し、
前記制御装置により、前記量子マイクロコードに記述されたシーケンスに基づいて前記量子部を制御する
ことを特徴とする量子コンピュータシステムの制御方法。
【請求項１６】
請求項１５において、
前記量子部は、
少なくとも１個以上のキュービットから構成される量子レジスタと、
前記量子レジスタに対して操作を行う制御ゲートと、
前記量子レジスタの状態を観測する読出しゲートとを有し、
前記制御装置により、前記制御ゲートないしは前記読出しゲートに対する操作命令の列である前記量子マイクロコードを前記古典記憶装置から読み出して前記制御ゲートないしは前記読出しゲートを制御する
ことを特徴とする量子コンピュータシステムの制御方法。
【請求項１７】
請求項１５において、
前記量子プログラムを前記量子マイクロコードに変換する量子コンパイラを有し、
前記量子コンパイラは、前記入力データを前記量子マイクロコード内に埋め込んで出力する
ことを特徴とする量子コンピュータシステムの制御方法。
【請求項１８】
古典プログラムと量子プログラムの複合として構成された量子コンピュータシステムのプログラムであって、
前記量子コンピュータシステムは、古典コンピュータ機能部と量子コンピュータ機能部とを備え、
前記古典コンピュータ機能部は、前記古典プログラムを実行可能なＣＰＵを備え、
前記量子コンピュータ機能部は、量子部、古典記憶装置、及び制御装置を備え、
前記古典コンピュータ機能部に、
前記古典プログラム及び入力データを入力として、前記古典プログラムを実行して中間データを生成させる機能を実現させ、
前記量子コンピュータ機能部に、
前記量子プログラム及び前記中間データから変換された量子マイクロコードを前記量子部で実行させて観測データを取得する機能と、
該観測データを前記古典コンピュータ機能部に転送させる機能とを実現させるためのプログラム。
【請求項１９】
請求項１８において、
前記量子コンピュータ機能部は、前記量子プログラムを前記量子マイクロコードに変換する量子コンパイラを有し、
前記量子部は、前記量子マイクロコードに記述されている処理を実行するリソースとして、少なくとも１個以上のキュービットから構成される量子レジスタと、制御ゲートと、読出しゲートとを備え、
前記量子コンピュータシステムに、
前記量子コンパイラが、前記量子プログラムと、前記量子プログラムが処理すべき入力データとを入力とし、前記入力データを前記量子マイクロコード内に埋め込んで出力する機能と、
前記制御ゲートないしは前記読出しゲートに対する操作命令の列である前記量子マイクロコードを前記古典記憶装置に記憶する機能と、
前記古典記憶装置から前記量子マイクロコードを読み出して前記制御ゲートないしは前記読出しゲートを制御する機能とを実現させるためのプログラム。
【請求項２０】
請求項１９において、
前記量子コンピュータシステムは、
前記制御ゲートないしは前記読出しゲートを前記制御装置が制御することで実現可能な操作の種類や制約を前記量子コンピュータ機能部の機能として定義した、ハードウェア機能情報と、
前記量子レジスタを構成する前記キュービットの其々について利用可否及びエラーレートの情報を記憶するハードウェア制限情報とを有し、
前記量子コンピュータシステムに、
前記量子コンパイラが、前記ハードウェア機能情報で定義された制約を満たし、かつ、前記ハードウェア制限情報で利用可能なキュービットのみを用いた前記量子マイクロコードを生成する機能を実現させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、量子コンピュータシステム、量子コンピュータシステムの制御方法、及びプログラムに係り、特に、量子アルゴリズムが古典−量子のハイブリッド構成の量子コンピュータシステムに関する。
【背景技術】
【０００２】
従来のコンピュータ（これ以降、古典コンピュータと呼ぶ）では解決することが困難だった問題に対して、量子力学の原理を応用した量子コンピュータによる解決が期待されている。量子コンピュータでは重ね合わせの状態を利用し、重ね合わされた状態それぞれに対する処理を一度に行うことができる（量子並列性）。例えば、２キュービットで構成された量子コンピュータでは、００，０１，１０，１１のそれぞれの状態に対して並列処理を行うことができる。量子並列性を活用することで、古典コンピュータが苦手としていた幾つかの問題において、量子コンピュータによる効率的なアルゴリズムが発見されている。有名な例では、古典コンピュータより効率良く因数分解を行うことができる非特許文献１に記載のＳｈｏｒの因数分解アルゴリズムがある。
【０００３】
量子コンピュータを実現するためには、デバイス、アーキテクチャ、アルゴリズムの各レイヤーで革新が必要とされている。例えば、量子コンピュータのデバイスは量子力学的な効果を利用しているため、僅かな外乱でも状態が乱れてしまい、安定して動作させ続けることは困難である。この問題に関して、デバイスのレイヤーにおいてより安定して動作するデバイスを実現するための取り組みは続けられているが、並行してアーキテクチャやアルゴリズムなどの上位レイヤーでの取り組みも重要となる。例えば、特許文献１では量子誤り訂正によってこの問題を解決しようとしている。また、量子コンピュータのアルゴリズム（これ以降、量子アルゴリズムと呼ぶ）を記述する上で用いられている要素（種々のユニタリ変換）は、量子コンピュータを構成する量子回路の構成要素と必ずしも一対一に対応しないため、古典コンピュータで言うところの論理合成に相当する処理が必要となる。
【０００４】
例えば、特許文献１では、人間が扱いやすい量子言語を、量子コンピュータの量子系に応じた最適な量子回路に自動的に変換する量子プログラム変換装置を示している。すなわち、特許文献１の発明は、入力された量子プログラムを古典コードと量子コードに分けてそれぞれコンパイルし、リンクする。量子コンピュータの方式（ハードウェアの相違）によって使っているゲートが違うので、量子コードから方式毎のクラスライブラリやエラー訂正ライブラリを使って、コンパイルしている。特許文献１の発明によれば、入力された量子プログラムに対し、量子コンピュータのハードウェア（量子系）の違いを考慮することなく量子回路を自動的に生成することができる。
【０００５】
なお、量子コンピュータ用のデバイスに関しては種々の研究がなされているが、例えば特許文献２に記載されているような半導体を用いた固体素子が実用上は有利であり、将来的にはこの種のデバイスを用いられていくものと考えられる。
【０００６】
また、特許文献３には、量子プロセッサ要素の局所的プログラミングのためのシステムや方法が開示されている。すなわち、複数の素子（プログラム可能デバイス）とメモリアドミニストレーションシステムとを具備した量子プロセッサにおける、各素子（例えば超伝導磁束キュービットや超伝導電荷キュービット）のデバイスパラメータをプログラムするための方法が開示されている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００６−３３１２４９号公報
【特許文献２】特許第４２１３８９２号公報
【特許文献３】特表２０１０−５１１９４６号公報
【非特許文献】
【０００８】
【非特許文献１】Ｐ．Ｗ．  Ｓｈｏｒ，  Ａｌｇｏｒｉｔｈｍｓ  ｆｏｒ  ｑｕａｎｔｕｍ  ｃｏｍｐｕｔａｔｉｏｎ：  ｄｉｓｃｒｅｔｅ  ｌｏｇａｒｉｔｈｍｓ  ａｎｄ  ｆａｃｔｏｒｉｎｇ，  Ｐｒｏｃ．  ３５ｔｈ  Ａｎｎｕａｌ  ＩＥＥＥ  Ｓｙｍｐｏｓｉｕｍ  ｏｎ  Ｆｏｕｎｄａｔｉｏｎｓ  ｏｆ  Ｃｏｍｐｕｔｅｒ  Ｓｃｉｅｎｃｅ，  ｐｐ．１２４−１３４，  １９９４．
【発明の概要】
【発明が解決しようとする課題】
【０００９】
量子コンピュータを実用化するためには、汎用性と安定性を確保することが重要である。汎用性の面では、単に一種類の問題に対して効果を発揮するだけでなく、複数種の問題に対して汎用的に用いることができる量子コンピュータであることが望ましい。安定性の面では、量子コンピュータのデバイスを作製する技術はまだ発展途上にあり、量子レジスタの素子等の動作が不安定な可能性がある。そうした中では、素子が安定している期間に処理を終えるために、可能な限り処理に要する時間やステップ数を削減することが望まれる。換言すると、ユーザが処理すべき事項やデータの種類に応じて、量子回路のシーケンスを最適化し、素子が安定している短期間に処理できるようにしたいという汎用性に関する要求がある。また、将来的に大規模なデバイスを実現できるようになった段階では、素子数が莫大になるためシステム全体としては不安定になってしまう可能性がある。さらに、素子の故障に関しても、一時的な故障や恒久的な故障など、様々な故障モードを検討しなければならない。
【００１０】
特許文献１の発明は、量子系の相違を踏まえた量子プログラム変換装置に関するものであるが、ユーザが、量子コンピュータを複数種の問題に対して汎用的に駆使することについては、開示されていない。例えば、ユーザが量子コンピュータのアプリケーションプログラムに処理させたいデータを与え、量子レジスタを構成する複数のキュービットの間でスワップを行って特定のキュービットを読み出すような処理に関して、ソフトウェアによる汎用的な処理をどのように行うかについては、開示されていない。また、量子レジスタの動作の安定性についての記載も無い。
【００１１】
特許文献２の発明は、量子コンピュータのデバイスに関するものであり、このデバイスを備えた量子コンピュータのソフトウェア、特に、ユーザが使用するにあたっての汎用性や安定性についての記載は無い。
【００１２】
特許文献３の発明は、量子コンピュータの複数の超伝導素子（プログラム可能デバイス）の制御に関するものであり、各超伝導素子の特性を外部から設定（プログラム）できるようにする技術である。特許文献３には、デバイスの特性を生かしてソフトウェアにより量子コンピュータのシステム全体をどのように制御するかについての開示はない。すなわち、ユーザが量子コンピュータを使用する上での汎用性や安定性についての記載は無い。
【００１３】
本発明の主たる課題は、汎用性の高い量子コンピュータシステムを提供することにある。  
【課題を解決するための手段】
【００１４】
本発明は上記課題を解決する手段を複数含んでいるが、その一例を挙げるならば、量子コンピュータシステムは、古典プログラムを実行可能な古典コンピュータ機能部と量子プログラムを実行可能な量子コンピュータ機能部とを備え、前記量子コンピュータ機能部は、量子部、古典記憶装置及び制御装置を備え、前記古典記憶装置は前記量子部に対する操作命令の列である量子マイクロコードを記憶しており、該量子マイクロコードは、前記量子プログラムと、前記量子部での処理対象となる入力データと前記古典プログラムとに基づいて生成された中間データとから変換されたものであり、前記制御装置により、前記量子マイクロコードに記述されたシーケンスに基づいて前記量子部を制御することを特徴とする。
【発明の効果】
【００１５】
本発明により、ユーザが量子コンピュータに任意の処理を実行させるプログラムを生成することを可能とし、汎用性の高い量子コンピュータシステムを実現することができる。
【図面の簡単な説明】
【００１６】
【図１】本発明の実施例１に係る量子コンピュータシステムの構成例を示す図である。
【図２】実施例１に係る量子コンピュータシステムの、常温部の構成例を示す図である。
【図３】実施例１に係る量子コンピュータシステムの、低温部の構成例を示す図である。
【図４】実施例１における、キュービット及び制御ゲートの構成例を示す平面図である。
【図５】実施例１における、量子レジスタ、制御ゲート、及び、読出しゲートの構成例を示す平面図である。
【図６】キュービットの状態を説明する図である。
【図７】キュービットに対する操作を行う電圧パルスの印加を説明する図である。
【図８】キュービットの他の状態を説明する図である。
【図９】実施例１の量子コンピュータシステム内の処理（前処理及び本処理準備）の例を示す説明図である。
【図１０】実施例１の量子コンピュータシステム内の処理（本処理及び後処理）の例を示す説明図である。
【図１１】量子部とトレーニング処理の関係を説明する図である。
【図１２】実行マネージャによる、量子レジスタに対するトレーニング処理の例を示すフローチャートである。
【図１３】量子コンピュータシステム内の処理（トレーニングフェーズ処理）の例を示す説明図である。
【図１４】実施例１のハードウェア制限情報の、データ構造を示す説明図の例である。
【図１５】実施例１の実行マネージャの処理を示すフローチャートの例である。
【図１６】実施例１の量子コンパイラ内の処理を示す説明図の例である。
【図１７】本発明の実施例２に係る量子コンピュータシステムの常温部の構成図の例である。
【図１８】実施例２に係る量子コンピュータシステムの、低温部の構成図の例である。
【図１９】実施例２の量子コンピュータシステム内の処理（前処理）の例を示す説明図である。
【図２０】実施例２の量子コンピュータシステム内の処理（本処理準備、トレーニング処理、本処理及び後処理）の例を示す説明図である。
【発明を実施するための形態】
【００１７】
本発明の実施形態の一例を挙げるならば、量子コンピュータシステムは、少なくとも１個以上のキュービットから構成される量子レジスタと前記量子レジスタに対して操作を行う制御ゲートと前記量子レジスタの状態を観測する読出しゲートとを有する量子部と、古典記憶装置と、前記古典記憶装置にアクセス可能な制御装置とを備え、前記古典記憶装置は前記制御ゲートないしは前記読出しゲートに対する操作命令の列である量子マイクロコードを記憶し、前記制御装置は前記古典記憶装置から前記量子マイクロコードを読み出して前記制御ゲートないしは前記読出しゲートを制御する。
【００１８】
これにより、量子コンピュータをプログラム可能とし、それにより本発明の課題の一つである汎用性を実現する。また、プログラム可能であることを利用して、故障等の問題に対してプログラムの動作を変更することで動的に対応し、量子コンピュータの安定性を高めることができる。よって、上記手段により、汎用的かつ安定的に利用することのできる量子コンピュータシステムを提供することができる。  
以下、本発明の実施例を、図面を用いて説明する。
【実施例１】
【００１９】
本発明の実施例１に係る量子コンピュータシステムを、図１〜図１６を用いて説明する。  
本実施例では、量子コンピュータがプログラム可能であることにより、汎用的かつ安定的に利用することができる量子コンピュータシステム１００の例を説明する。
【００２０】
図１は、本発明の実施例１に係る量子コンピュータシステム１００の構成例を示す図である。後で述べる実施例も含めて、本発明の量子コンピュータシステムは、量子コンピュータと古典コンピュータの両方の機能を具備する。すなわち、量子コンピュータシステム１００を、量子コンピュータの機能を具備する量子コンピュータ機能部と古典コンピュータの機能を具備する古典コンピュータ機能部とのハイブリッドシステムとして構成する。
【００２１】
一般的に、量子コンピュータ向けのアルゴリズム（これ以降、量子アルゴリズムと呼ぶ）の構成は、古典コンピュータによる前処理、量子コンピュータによる本処理、古典コンピュータによる後処理の３段階に分類できるものが多い。例えば、有名な量子アルゴリズムであるＳｈｏｒの因数分解アルゴリズム（非特許文献１）は、前処理で本処理のためのパラメータを生成し、それを用いて本処理を行い、本処理で得られた結果を後処理して因数分解の結果を出す。本処理では因数分解が直接行われているのではなく、位数発見を行っている。前処理では、本処理の位数発見を用いて因数分解を行うために、位数発見のパラメータを生成する。後処理では本処理で発見された位数を元にして因数分解を行う。前処理と後処理を量子コンピュータで行うことも出来るが、量子コンピュータの特徴を生かして高速化することはできない処理である。そのため、前処理と後処理は、一般的には古典コンピュータで行う。このように、量子アルゴリズムは古典−量子のハイブリッド構成となっているものが多い。
【００２２】
本実施例においても、古典コンピュータ機能部が前処理及び後処理部を備え、量子コンピュータ機能部が本処理部を備えている。
【００２３】
また、量子コンピュータシステム１００は、常温部１０１と低温部１０２を備えており、常温部１０１と低温部１０２の間は、通信を行うための伝送路１０３で接続される。すなわち、常温部１０１と低温部１０２は伝送路１０３を介して、互いにプログラムやデータを通信で送受することができる。
【００２４】
一般的に、量子コンピュータのデバイスは低温の動作環境を要求するものが多い。例えば、量子コンピュータ機能部に、特許文献２に記載のデバイスを採用した場合には、４．２Ｋという非常に低い温度に冷却して利用する必要がある。このように、現在一般に用いられている古典コンピュータ機能部は常温動作を前提とし、量子コンピュータ機能部は低温動作を前提とて構成されているため、常温部１０１と低温部１０２に分離する必要性が理解できるであろう。
【００２５】
本実施例でも、概ね、古典コンピュータ機能部が常温部１０１に、量子コンピュータ機能部が低温部１０２に対応する。しかしながら、本実施例の低温部１０２は、量子コンピュータ機能部のみならず古典コンピュータ機能部に相当する制御装置であるマイクロ制御部３０１を含んでいる。
【００２６】
図２は、本実施例の量子コンピュータシステム１００における常温部１０１の構成例を示す図である。常温部１０１のハードウェア構成は、現在一般的に用いられている古典コンピュータのハードウェア構成と基本的に同一である。常温部１０１は、主記憶装置２０１、ＣＰＵ２０２、Ｉ／Ｏアダプタ２０３を具備する。主記憶装置２０１はアプリケーションプログラム２１０、システムソフトウェア２２０、ラインタイム情報２３０を保持している。ＣＰＵ２０２は主記憶装置２０１が保持しているシステムソフトウェア２２０、及び、古典オブジェクト２３１を実行する。Ｉ／Ｏアダプタ２０３はＣＰＵ２０２の要求に応じて、伝送路１０３を経由して低温部１０２と通信を行う。なお、オペレーティングシステム等、現在の古典コンピュータが一般的に備えている構成要素に関しては、本実施例の量子コンピュータシステム１００も当然備えているが、説明を省略する。
【００２７】
アプリケーションプログラム２１０は、量子コンピュータシステム１００で処理したい問題毎に用意されるプログラムである。前述した通り、量子アルゴリズムは古典コンピュータ機能部で実行する前処理及び後処理部と、量子コンピュータ機能部で実行する本処理部からなる。これに対応してアプリケーションプログラム２１０は、古典プログラム２１１と量子プログラム２１２の複合として構成される。古典プログラム２１１は、例えばＣ言語のようなプログラミング言語で記述されたプログラムであり、前処理及び後処理でＣＰＵ２０２が行うべき処理を記述している。量子プログラム２１２は、本処理で低温部１０２が行うべき処理を記述している。量子プログラム２１２は古典プログラム２１１と同様にプログラミング言語で記述することも可能であるし、ユニタリ行列や量子回路として表現しても良い。
【００２８】
システムソフトウェア２２０は、アプリケーションプログラム２１０をＣＰＵ２２０及び低温部１０２上で動作させるために必要な制御や操作をＣＰＵ２０２に行わせるためのソフトウェア群である。システムソフトウェア２２０は古典コンパイラ２２１、量子コンパイラ２２２、及び、実行マネージャ２２３から構成される。古典コンパイラ２２１は古典プログラム２１１をＣＰＵ２０２上で実行可能な形式である古典オブジェクト２３１に変換するためのソフトウェアである。現在一般的に用いられているプログラミング言語の処理系と同義と考えて良い。量子コンパイラ２２２は量子プログラム２１２を低温部１０２上で実行可能な形式である量子マイクロコード２３２に変換するためのソフトウェアである。実行マネージャ２２３はアプリケーションプログラム２１０に入力データ２３３を入力して処理結果を得るために、システムソフトウェア２２０による処理や、常温部１０１と低温部１０２の間のデータ転送など、必要となる処理の全体制御を行うソフトウェアである。
【００２９】
ランタイム情報２３０は、アプリケーションプログラム２１０の実行時に必要となるデータ、ないしは、実行の過程で一時的に生成されるデータやコードである。ランタイム情報２３０は古典オブジェクト２３１、量子マイクロコード２３２、入力データ２３３、中間データ２３４、及び、観測データ２３５から構成される。古典オブジェクト２３１は前述した通り、古典コンパイラ２２１によって生成されたＣＰＵ２０２が実行可能なコードである。量子マイクロコード２３２は前述した通り、量子コンパイラ２２２によって生成された低温部１０２が実行可能なコードである。入力データ２３３は、アプリケーションプログラム２１０を利用するユーザが用意するデータで、アプリケーションプログラム２１０に処理させたいデータである。例えば前述した因数分解の例では、因数分解するべき合成数が入力データ２３３となる。すなわち、入力データ２３３は、量子コンピュータ機能部の量子部を用いて処理される対象となるデータである。中間データ２３４は古典プログラム２１１による前処理で生成されるデータである。観測データ２３５は本処理で生成されるデータで、本処理を実行する低温部１０２から常温部１０１に転送されてきたものである。
【００３０】
図３は、本実施例の量子コンピュータシステム１００の低温部１０２の構成図の例である。低温部１０２は、マイクロ制御部３０１、観測レジスタ３０２、Ｉ／Ｏアダプタ３０３、量子部３１０、命令バッファ３２０から構成されている。
【００３１】
Ｉ／Ｏアダプタ３０３は伝送路１０３と接続され、常温部１０１が発したデータ転送要求を受け取り、命令バッファ３２０への量子マイクロコード３２１の格納、マイクロ制御部３０１への実行の指令、観測レジスタ３０２からのデータの取得などを行う。
【００３２】
量子部３１０は量子コンピュータ機能部の中核部分であり、量子マイクロコード３２１に記述されている処理を実行するリソースを有する。量子部３１０は制御ゲート３１１、量子レジスタ３１２、読出しゲート３１３から構成されている。量子レジスタ３１２は、０、１、もしくは０と１の重ね合わせの状態を保持できるキュービットを１個以上有する。キュービットの構成方法に関しては、例えば特許文献２に記載されている。
【００３３】
図４に、本実施例における量子レジスタ３１２を構成するキュービットブロック４００の構成の一例を示す。ここでキュービット４１０は、２個の量子ドット４１１，４１２を連結した二重量子ビットとして構成される。また、バリアポテンシャルの高さを制御するために、制御ゲート４２０，４２１，４２２，４３０，４３１，４３２がキュービット４１０に付随しており、これらを組にしたキュービットブロック４００として、ハードウェアの構成要素（ビルディングブロック）となる。
【００３４】
図５に、本実施例における量子部３１０の構成の一例を示す。前述した通り、量子部３１０は制御ゲート３１１、量子レジスタ３１２、読出しゲート３１３から構成される。このうち、量子レジスタ３１２は図４に示したようなキュービットブロック４００を１個以上並べることで実現される。図５の例では、量子レジスタが、キュービットブロック５０１，５０２，５０３，５０４の４個を並べて構成されている。また、制御ゲート３１１は各キュービットブロック内に置かれている（図４の制御ゲート４２０，４２１，４２２，４３０，４３１，４３２）。なお，これ以降、キュービットブロック５０１，５０２，５０３，５０４内の各キュービット４１０のことを指し示す場合には、単にキュービット５０１，５０２，５０３，５０４と呼称する。加えて、量子レジスタ３１２（キュービットブロック５０１，５０２，５０３，５０４）の周囲には、各キュービットの初期化を行うための制御ゲート３１１として、制御ゲート５１１，５１２，５２１，５２２も置かれている。読出しゲート３１３は、量子レジスタ３１２（キュービットブロック５０１，５０２）の周囲に置かれた単電子トランジスタ５３１，５３２として実現される。
【００３５】
これ以降、量子レジスタ３１２はキュービットをＮ個持つＮキュービット量子レジスタであるとする。なお、このＮキュービット量子レジスタは０００…０００（０がＮ個）から１１１…１１１（１がＮ個）までの２Ｎ個の状態の重ね合わせを表現する能力を持つ。制御ゲート３１１は量子レジスタ３１２の１個ないしは複数個のキュービットに対して操作を行うためのゲートである。例えば量子レジスタとして特許文献２に記載のキュービットを採用した場合には、電圧を印加することで操作を行う。制御ゲート３１１で行える操作としては、初期化（キュービットの状態を０ないしは１に初期化する）、アダマール変換、及び、制御ＮＯＴ等がある。マイクロ制御部３０１の指示によって、制御ゲートは量子レジスタ３１２の中の指定されたキュービットに対して、指定された操作を行う。読出しゲート３１３は、量子レジスタ３１２の１個ないしは複数個のキュービットの値を観測して読み出すためのゲートである。マイクロ制御部３０１の指示によって、読出しゲート３１３は量子レジスタ３１２の値を観測し、観測結果を観測レジスタ３０２に格納する。この時、観測対象となるキュービットはマイクロ制御部３０１から指定される。なお、観測に伴い、観測されたキュービットの状態は０と１の重ね合わせから、０若しくは１の何れかに収束する。
【００３６】
命令バッファ３２０は、量子マイクロコード３２１を保持している。この量子マイクロコード３２１は、常温部１０１の量子マイクロコード２３２が伝送路１０３経由で転送されてきたものである。
【００３７】
観測レジスタ３０２は、前述した通り量子レジスタ３１２の観測結果を保持するレジスタであり、この観測レジスタは古典コンピュータ機能部の記憶素子、すなわち０もしくは１の２値を保持するものである。
【００３８】
マイクロ制御部３０１は、命令バッファ３２０から量子マイクロコード３２１を読み出し、量子マイクロコード３２１に記述されたシーケンスに基づいて制御ゲート３１１及び読み出しゲート３１３を制御する。
【００３９】
量子マイクロコード３２１は、制御ゲート３１１及び読出しゲート３１３を制御する命令を時系列的に示した動作シーケンスである。命令としては、制御ゲート３１１を駆動して量子レジスタ３１２内の指定するキュービットに対して操作を行う操作命令と、読出しゲート３１３を制御して観測を行い、観測結果を観測レジスタ３０２に格納する観測命令がある。操作命令と観測命令は同一の時系列上に記述され、各命令間は順序関係が保たれる。これは、観測命令を実行すると重ね合わせの状態を０か１に収束させてしまうという不可逆な効果を持つため、処理の途中で観測を利用するような量子アルゴリズムでは各操作命令と観測命令の実行順序が重要となるためである。
【００４０】
操作命令としては、単一のキュービットに作用する操作や、複数のキュービットに作用する操作がある。いずれも、操作対象のキュービットを指定するためにオペランドとしてキュービット番号を持つ。Ｎ個のキュービットを持つ量子レジスタ３１２をＱＲとした時、例えばＱＲ内のキュービットを指定するためにＱＲ（１），ＱＲ（３）ようにキュービット番号を指定するものとする。このとき、操作命令として制御ＮＯＴ命令は「ＣＮＯＴ  制御キュービット番号、ターゲットキュービット番号」というように表現することができる。キュービット番号１番のキュービットを制御キュービット、キュービット番号３番のキュービットをターゲットキュービットとする場合には「ＣＮＯＴ  ＱＲ（１），ＱＲ（３）」の様に記述する。同様にして、アダマール変換のような操作も操作命令として用意される。観測命令に関しても、観測すべきキュービットのキュービット番号をオペランドとした命令である。
【００４１】
また、操作命令及び観測命令は制御ゲート３１１及び読出しゲート３１３の複数の制御を複合したものでも良い。例えば、２つのキュービット間の状態を交換するスワップ命令は「ＳＷＡＰ  ＱＲ（ｉ），ＱＲ（ｊ）」（ｉ，ｊはキュービット番号）のように命令として示せるが、制御ゲート３１１が直接的にスワップ命令をサポートしていなくても、マイクロ制御部３０１が制御ＮＯＴ命令、ないしは、その他の命令の組合せでスワップ命令相当の動作を実現しても良い。
【００４２】
図５の例から自明なように、読出しゲート（単電子トランジスタ５３１，５３２）が読出しを行えるのはキュービット５０１，５０２だけであり、キュービット５０３，５０４の読出しは行えない。そこで、前述したスワップを利用して、制御ゲート３１１及び読出しゲート３１３の複数の制御を複合し、キュービット５０３を読み出す時にはキュービット５０１，５０３の間でスワップ、キュービット５０４を読み出す時にはキュービット５０２，５０４の間でスワップするような使い方が必要となる。
【００４３】
図６に、キュービット４１０が保持する状態の例を示す。キュービット４１０を構成する２つの量子ドット４１１，４１２はそれぞれ基底｜０＞，基底｜１＞に割当てられている。ここでは、量子ドット４１１が｜０＞，量子ドット４１２が｜１＞とする。図６の例では、量子ドット４１１に電子が溜めこまれており、それをもってキュービット４１０の保持する状態が｜０＞であるとしている。逆に、量子ドット４１２の側に電子が溜めこまれていれば、キュービット４１０の保持する状態は｜１＞である。
【００４４】
図６に示すように、｜０＞ないしは｜１＞の状態を持ったキュービットに対して、アダマール変換を作用させることで重ね合わせの状態を作り出し、量子コンピュータ特有の重ね合わせの状態による並列処理を行うことができる。
【００４５】
図７に、アダマール変換を行うための制御ゲートの制御方法の例を示す。キュービット４１０に対する操作は、各制御ゲート４２０，４２１，４２２，４３０，４３１，４３２に対して各々電圧パルスを印加することで行う。各制御ゲートに印加する電圧パルスのパターン（振幅，時間，他のパルスとの位相関係)によって、実現できる操作が異なる。図７の電圧パルスのパターンの例（Ｖｐａ，Ｖｐｂ，Ｖｐｃ，Ｖｐｄ，Ｖｐｅ，Ｖｐｆ）では、制御ゲート４２０，４３０に対してバリアポテンシャルの高さを下げる方向に作用するパルスを印加している。
【００４６】
この結果、図８に示すように、２個の量子ドット４１１，４１２の間にあるバリアポテンシャルの高さが下がり、｜０＞の状態と｜１＞の状態をある確率で行き来するようになる。このとき｜０＞である確率をα，｜１＞である確率をβとすると、図８に示すキュービット４１０は、α｜０＞＋β｜１＞となる重ね合わせの状態を持つことになる。このようにして、制御ゲートに対して電圧パルスを印加することで、様々な種類の操作を行うことができる。
【００４７】
また、上記の例では単一のキュービットに対する操作の例だったが、隣接する複数のキュービットは互いにバリアポテンシャルの高さに影響を及ぼし合うので、複数のキュービットの制御ゲートに対して同時に電圧パルスを印加することで、制御ＮＯＴやスワップなどの操作を実現することができる。このことから分かるように、複数のキュービットに対する操作は、図５に示した平面上の複数キュービットのうち、隣接して配置されているキュービットの間でのみ行うことが出来る。そのため、読出しゲート（単電子トランジスタ５３１，５３２）による読出しを行う場合と同様に、所望の操作を行うためにはスワップを必要とする場合がある。例えば、キュービット５０１を制御ビット、キュービット５０４を操作ビットとした制御ＮＯＴを行いたい場合、キュービット５０２，５０４をスワップして、キュービット５０１に隣接するキュービット５０２に、キュービット５０４の保持する状態を持ってくる必要がある。
【００４８】
図９及び図１０は、量子コンピュータシステム１００におけるプログラムないしはソフトウェアの関係を示した図である。量子コンピュータシステム１００を利用しようとするユーザは、古典プログラム２１１、量子プログラム２１２、入力データ２３３を用意する。
【００４９】
量子コンピュータシステム１００において、プログラムを実行して結果を得るまでの過程（機能）は、図９の古典コンパイルフェーズ（古典コンパイル機能）Ｓ４００、図９の前処理フェーズ（前処理機能）Ｓ４１０、図９の本処理準備フェーズ（本処理準備機能）Ｓ４２０、図１０の本処理実行フェーズ（本処理実行機能）Ｓ５００、図１０の後処理フェーズ（後処理機能）Ｓ５１０に大別できる。
【００５０】
図９の古典コンパイルフェーズＳ４００では、古典プログラム２１１を古典コンパイラ２２１でコンパイルし、古典オブジェクト２３１を得る。このフェーズは古典プログラム２１１を変更する度に行う必要がある。古典コンパイルフェーズＳ４００は、現在一般的に用いられているコンピュータで、プログラムをコンパイルして実行形式を生成するフェーズと同様のものである。
【００５１】
前処理フェーズＳ４１０では、古典オブジェクト２３１を実行することで、量子アルゴリズムの前処理を行う。このとき、処理するべきデータやパラメータは入力データ２３３として与えられる。入力データ２３３を入力として、前処理実行Ｓ４１１で古典オブジェクト２３１を実行し、処理結果として中間データ２３４を得る。前処理フェーズＳ４１０は入力データ２３３を変更するたびに行う必要がある。例えば、複数のデータやパラメータに対して処理を行う場合には、その都度前処理フェーズＳ４１０を実行する必要がある。なお、前処理が必要ない量子アルゴリズムでは、前処理フェーズＳ４１０は省略できる。
【００５２】
本処理準備フェーズＳ４２０では、量子アルゴリズムのうち本処理を担う量子プログラム２１２を量子コンパイラ２２２で量子マイクロコード２３２に変換する。量子マイクロコード２３２には、量子プログラム２１２で処理すべきデータも織り込まれる必要があるので、量子コンパイラ２２２は量子プログラム２１２の他に、前処理フェーズＳ４１０で生成された中間データ２３４も入力としている。生成された量子マイクロコード２３２は、低温部転送Ｓ４２１で低温部１０２に転送される。
【００５３】
なお、量子コンパイラ２２２は後述するようにコンパイル時にハードウェア機能情報７０７、及び、ハードウェア制限情報７０８を必要とする。ハードウェア機能情報７０７は量子部３１０の設計時に確定する情報であり、予め用意されている。ハードウェア制限情報７０８は後述するトレーニングフェーズ（トレーニング機能）Ｓ４９０で生成される。
【００５４】
トレーニングフェーズＳ４９０は、量子部３１０の経年劣化、製造不良、及び、その時々の利用環境下における動作不良に応じて、それを回避した量子マイクロコード２３２を生成するために必要となるハードウェア制限情報７０８を生成するために行われる。そのため、トレーニングフェーズＳ４９０は、前述したようなハードウェアの特性を変化させうる変化要因の時間的な特性（発生頻度や変化速度）より十分に短い間隔で定期的に実行する。また、何らかの処理を実行した結果、その結果が誤っているなどハードウェアの動作不良が疑われる場合には、トレーニングフェーズＳ４９０を実行する。
【００５５】
図１０の本処理実行フェーズＳ５００では、本処理を実行する。本処理準備フェーズＳ４２０で低温部１０２に転送されてきた量子マイクロコード３２１を量子部実行Ｓ５０１で実行し、処理結果を観測レジスタ３０２に得る。この観測レジスタ３０２が保持する情報を本処理の結果として常温部転送Ｓ５０２で常温部１０１に転送する。
【００５６】
後処理フェーズＳ５１０では、前処理フェーズＳ４１０と同様に古典オブジェクト２３１を実行することで、量子アルゴリズムの後処理を行う。後処理では本処理実行フェーズＳ５００の実行結果、すなわち常温部転送Ｓ５０２で転送されてきた観測データ２３５を用いる。そのため、後処理実行Ｓ５１１は観測データ２３５を入力データとして古典オブジェクト２３１を実行する。後処理実行Ｓ５１１の実行結果Ｓ５１２が量子アルゴリズムの実行によって最終的に得られる実行結果となる。
【００５７】
本実施例によれば、量子コンピュータをプログラム可能とし、それにより汎用性の高い量子コンピュータシステムを実現することができる。すなわち、本実施例の量子コンピュータシステムは、量子コンピュータ機能部と古典コンピュータ機能部とのハイブリッドシステムとして構成されており、量子コンピュータ機能部（低温部１０２）が、量子部３１０、古典記憶装置（命令バッファ３２０）及びこの古典記憶装置と量子部３１０とにアクセス可能な制御装置（マイクロ制御部３０１）を備え、量子部３１０は少なくとも１個のキュービット４１０で構成される量子レジスタ３１２と、量子レジスタに対して操作を行う制御ゲート３１１と、量子レジスタの状態を観測する読出しゲート３１３とを有している。古典記憶装置は、制御ゲートないしは読出しゲートに対する操作命令の列である量子マイクロコード３２１を記憶し、制御装置３０１は、古典記憶装置から量子マイクロコードを読み出して制御ゲートないしは読出しゲートを制御する。一方、古典コンピュータ機能部（常温部１０１）は、アプリケーションプログラム２１０とシステムソフトウェア２２０を備え、システムソフトウェアには量子プログラム２１２を量子マイクロコードに変換する量子コンパイラ２２２を有する。このように、入力データを織り込んだ量子マイクロコード３２１を生成する量子コンパイラ２２２を常温部１０１のハードウェア構成として備えている。そのため、常温部１０１のみならず低温部１０２の量子部３１０の全素子をも使用した一連のシーケンスを実行するプログラムを容易に生成することができる。低温部の量子コンピュータ機能部における量子アルゴリズムの実行によって最終的に得られる実行結果は、観測データとして常温部に出力される。これにより、単に一種類の問題に対して効果を発揮するだけでなく、複数種の問題に対して汎用的に用いることができる、汎用性の高い量子コンピュータシステムを実現することができる。
【００５８】
なお、量子コンピュータ機能部と古典コンピュータ機能部は、各々、コンピュータに所定の機能を実現させるためのプログラムを備えており、このプログラムをコンピュータで実行することにより、上記各処理機能がコンピュータ上で実現される。この処理機能を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録することができる。
【００５９】
次に、上記のように量子部をプログラム可能としたことを利用して、実行されるトレーニングフェーズＳ４９０について述べる。動作が不安定な素子（キュービット）の使用を制限し、量子コンピュータシステムの安定性を向上させるために、予め、トレーニングフェーズＳ４９０で量子コンピュータシステムを動作させ、量子部３１０を構成する素子の動作を検査し不安定な可能性がある素子の使用を制限するハードウェア制限情報７０８を取得する。
【００６０】
図１１は、量子部とトレーニング処理の関係を説明する図である。量子部３１０は、制御ゲート３１１の内側に配置されたＮ個のキュービット（キュービット番号０〜（Ｎ−１））から構成される量子レジスタ３１２を備えており、ここではハッチング表示された３個のキュービットが、作製技術の問題などで動作が不安定な素子であると想定する。このトレーニングフェーズＳ４９０では、このようなキュービットに関する情報を事前に抽出し、ハードウェア制限情報７０８として登録する。
【００６１】
図１２は、ハードウェア制限情報７０８を更新するためのトレーニング動作を示したフローチャートである。図１３は、量子コンピュータシステム内の、トレーニング動作を実行するトレーニングフェーズＳ４９０の動作の一例を示す図である。このトレーニング動作は量子レジスタ３１２の故障状況等を検出して、ハードウェア制限情報７０８を更新するためのものである。トレーニング動作も、図９及び図１０に示した量子プログラムの実行過程と同様にして行うことができる。例えば、図１１の番号Ｘのキュービットのように、量子レジスタ３１２の内側で読出しゲートから離れた位置にあるキュービットであっても、前述したスワップを利用して、その状態を読み出す。以下では、図１２のフローチャートと、図１３の動作を対応させながら説明する。
【００６２】
図１２のステップＳ４９１で、トレーニング用の量子マイクロコードを実行する。トレーニング用の量子マイクロコードは種々の動作の形態が考えられるが、例えば、量子レジスタ３１２に対して特定の状態を生成し、それを読み出して検査する方法がある。例えば、０に初期化すれば、０を観測することが期待できる。０と１の重ね合わせの状態を生成すれば、０及び１各々の確率に応じて、その確率で観測することが期待できる。
【００６３】
トレーニングフェーズのステップＳ４９１は、図１３のトレーニング用マイクロコード４９０１を低温部転送Ｓ４９２１で低温部１０２に転送し、量子部実行Ｓ４９２２で実行しているのに対応する。
【００６４】
次に、ステップＳ４９２で観測を行い、ステップＳ４９３で観測データと期待値を比較してそれらの差分を検査する。なお、重ね合わせ状態を用いた検査では、一回の観測だけでは検査が出来ず、ステップＳ４９１〜Ｓ４９３を何度か繰り返して、観測結果の統計を見ることで判断することになる。図１２のステップＳ４９２は、図１３において、観測レジスタ４９０２に格納された観測結果を常温部転送Ｓ４９２３で常温部１０１に転送していることに対応し、ステップＳ４９３は観測結果処理Ｓ４９２４に対応する。
【００６５】
上記の検査結果を元に、ステップＳ４９４でハードウェア制限情報７０８を生成し、トレーニングを完了する。ステップＳ４９４は、図１３ではハードウェア制限情報生成Ｓ４９２５でハードウェア制限情報７０８を生成していることに対応する。
【００６６】
図１４に、ハードウェア制御情報７０８の構成の一例を示す。図１４のハードウェア構成情報７０８は表形式のデータ構造であり、利用可否、ステータス、及び、エラーレートを示す列がある。量子レジスタ３１２がＮ個のキュービットから構成される時、各キュービットに対するハードウェア制限情報を記憶するために、０〜Ｎ−１までのＮ行で構成される。利用可否はトレーニングの結果、当該キュービットを利用可能であるかどうかを示し、例えば０が利用不可、１が利用可能とする。量子コンパイラ２２２はこの情報を参照してキュービットの利用可否を判断する。ステータス、及び、エラーレートは故障要因の詳細な分析、及び、将来の故障予測を行うためにある。エラーレートはキュービットのエラー率、即ち、観測データと期待値が異なる率を記録するものである。また、ステータスは例えば異常無し（０００）、エラーレート上昇傾向にあるがまだ利用可能（００１）、エラーレートが限界値を超えたので利用不可能（０１０）などを記録する。
【００６７】
図９及び図１０で示した各フェーズＳ４００，Ｓ４１０，Ｓ４２０，Ｓ５００，Ｓ５１０において、古典コンパイルフェーズＳ４００は、古典プログラム２１１が変更されない限り、一度実行して古典オブジェクト２３１を得ておけば済む。古典プログラム２１１はアルゴリズムの変更やバグフィックスなどの変更要因があるが、いずれも実行毎に行うほど頻繁ではないことが一般的である。それに対して、前処理フェーズＳ４１０以降は、入力データ２３３に依存しているため、入力データ２３３に変更がある度に再実行する必要がある。そこで、システムソフトウェア２２０の実行マネージャ２２３は、図９及び図１０で示した各フェーズＳ４１０，Ｓ４２０，Ｓ５００，Ｓ５１０を必要に応じて行い、量子アルゴリズムを正常に実行するためには実行過程全体を管理する。実行マネージャ２２３は量子アルゴリズムの実行開始を指令するユーザからの指示によって起動する。
【００６８】
図１５は、実行マネージャ２２３の動作の一例を示すフローチャートである。  
ステップＳ６０１では、中間データ２３４の存在、及び、入力データ２３３に変更があったかを検査する。中間データ２３４が存在しないということは前処理がまだ行われていないことを意味しており、前処理フェーズＳ４１０を実行する必要があるため、ステップＳ６０２に進む。また、入力データ２３３に変更があった場合、中間データ２３４が存在していたとしても、それは変更前の古い入力データ２３３に対応するものであるから、前処理フェーズＳ４１０を再度実行して中間データ２３４を更新しなければならない。よって、同様にステップＳ６０２に進む。入力データ２３３に変更がなく、かつ、対応する中間データ２３４が既に生成されている場合に限り、前処理フェーズＳ４１０を省略することができる。よって、この時は前処理フェーズＳ４１０を省略してステップＳ６０３に進む。
【００６９】
ステップＳ６０２では、前述した前処理フェーズＳ４１０を実行し、ステップＳ６０３に進む。  
ステップＳ６０３では、量子マイクロコード２３２の存在、及び、中間データ２３４に変更があったかを検査する。量子マイクロコード２３２が存在していなければ本処理準備フェーズＳ４２０を実行して量子マイクロコード２３２を生成するために、ステップＳ６０４に遷移する。また、量子マイクロコード２３２が存在していても、中間データ２３４に変更がある場合には、量子マイクロコード２３２が中間データ２３４に依存するために、本処理準備フェーズＳ４２０を再度実行するために、ステップＳ６０４に遷移する。ステップＳ６０１と同様の考え方であるが、量子マイクロコード２３２が既に存在しており、かつ、中間データ２３４に変更が無い場合には、本処理準備フェーズＳ６０４を省略して、本処理実行フェーズＳ６０５に進む。
【００７０】
ステップＳ６０４では、前述した本処理準備フェーズＳ４２０を実行し、ステップＳ６０４に進む。  
ステップＳ６０５では、前述した本処理実行フェーズＳ５００を実行し、ステップＳ６０５に進む。
【００７１】
ステップＳ６０６では、本処理実行フェーズＳ５００の実行回数が規定された回数に達したかを検査し、満たなければ再度本処理実行フェーズＳ５００を実行するためステップＳ６０５に戻る。実行回数を満たしていたら、ステップＳ６０７に進む。実行回数は入力データ２３３ないしは中間データ２３４で規定される。  
ステップＳ６０７では、前述した後処理フェーズＳ５１０を実行し、ステップＳ６０８に進む。
【００７２】
ステップＳ６０８では、後処理フェーズＳ５１０で得られた実行結果Ｓ５１２を検査し、処理が成功していれば終了する。もし、間違った実行結果が得られているなど処理が失敗している場合には、再度実行をやりなおすため、図１５のフローチャートの先頭まで戻る。なお、このとき必要に応じてステップＳ６０９で入力データ２３３を変更する。入力データ２３３を変更するのは、ユーザ操作ないしは古典オブジェクト２３１の実行によって行う。すなわち、古典オブジェクト２３１は前処理ないしは後処理に加えて、その一環として再実行時に入力データ２３３を変更する役割も担う。
【００７３】
図１６は、量子コンパイラ２２２の動作と入力及び出力の関係を示した図である。量子コンパイラ２２２は量子プログラム２１２と中間データ２３４を入力として、量子マイクロコード２３２を生成する。この生成機能、すなわち図１６の量子コンパイラ２２２内で行われている処理（Ｓ７０１〜Ｓ７０６）をコンパイルと称する。コンパイルの過程でハードウェア機能情報７０７とハードウェア制限情報７０８も入力として用いられる。
【００７４】
ハードウェア機能情報７０７は、量子コンピュータシステム１００における量子コンピュータ機能部である低温部１０２の有する機能を定義する情報である。具体的には、量子マイクロコード２３２を生成する上での制約として示される。例えば、ＣＮＯＴ命令が利用可能である、といった情報が記録される。また、オペランドに対する制約も指定される。例えば、量子レジスタ３１２上の隣接するキュービット間でしかＣＮＯＴ命令が適用できない場合には、量子レジスタＱＲ上のキュービットＱＲ（ｉ）とＱＲ（ｉ＋１）が隣接するキュービットだとすると、ＣＮＯＴ命令のオペランドはＱＲ（ｉ），ＱＲ（ｉ＋１）の関係を満たさなければならないという制約が記述される。量子コンパイラ２２２は、ハードウェア機能情報７０７で定義される制約に基づいて量子マイクロコード２３２を生成する。
【００７５】
ハードウェア制限情報７０８は、量子部３１０の製造ばらつきや故障に起因する障害を示す情報である。量子部３１０を構成する構成要素のうち、特に量子レジスタ３１２は外乱の影響を受けやすく、またキュービット数が増加することで量子レジスタ３１２全体としての故障確率は増加する。それに対して、背景技術で述べたように量子誤り訂正技術が用いられているが、恒常的に故障しているキュービットがある場合には量子誤り訂正技術を用いるだけでなく、プログラムの段階で当該キュービットを回避して利用することで、より安定して利用可能となることが期待できる。そこで、量子コンパイラ２２２は、ハードウェア制限情報７０８で示されている故障キュービットを使わないように、量子マイクロコード２３２を生成する。
【００７６】
なお、ハードウェア機能情報７０７は低温部１０２の仕様によって決まるため、設計時に決定できる情報である。一方、ハードウェア制限情報７０８は量子部３１０の製造時のばらつきや劣化、動作環境等に影響を受けるため、量子コンピュータシステム１００の運用中にその制限は変わってくる。すなわち、運用中にハードウェア制限情報７０８を更新する手段が必要となるが、このために前述したトレーニングフェーズＳ４９０を用いる。
【００７７】
量子コンパイラ２２２で行われるコンパイルのうち、字句解析Ｓ７０１、構文解析Ｓ７０２、及び、意味解析Ｓ７０３に関しては、従来の古典コンピュータで用いられてきたコンパイラと同様であるので、説明を省略する。一般的な従来の古典コンピュータのコンパイラでは、入力されたプログラム（ソースコード）の字句解析、構文解析、及び、意味解析を行った後、コード生成と最適化を行う。これとは異なり量子コンパイラ２２２では、意味解析Ｓ７０３の後にデータ埋め込みＳ７０４という処理を行う。
【００７８】
データ埋め込みＳ７０４は、意味解析Ｓ７０３の結果得られた量子コンパイラ２２２内部の中間言語（中間形式）で、量子プログラム２１２の入力となっている変数に、中間データ２３４に示されているデータを当てはめる処理を行う。この処理により、実行時に入力すべき変数を、量子コンパイラ２１２でのコンパイル時に入力していることになる。
【００７９】
コード生成Ｓ７０５では、データ埋め込みＳ７０４が完了した後の中間言語から、量子マイクロコードＳ７０５を生成する。このとき、ハードウェア機能情報７０７を参照して、利用可能な命令やオペランドの制約を取得する。中間言語で表現されている処理を、ハードウェア機能情報７０７に示された利用可能な命令の組み合わせで表現する。また、オペランドの制約を満たすために、量子レジスタ３１２内の２つのキュービットが保持している状態を交換するスワップ命令などを加える。
【００８０】
また、コード生成Ｓ７０５では、ハードウェア機能情報７０７のみならず、ハードウェア制限情報７０８に示されている制約も加味して量子マイクロコードＳ７０５を生成する。ハードウェア制限情報７０８には、利用不可能なキュービットが示されているので、このキュービットを回避して処理を行うように、スワップ命令などを加える。
【００８１】
最後に、最適化Ｓ７０６でコード生成Ｓ７０５が生成した量子マイクロコードを最適化して、コンパイル結果として量子マイクロコード２３２を出力する。
【００８２】
本実施例によれば、古典コンピュータ機能部と量子コンピュータ機能部とを使用した一連のシーケンスを実行するプログラムを生成することができ、それにより汎用性の高い量子コンピュータシステムを実現することができる。また、プログラム可能であることを利用して、予めトレーニングフェーズを実施し、故障等の問題に対してプログラムの動作を変更することで動的に対応し、安定性を高めることができる。これによって、汎用的かつ安定的に利用することができる量子コンピュータシステムを提供することができる。
【実施例２】
【００８３】
次に、図１７〜図２０を用いて、本発明の実施例２に係る量子コンピュータシステムを説明する。  
本実施例では、プログラム可能であることにより、汎用的かつ安定的に利用することができる量子コンピュータシステム１００の、別の実施の形態を説明する。実施例２では、古典コンピュータ機能部と量子コンピュータ機能部からなる量子コンピュータシステムの全体の構成は実施例１と同じく図１に示す構成であるが、常温部１０１と低温部１０２の構成が異なる。実施例１で説明した図と同一の符号を付された構成と、同一の機能を有する部分については、説明を省略する。
【００８４】
量子コンピュータシステム１００を構成する上で、伝送路１０３の両端は著しい温度差を持つことになる。そのため、伝送路１０３のレイテンシやスループットは必ずしも良好なものではない可能性がある。一方で、量子マイクロコード２３２は、量子プログラム２１２の高級な記述内容をより低級な操作命令と観測命令に書き下したものであると言えるため、そのコード長は元のプログラムと比較して長大なものになる。そうした長大な量子マイクロコードの伝送に耐えうる性能を、伝送路１０３で実現できないときのために、本実施例では、伝送路１０３に求められる性能要件を軽減する量子コンピュータシステム１００の実施の形態を示す。
【００８５】
本実施例では、図１の量子コンピュータシステム１００において、常温部１００を図１７に示す常温部１００１に、低温部１０２を図１８に示す低温部１１０１に置き換えた構成を用いる。また、それに伴って、図９で説明した前処理フェーズＳ４１０及び本処理準備フェーズＳ４２０と、図１０で説明した本処理実行フェーズＳ５００の動作がそれぞれ変わる。以下に、それぞれに関して説明する。
【００８６】
図１７は、実施例２における常温部１００１の構成を示す構成図の例である。実施例１の常温部１００と比較して、実施例２の常温部１００１では量子コンパイラ２２２を備えないことを特徴とする。また、量子コンパイラ２２２を備えないため、量子コンパイラ２２２が生成する量子マイクロコード２３２も備えていない。
【００８７】
図１８は、実施例２における低温部１１０１の構成を示す構成図の例である。実施例１の低温部１０２と比較して、マイクロ制御部３０１がＣＰＵ１１０２に置き換わっていることを特徴とする。それに伴い、実施例１でマイクロ制御部３０１に付随していた命令バッファ３２０は、実施例２においてＣＰＵ１１０２の主記憶装置１１３０に変更する。この主記憶装置１１３０は、中間データ１１３１、量子プログラム１１３２、量子コンパイラ１１３３、及び、量子マイクロコード１１３４を備える。中間データ１１３１及び量子プログラム１１３２は、常温部１００１の中間データ２３４及び量子プログラム２１２が、伝送路１０３経由で伝送されたものである。すなわち、実施例１では伝送路１０３が伝送していたのは量子マイクロコード３２１であるが、本実施例では伝送路１０３は中間データ１１３１及び量子プログラム１１３２を伝送する。中間データ１１３１と量子プログラム１１３２のサイズが量子マイクロコード１１３４より小さければ、実施例１と比較して伝送路１０３への負荷を軽減することができる。
【００８８】
ＣＰＵ１１０２は、量子コンパイラ１１３３を実行し、中間データ１１３１及び量子プログラム１１３２をコンパイラの入力として、量子マイクロコード１１３４を生成する。また、生成した量子マイクロコード１１３４を元にして量子部３１０を制御する。そのため、コンパイルと量子部３１０の制御をパイプライン動作させることも可能で、量子マイクロコード１１３４を格納するための主記憶装置１１３０の容量を削減することができる。
【００８９】
図１９は、実施例２における前処理Ｓフェーズ１２００の動作の例を示す図である。実施例１では図９の本処理準備フェーズＳ４２０で量子マイクロコード２３２を生成した後、低温部転送Ｓ４２１を行っていた。それに対して、本実施例では図１９の前処理フェーズＳ１２００に示すように、中間データ２３４が生成できた段階で、中間データ２３４と量子プログラム２１２を低温部転送Ｓ１２０１で、低温部１１０１に転送する。
【００９０】
図２０は、実施例２における本処理準備フェーズＳ１３００及び本処理実行フェーズＳ１３１０の動作の例を示す図である。実施例１では本処理準備フェーズＳ４２０は常温部１０１で実行されていたが、実施例２では本処理準備フェーズＳ１３００を低温部１１０１のＣＰＵ１１０２で実行する。本処理準備フェーズＳ１３００では、量子アルゴリズムのうち本処理を担う量子プログラム１１３２を量子コンパイラ１１３３で量子マイクロコード１１３４に変換する。量子マイクロコード１１３４には、量子プログラム１１３２で処理すべきデータも織り込まれる必要があるので、量子コンパイラ１１３３は量子プログラム１１３２の他に、中間データ１１３１も入力としている。量子コンパイラ１１３３で必要となる中間データ１１３１及び量子プログラム１１３２は、前述した前処理フェーズ１２００の低温部転送１２０１で常温部１００１から低温部１１０１に転送されたものである。また、量子コンパイラ１１３３は、実施例１と同様に、コンパイル時にハードウェア機能情報７０７及びハードウェア制限情報７０８を必要とする。ハードウェア制限情報７０８は、トレーニングフェーズＳ４９０で生成されたものである。
【００９１】
なお、実施例２では量子コンパイラ１１３３が低温部１０２にあることから、図１３に示したトレーニングフェーズＳ４９０の低温部転送Ｓ４９２１、及び、量子部実行Ｓ４９２２に相当する処理を行わず、図１３の観測結果処理Ｓ４９２４及びハードウェア制限情報生成Ｓ４９２５に相当する処理を低温部１０２内のＣＰＵ１１０２上で行うことが出来る。この場合、トレーニングフェーズＳ４９０を実施例１より短い間隔で実行することが可能となるため、ハードウェアの特性変化への追従性を向上させることができる。
【００９２】
本実施例によれば、量子コンピュータをプログラム可能とし、それにより汎用性の高い量子コンピュータシステムを実現することができる。すなわち、本実施例の量子コンピュータシステムは、量子コンピュータ機能部と古典コンピュータ機能部とのハイブリッドシステムとして構成されており、量子コンピュータ機能部（低温部１１０１）が、量子部３１０、古典記憶装置（主記憶装置１１３０）及びこの古典記憶装置にアクセス可能な制御装置（ＣＰＵ１１０２）を備え、量子部３１０は少なくとも１個のキュービット４１０で構成される量子レジスタ３１２と、量子レジスタに対して操作を行う制御ゲート３１１と、量子レジスタの状態を観測する読出しゲート３１３とを有している。古典記憶装置は、量子プログラム１１３２を量子マイクロコード１１３４に変換する量子コンパイラ１１３３、及び、制御ゲートないしは読出しゲートに対する操作命令の列である量子マイクロコード１１３４を記憶し、制御装置１１０２は、古典記憶装置から量子マイクロコードを読み出して制御ゲートないしは読出しゲートを制御する。一方、古典コンピュータ機能部（常温部１００１）は、アプリケーションプログラム２１０とシステムソフトウェア２２０を備えている。このように、入力データを織り込んだ量子マイクロコード１１３４を生成する量子コンパイラ１１３３を低温部１１０１のハードウェア構成として備えている。そのため、常温部１０１のみならず低温部１０２の量子部３１０の全素子をも使用した一連のシーケンスを実行するプログラムを容易に生成することができる。低温部の量子コンピュータ機能部における量子アルゴリズムの実行によって最終的に得られる実行結果は、観測データとして常温部に出力される。これにより、単に一種類の問題に対して効果を発揮するだけでなく、複数種の問題に対して汎用的に用いることができる、汎用性の高い量子コンピュータシステムを実現することができる。
【００９３】
本実施例によれば、古典コンピュータ機能部と量子コンピュータ機能部とを使用した一連のシーケンスを実行するプログラムを生成することができ、それにより汎用性の高い量子コンピュータシステムを実現することができる。また、プログラム可能であることを利用して、予めトレーニングフェーズを実施し、故障等の問題に対してプログラムの動作を変更することで動的に対応し、安定性を高めることができる。これによって、汎用的かつ安定的に利用することができる量子コンピュータシステムを提供することができる。また、ハードウェアの特性変化への追従性を向上させることができる。
【００９４】
なお、上記各実施例で述べた量子コンピュータ機能部は、核磁気共鳴、量子光学等、超伝導磁束等の他のハードウェアに基づくもので有っても良い。
【符号の説明】
【００９５】
１００  量子コンピュータシステム
１０１  常温部
１０２  低温部
１０３  伝送路
２０１  主記憶装置
２０２  ＣＰＵ
２０３  Ｉ／Ｏアダプタ
２１０  アプリケーションプログラム
２１１  古典プログラム
２１２  量子プログラム
２２０  システムソフトウェア
２２１  古典コンパイラ
２２２  量子コンパイラ
２２３  実行マネージャ
２３０  ランタイム情報
２３１  古典オブジェクト
２３２  量子マイクロコード
２３３  入力データ
２３４  中間データ
２３５  観測データ
３０１  マイクロ制御部
３０２  観測レジスタ
３０３  Ｉ／Ｏアダプタ
３１０  量子部
３１１  制御ゲート
３１２  量子レジスタ
３１３  読出しゲート
３２０  命令バッファ
３２１  量子マイクロコード
４００  キュービットブロック
４１０  キュービット
４１１，４１２  量子ドット
４２０，４２１，４２２，４３０，４３１，４３２  制御ゲート
５０１，５０２，５０３，５０４  キュービットブロック
５１１，５１２，５２１，５２２  制御ゲート
５３１，５３２  単電子トランジスタ
Ｓ４００  古典コンパイルフェーズ
Ｓ４１０  前処理フェーズ
Ｓ４１１  前処理実行
Ｓ４２０  本処理準備フェーズ
Ｓ４２１  低温部転送
Ｓ４９０  トレーニングフェーズ
Ｓ５００  本処理実行フェーズ
Ｓ５０１  量子部実行
Ｓ５０２  常温部転送
Ｓ５１０  後処理フェーズ
Ｓ５１１  後処理実行
Ｓ５１２  実行結果
Ｓ７０１  字句解析
Ｓ７０２  構文解析
Ｓ７０３  意味解析
Ｓ７０４  データ埋め込み
Ｓ７０５  コード生成
Ｓ７０６  最適化
７０７  ハードウェア機能情報
７０８  ハードウェア制限情報
１００１  常温部
１１０１  低温部
１１０２  ＣＰＵ
１１３０  主記憶装置
１１３１  中間データ
１１３２  量子プログラム
１１３３  量子コンパイラ
１１３４  量子マイクロコード
Ｓ１２００  前処理フェーズ
Ｓ１２０１  低温部転送
Ｓ１３００  本処理準備フェーズ
Ｓ１３１０  本処理実行フェーズ
４９０１  トレーニング用マイクロコード
４９０２  観測レジスタ
Ｓ４９２１  低温部転送
Ｓ４９２２  量子部実行
Ｓ４９２３  常温部転送
Ｓ４９２４  観測結果処理
Ｓ４９２５  ハードウェア制限情報生成。
【図１】
0005921856.tif 000002
【図２】
0005921856.tif 000003
【図３】
0005921856.tif 000004
【図４】
0005921856.tif 000005
【図５】
0005921856.tif 000006
【図６】
0005921856.tif 000007
【図７】
0005921856.tif 000008
【図８】
0005921856.tif 000009
【図９】
0005921856.tif 000010
【図１０】
0005921856.tif 000011
【図１１】
0005921856.tif 000012
【図１２】
0005921856.tif 000013
【図１３】
0005921856.tif 000014
【図１４】
0005921856.tif 000015
【図１５】
0005921856.tif 000016
【図１６】
0005921856.tif 000017
【図１７】
0005921856.tif 000018
【図１８】
0005921856.tif 000019
【図１９】
0005921856.tif 000020
【図２０】
0005921856.tif 000021