(57)【特許請求の範囲】
【請求項１】
量子コンピュータと従来型コンピュータとを併設したコンピュータシステムにおける両コンピュータの協調的動作を従来型コンピュータを用いてシミュレーションするためのプログラムの開発を支援するプログラム開発支援装置であって、
a)従来型コンピュータに対応した既存の高位のレベルのプログラミング言語で記述されたソースコードを入力するための入力手段と、
b)該入力手段により入力されたソースコードの中で、その記述内容に基づいて、従来型コンピュータによる演算処理よりも量子コンピュータによる量子計算に適した処理部分を選択的に抽出する抽出手段と、
c)該抽出手段により抽出された処理部分を、該部分に対応した量子コンピュータによる量子計算動作をシミュレートするための前記プログラミング言語で記述されたプログラムに置換する置換処理を行う置換手段と、
を備えることを特徴とするプログラム開発支援装置。
【請求項２】
前記プログラミング言語はＣ++言語であることを特徴とする請求項１に記載のプログラム開発支援装置。
【請求項３】
前記抽出手段は、量子計算に適した処理部分を選択的に抽出する際に、入力されたソースコードの中で、その記述内容に基づいてデータベース検索に相当する処理部分を検出し、その検出された処理部分について従来型コンピュータで処理を実行した場合の所要時間と量子コンピュータで処理を実行した場合の所要時間とをそれぞれ推算し、その後者が前者よりも短いと判断した場合に、前記検出された処理部分が量子コンピュータによる量子計算に適した処理部分であると判断することを特徴とする請求項１又は２に記載のプログラム開発支援装置。
【請求項４】
前記置換手段は、前記抽出手段により抽出された処理部分を、量子計算用のグローバーの検索アルゴリズムを従来型コンピュータ上でシミュレートするプログラムに置換することを特徴とする請求項３に記載のプログラム開発支援装置。
【請求項５】
請求項１〜４のいずれかに記載のプログラム開発支援装置を含み、前記置換手段により置換処理がなされたソースコードをコンパイルするコンパイラと、そのコンパイルされた機械語に従った処理動作を実行するコンピュータとをさらに備えることを特徴とする、量子コンピュータと従来型コンピュータとを併設したコンピュータシステムにおける両コンピュータの協調的動作を従来型コンピュータを用いてシミュレーションするためのシミュレーション装置。
【請求項６】
量子コンピュータと従来型コンピュータとを併設したコンピュータシステムにおける両コンピュータの協調的動作を従来型コンピュータを用いてシミュレーションするプログラムを、従来型コンピュータにより作成するためのプログラム開発支援用プログラムであって、
従来型コンピュータに対応した既存の高位のレベルのプログラミング言語で記述されたソースコードが入力されたとき、該ソースコードの中で、その記述内容に基づいて、従来型コンピュータによる演算処理よりも量子コンピュータによる量子計算に適した処理部分を選択的に抽出し、その抽出された処理部分を、該部分に対応した量子コンピュータによる量子計算動作をシミュレートするための前記プログラミング言語で記述されたプログラムに置換する置換処理を、コンピュータに行わせることを特徴とするプログラム開発支援用プログラム。
【請求項７】
前記プログラミング言語はＣ++言語であることを特徴とする請求項６に記載のプログラム開発支援用プログラム。
【請求項８】
量子計算に適した処理部分を選択的に抽出する際に、入力されたソースコードの中で、その記述内容に基づいてデータベース検索に相当する処理部分を検出し、その検出された処理部分について従来型コンピュータで処理を実行した場合の所要時間と量子コンピュータで処理を実行した場合の所要時間とをそれぞれ推算し、その後者が前者よりも短いと判断した場合に、前記検出された処理部分が量子コンピュータによる量子計算に適した処理部分であると判断することを特徴とする、請求項６又は７に記載のプログラム開発支援用プログラム。
【請求項９】
前記置換処理は、前記抽出された処理部分を、量子計算用のグローバーの検索アルゴリズムを従来型コンピュータ上でシミュレートするプログラムに置換するものであることを特徴とする請求項８に記載のプログラム開発支援用プログラム。
【請求項１０】
量子コンピュータと従来型コンピュータとを併設したコンピュータシステムにおいて所定の処理動作を実行させるためのプログラムの開発を支援するプログラム開発支援装置であって、
a)従来型コンピュータに対応した既存の高位のレベルのプログラミング言語で記述されたソースコードを入力するための入力手段と、
b)該入力手段により入力されたソースコードの中で、その記述内容に基づいて、従来型コンピュータによる演算処理よりも量子コンピュータによる量子計算に適した処理部分を抽出する抽出手段と、
c)該抽出手段により抽出された処理部分を、該部分に対応した量子アルゴリズムを実行するプログラムに置換する置換処理を行う置換手段と、
を備えることを特徴とするプログラム開発支援装置。
【請求項１１】
前記プログラミング言語はＣ++言語であることを特徴とする請求項１０に記載のプログラム開発支援装置。
【請求項１２】
前記抽出手段は、量子計算に適した処理部分を選択的に抽出する際に、入力されたソースコードの中で、その記述内容に基づいてデータベース検索に相当する処理部分を検出し、その検出された処理部分について従来型コンピュータで処理を実行した場合の所要時間と量子コンピュータで処理を実行した場合の所要時間とをそれぞれ推算し、その後者が前者よりも短いと判断した場合に、前記検出された処理部分が量子コンピュータによる量子計算に適した処理部分であると判断することを特徴とする請求項１０又は１１に記載のプログラム開発支援装置。
【請求項１３】
前記置換手段は、前記抽出手段により抽出された処理部分を、量子計算用のグローバーの検索アルゴリズムを記述したプログラムに置換することを特徴とする請求項１２に記載のプログラム開発支援装置。
【請求項１４】
量子コンピュータと従来型コンピュータとを併設したコンピュータシステムにおいて所定の処理動作を実行させるためのプログラムを、従来型コンピュータにより作成するためのプログラム開発支援用プログラムであって、
従来型コンピュータに対応した既存の高位のレベルのプログラミング言語で記述されたソースコードが入力されたとき、該ソースコードの中で、その記述内容に基づいて、従来型コンピュータによる演算処理よりも量子コンピュータによる量子計算に適した処理部分を選択的に抽出し、その抽出された処理部分を、該部分に対応した量子アルゴリズムを実行するプログラムに置換する置換処理を、コンピュータに行わせることを特徴とするプログラム開発支援用プログラム。
【請求項１５】
前記プログラミング言語はＣ++言語であることを特徴とする請求項１４に記載のプログラム開発支援用プログラム。
【請求項１６】
量子計算に適した処理部分を選択的に抽出する際に、入力されたソースコードの中で、その記述内容に基づいてデータベース検索に相当する処理部分を検出し、その検出された処理部分について従来型コンピュータで処理を実行した場合の所要時間と量子コンピュータで処理を実行した場合の所要時間とをそれぞれ推算し、その後者が前者よりも短いと判断した場合に、前記検出された処理部分が量子コンピュータによる量子計算に適した処理部分であると判断することを特徴とする請求項１４又は１５に記載のプログラム開発支援用プログラム。
【請求項１７】
前記置換処理は、前記抽出された処理部分を、量子計算用のグローバーの検索アルゴリズムを記述したプログラムに置換するものであることを特徴とする請求項１６に記載のプログラム開発支援用プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、量子コンピュータと従来型コンピュータとを併設したコンピュータシステムを動作させるためのプログラムの開発を支援するプログラム開発支援装置と、そうしたコンピュータシステムにおける量子コンピュータと従来型コンピュータとの協調的動作を従来型コンピュータを用いてシミュレーションするためのプログラムの開発を支援するプログラム開発支援装置及びシミュレーション装置に関する。
【背景技術】
【０００２】
量子コンピュータは現在のコンピュータ（本明細書中では従来型コンピュータと呼ぶ）とは全く異なる原理で動作するものであり、例えば原子、イオン、電子、光子等の物質の量子状態の遷移を利用したコンピュータである。量子コンピュータは、例えば因数分解などの問題に関して従来型コンピュータよりも遙かに高速な計算が可能であることが論理的に実証されていることから、世界中の多くの組織や機関で研究・開発が鋭意進められている。現在、量子コンピュータについては主に２つの方向から研究が行われている。その１つは、量子コンピュータの演算を実行するための基本素子である量子論理ゲートつまりハードウエアの開発であり、他の１つは、量子論理ゲートの実現を想定した上で、その量子論理ゲートを利用して動作する量子コンピュータの量子計算用のアルゴリズムつまりソフトウエアに関する研究である。【０００３】
量子アルゴリズムの研究として最もよく知られているのは、ショア(Shor)による整数の因数分解と離散対数問題に対する多項式時間アルゴリズム（非特許文献１参照）、及び、未整理なデータベースに対する検索を目的としたグローバー(Grover)のデータベース検索アルゴリズムである（非特許文献２参照）。例えばＮ個の元の探索問題について、従来型コンピュータにおけるデータベース検索方法では最大Ｏ（Ｎ）ステップの処理が必要であるのに対し、上記グローバーのデータベース検索アルゴリズムによれば最大Ｏ（√Ｎ）ステップで解くことができることが知られている。このように量子コンピュータでは、従来型コンピュータでは膨大な時間を要する問題に対し、格段に短い時間で以て解を得ることができる。【０００４】
上述したように量子コンピュータにおける量子計算の原理は従来型コンピュータの計算原理とは全く異なるため、量子アルゴリズムに基づくプログラムを記述してその動作を現在入手可能な従来型コンピュータで検証することはかなり困難な作業である。もちろん、量子アルゴリズムを記述するための高位のレベルのプログラミング言語もこれまで数多く提案されている。しかしながら、こうした特殊なプログラミング言語は取り扱いにくく、量子計算に熟知している者でないと記述を行うことが困難である。【０００５】
また、量子コンピュータは従来型コンピュータと比較してその高速性が注目されているが、全ての演算処理において従来型コンピュータに勝るわけではなく、実際には例えば平易な四則演算など従来型コンピュータでも十分に高速で行えるような問題に対しては同等か或いは従来型コンピュータよりも劣る場合もあると考えられる。さらにまた、量子コンピュータが実用化されてもその価格は従来型コンピュータよりも遙かに高価になる可能性が高いため、コストパフォーマンスを考えた場合、様々な問題を全て量子コンピュータ上で実行するのはあまり有効ではなく、従来型コンピュータと量子コンピュータとを併設して各コンピュータにそれぞれ適した（換言すれば各コンピュータが得意とするところの）問題を振り分けて実行させることが有用であると考えられる。このような従来型コンピュータと量子コンピュータとを併設したコンピュータシステムでは両コンピュータを協調的に動作させる必要があるため、従来型コンピュータで使用されている既存のプログラミング言語で全てのプログラムを記述できることが望ましい。しかしながら、現状では、こうした必要性は認識されておらず、そうしたことを考慮したプログラムやアルゴリズムの開発環境は存在しない。【０００６】
また、現在のところ量子コンピュータ自体は実現されていないが、従来型コンピュータを用いて量子計算のシミュレーションを行うことは盛んに研究されており、そうしたシミュレータ用プログラムも入手可能である。しかしながら、上述したような従来型コンピュータと量子コンピュータとを併設したコンピュータシステムでの協調的動作をシミュレーションで検証したい場合には、例えば、量子計算シミュレータ用に作成したプログラムを従来型コンピュータで実行させて演算結果を取得し、その結果を組み込んだ別のプログラムを作成してこれをまた従来型コンピュータで実行させるといった面倒で煩雑な作業が必要であり、非常に効率が悪い。こうしたことから、量子コンピュータが実現される前の段階において、量子計算を含む様々なアルゴリズムの検証を効率良く行うためのツールが切望されている。【０００７】
【非特許文献１】ピー・ダブル・ショア(P.W.Shor)、「アルゴリズムス・フォー・クォンタム・コンピュテーション：ディスクリート・ロガリズムス・アンド・ファクタリング(Algorithms fo Quantum computation: Discrete Logarithms and Factoring)」、プロシーディング・３５ス・アンニュアル・シンポジウム・オン・ファンデーションズ・オブ・コンピュータ・サイエンス(Proc. Annual 35th Symposium on Foundations of Computer Science)、１９９４、ｐ．１２４−１３４
【非特許文献２】エル・ケー・グローバー(L.K.Grover)、「ア・ファースト・クォンタム・メカニカル・フォー・データベース・サーチ(A fast quantum mechanical for database search)」、プロシーディング・アンニュアル・エーシーエム・シンポジウム・オン・セオリー・オブ・コンピューティング(Proc. Annual ACM Symposium on Theory of Computing)、１９９６、ｐ．２１２−２１９
【発明の開示】
【発明が解決しようとする課題】
【０００８】
本発明は上記課題に鑑みて成されたものであり、その第１の目的とするところは、従来型コンピュータと量子コンピュータとを併設したコンピュータシステムにおける両コンピュータの協調的動作を従来型コンピュータを用いてシミュレーションしようとする際に、量子計算や量子コンピュータに未熟な者でも既存の高位レベルのプログラミング言語の知識さえあればシミュレーション用プログラムを容易に作成して効率的なシミュレーション作業を行うことができるプログラム開発支援装置を提供するとともに、そうしたコンピュータシステムの処理動作のシミュレーションを容易に行うことができるシミュレーション装置を提供することにある。【０００９】
また、本発明の第２の目的とするところは、従来型コンピュータと量子コンピュータとを併設したコンピュータシステムで所定の処理動作を実行させるためのプログラムを作成するに際し、量子計算や量子コンピュータに未熟な者でも既存の高位レベルのプログラミング言語の知識さえあれば量子計算を含むプログラムを容易に作成・記述することができるプログラム開発支援装置を提供することにある。
【課題を解決するための手段】
【００１０】
上述したように、量子コンピュータはその高速性が注目されているが全ての演算処理について従来型コンピュータよりも格段に高速であるわけではない。そこで、本願発明者は、従来型コンピュータと量子コンピュータとが併設されたコンピュータシステムの有効な利用方法として、量子計算に向く可能性が高いことが予めわかっている特定の処理のみを量子コンピュータに担当させ、その特定の処理以外の一般的な処理については従来型コンピュータに担当させるという負荷の分配処理を行うことに想到した。【００１１】
具体的には、既に従来型コンピュータによる処理よりも高速での処理が可能となり得ることが確認されており、且つ応用範囲が広いグローバーの検索アルゴリズム（なお、ここではグローバーの検索アルゴリズムを基本として改良が加えられた検索アルゴリズムも含む）を適用することが可能であるデータベース検索の処理に着目し、従来型コンピュータ用の高位のプログラミング言語、典型的にはＣ++言語で記述されたソースコードの中にそうしたデータベース検索処理が存在した場合に、その部分のみをグローバーの検索アルゴリズムをシミュレーションするためのプログラム又は該検索アルゴリズムに対応したプログラムに置換することにより、既存の高位のレベルのプログラミング言語の知識のみでのプログラムの作成を可能とした。【００１２】
即ち、上記第１の目的を達成するために成された第１発明は、量子コンピュータと従来型コンピュータとを併設したコンピュータシステムにおける両コンピュータの協調的動作を、従来型コンピュータを用いてシミュレーションするためのプログラムの開発を支援するプログラム開発支援装置であって、
a)従来型コンピュータに対応した既存の高位のレベルのプログラミング言語で記述されたソースコードを入力するための入力手段と、
b)該入力手段により入力されたソースコードの中で、その記述内容に基づいて、従来型コンピュータによる演算処理よりも量子コンピュータによる量子計算に適した処理部分を選択的に抽出する抽出手段と、
c)該抽出手段により抽出された処理部分を、該部分に対応した量子コンピュータによる量子計算動作をシミュレートするための前記プログラミング言語で記述されたプログラムに置換する置換処理を行う置換手段と、
を備えことを特徴としている。【００１３】
また上記第１の目的を達成するために成された第２発明は、量子コンピュータと従来型コンピュータとを併設したコンピュータシステムにおける両コンピュータの協調的動作を従来型コンピュータを用いてシミュレーションするプログラムを、従来型コンピュータにより作成するためのプログラム開発支援用プログラムであって、
従来型コンピュータに対応した既存の高位のレベルのプログラミング言語で記述されたソースコードが入力されたとき、該ソースコードの中で、その記述内容に基づいて、従来型コンピュータによる演算処理よりも量子コンピュータによる量子計算に適した処理部分を選択的に抽出し、
その抽出された処理部分を、該部分に対応した量子コンピュータによる量子計算動作をシミュレートするための前記プログラミング言語で記述されたプログラムに置換する置換処理をコンピュータに行わせることを特徴としている。【００１４】
第１及び第２発明において、プログラミング言語としては既存の各種のものを使用することができるが、具体的な一態様として例えばＣ++言語とすることができる。
【発明の効果】
【００１５】
第１発明に係るプログラム開発支援装置及び第２発明に係るプログラム開発支援用プログラムによれば、コンピュータシステムで実行したい処理内容を例えばＣ++言語などにより記述しさえすれば、抽出手段は、入力されたソースコードの中でその記述内容に基づいて従来型コンピュータによる演算処理よりも量子コンピュータによる量子計算に適した処理部分を選択的に抽出し、置換手段は、その処理部分に対応した量子計算をシミュレートするためのプログラムに自動的に置換する。したがって、プログラム作成に際して量子計算や量子アルゴリズムに関する知識が乏しい者であっても、両コンピュータの協調的動作をシミュレートするためのプログラムを容易に記述・作成することができる。それによって、従来型コンピュータと量子コンピュータとの協調的動作の検証が容易且つ効率的に行え、そのためのアルゴリズムの新規開発も促進される。【００１６】
また第１及び第２発明においては、量子計算に適した処理部分を選択的に抽出する際に、入力されたソースコードの中で、その記述内容に基づいてデータベース検索に相当する処理部分を検出し、その検出された処理部分について従来型コンピュータで処理を実行した場合の所要時間と量子コンピュータで処理を実行した場合の所要時間とをそれぞれ推算し、その後者が前者よりも短いと判断した場合に、前記検出された処理部分が量子コンピュータによる量子計算に適した処理部分であると判断することが好ましい。【００１７】
またその場合、前記置換手段は、前記抽出された処理部分を、量子計算用のグローバーの検索アルゴリズムを従来型コンピュータ上でシミュレートするプログラムに置換するものとすることができる。【００１８】
一般に量子計算であるグローバーの検索アルゴリズムによるデータベース検索は従来型コンピュータによるデータベース検索アルゴリズムよりも高速であるが、例えば検索対象の母数が少ない場合には両者の速度がほぼ同等か、従来型コンピュータによるデータベース検索アルゴリズムのほうが高速となる場合があり得る。これに対し上記構成によれば、入力されたソースコードの中でグローバーの検索アルゴリズムにより置換し得る処理部分が存在した場合でも、無条件に置換を実行するのではなく、予め両者の処理時間をそれぞれ推算し、両者の処理時間を比較することで量子計算に置き換えることが有効か否かを決めている。したがって、これによれば量子コンピュータをより有効に利用する状態の下でのシミュレーションを行うことができる。【００１９】
また、第１発明に係るプログラム開発支援装置はそれ単独で使用される以外に、量子コンピュータと従来型コンピュータとを併設したコンピュータシステムにおける両コンピュータの協調的動作を従来型コンピュータを用いてシミュレーションするためのシミュレーション装置の一部として利用することができる。即ち、こうしたシミュレーション装置は、第１発明に係るプログラム開発支援装置の前記置換手段により置換処理が成されたソースコードをコンパイルするコンパイラと、そのコンパイルされた機械語に従った処理動作を実行するコンピュータとをさらに備えるものである。【００２０】
このシミュレーション装置によれば、例えばＣ++言語などの既存の高位のレベルのプログラミング言語により記述したソースコードを入力しさえすれば、量子コンピュータによる量子計算に向いた部分についてはその量子計算をシミュレートするプログラムに自動的に変換が成され、従来型コンピュータと量子コンピュータとの協調的動作がシミュレートされる。したがって、こうした動作の検証が非常に容易に且つ効率的に行え、量子アルゴリズムの新規開発や改良などに有用である。【００２１】
第１及び第２発明に係るプログラム開発支援装置及びプログラム開発支援用プログラムは、量子コンピュータによる量子計算、量子アルゴリズムを従来型コンピュータの上でシミュレートするものであるが、第３発明に係るプログラム開発支援装置及び第４発明に係るプログラム開発支援用プログラムは、量子コンピュータが実現されたときにその量子コンピュータと従来型コンピュータを併設したコンピュータシステムを実際に動作させるためのプログラムを作成・開発するためのツールである。したがって、上記第１及び第２発明では、抽出された処理部分を該部分に対応した量子計算をシミュレートするためのプログラムに置換していたのに対し、その部分に対応した量子アルゴリズムを実行するプログラムに置換するように処理を変更すればよい。【００２２】
即ち、上記第２の目的を達成するために成された第３発明は、量子コンピュータと従来型コンピュータとを併設したコンピュータシステムにおいて所定の処理を実行させるためのプログラムの開発を支援するプログラム開発支援装置であって、
a)従来型コンピュータに対応した既存の高位のレベルのプログラミング言語で記述されたソースコードを入力するための入力手段と、
b)該入力手段により入力されたソースコードの中で、その記述内容に基づいて、従来型コンピュータによる演算処理よりも量子コンピュータによる量子計算に適した処理部分を抽出する抽出手段と、
c)該抽出手段により抽出された処理部分を、該部分に対応した量子アルゴリズムを実行するプログラムに置換する置換手段と、
を備えることを特徴としている。【００２３】
また上記第２の目的を達成するために成された第４発明は、量子コンピュータと従来型コンピュータとを併設したコンピュータシステムにおいて所定の処理動作を実行させるためのプログラムを、従来型コンピュータにより作成するためのプログラム開発支援用プログラムであって、
従来型コンピュータに対応した既存の高位のレベルのプログラミング言語で記述されたソースコードが入力されたとき、該ソースコードの中で、その記述内容に基づいて、従来型コンピュータによる演算処理よりも量子コンピュータによる量子計算に適した処理部分を選択的に抽出し、
その抽出された処理部分を、該部分に対応した量子アルゴリズムを実行するプログラムに置換する処理をコンピュータに行わせることを特徴としている。【００２４】
この第３発明に係るプログラム開発支援装置及び第４発明に係るプログラム開発支援用プログラムによれば、従来型コンピュータと量子コンピュータとを併設したコンピュータシステムを効率良く動作させるためのプログラムを作成・開発するに際し、量子コンピュータや量子計算についての知識が乏しい者でもそうした作業に携わることができ、効率良くプログラムを開発することができる。
【図面の簡単な説明】
【００２５】
【図１】量子コンピュータと従来型コンピュータとを併設した将来のコンピュータシステムの一例を示す概念図。
【図２】本発明の一実施例によるプログラム開発支援装置のブロック構成図。
【図３】本実施例のプログラム開発支援装置の動作を説明するフローチャート。
【図４】本実施例のプログラム開発支援装置に入力されるＣ++言語により記述されたソースコードの簡単な一例を示す図。
【図５】図４に示すソースコードが入力されたときの出力のソースコードを示す図。
【発明を実施するための最良の形態】
【００２６】
以下、本発明に係るプログラム開発支援装置の一実施例について図面を参照して説明する。【００２７】
図１は量子コンピュータと従来型コンピュータとを併設した将来のコンピュータシステムの一例を示す概念図である。図１において、従来型コンピュータ２は既存の、「０」、「１」の二値のいずれかを表現するビットを基本とする演算処理を実行するコンピュータであるのに対し、量子コンピュータ３は「０」と「１」とを或る確率で以て重ね合わせて保持することが可能な量子ビット（キュービットという）を基本とする演算処理を実行するコンピュータである。従来型コンピュータ２には入力部４や表示部５が接続されており、入力部４を介して作業者がコンピュータシステム１に対する指示を与え、表示部５を介してコンピュータシステム１における演算処理の実行結果などを確認することができる。従来型コンピュータ２と量子コンピュータ３とは互いに接続されており、基本的には両者はそれぞれが独立して動作可能であるものの、互いに協調的に動作することによって一つの処理を実行し得る。【００２８】
本実施例のプログラム開発支援装置は、図１に示すようなコンピュータシステム１において両コンピュータ２、３の協調的動作を、現在入手可能な（つまり従来型の）コンピュータを用いてシミュレーションするためのプログラムの作成・開発を支援するためのものである。本実施例のプログラム開発支援装置は第１発明の一形態であるが、実際には第２発明に係るプログラムを既存の（つまり従来型）のコンピュータ上で実行することにより具現化することができる。図２は本実施例のプログラム開発支援装置の機能ブロックを示す構成図、図３は本実施例のプログラム開発支援装置の処理動作を説明する概略フローチャートである。【００２９】
このプログラム開発支援装置は、既存の高位レベルのプログラム言語、具体的にはここではＣ++言語、で所定の処理プログラムを記述したソースコードが入力される入力部１０と、入力されたソースコードに対して後述する処理を実行して必要に応じてそのソースコードの一部を変換するプログラム変換処理部１１と、変換処理後のプログラムが出力される出力部１８と、プログラム変換処理部１１と関連付けられた量子技術データベース１６及び量子アルゴリズムライブラリ１７とを備える。【００３０】
プログラム変換処理部１１は、後述する処理ステップに対応した機能ブロックとして、ソースコードの記述内容に従ってその中の特定の領域を検出する領域検出部１２、その検出された特定領域について量子技術データベース１６に保存されている情報を利用して量子コンピュータ３による量子計算を行った場合の処理時間と通常の従来型コンピュータ２による演算処理を行った場合の処理時間とを推算する処理時間推算部１３、両コンピュータ２、３に対する処理時間を比較してその特定領域のソースコード（プログラム）の置換が必要か否かを判断する判断部１４、量子アルゴリズムライブラリ１７に格納されているデータを利用して置換が必要な領域のプログラムを入れ替える置換処理部１５を含む。【００３１】
図４はこの装置による処理対象である、Ｃ++言語により記述されたソースコードの簡単な一例である。このようなソースコード２０が入力部１０より入力されると、プログラム変換処理部１１にあって領域検出部１２はそのソースコード２０の記述に沿ってデータベース検索を実行するプログラム領域を探し出す。Ｃ++言語では図４中に符号２１で示すプログラム領域、つまりｉｆ文で記述される部分がこれに相当するから、未処理のｉｆ文が存在するか否かを判定する（ステップＳ１）。入力されたソースコード中の全てのｉｆ文が処理済み（但し実際に変換がなされているか否かは問わない）である場合には、そのまま処理を終了する。【００３２】
未処理のｉｆ文が存在した場合には、領域検出部１２はそのｉｆ文を抽出して処理時間推算部１３に渡す。処理時間推算部１３及び判断部１４は、該当するｉｆ文を置換すべきであるか否か、つまり量子計算を適用するのに適当であるか否かを判定する（ステップＳ２）。具体的には、処理時間推算部１３は従来型コンピュータでそのｉｆ文の処理、つまりデータベース検索処理を実行した場合の所要時間を推算する。図４の例ではプログラム領域２１においては最大１００００回のｉｆ文の判定を繰り返し実行することになり、またｉｆ文の１回当たりの所要時間はＣＰＵの演算速度などから予め概算値を決めておくことができるから、両者の積で以て処理時間を容易に推算することができる。【００３３】
他方、処理時間推算部１３は該当ｉｆ文に相当するグローバーの検索アルゴリズムの処理を行った場合の所要時間も推算する。具体的には、図４に示したプログラム領域２１は量子コンピュータでは図５（ａ）に示すソースコード３０ではプログラム領域３１に相当する。即ち、[Quantum Search]と記述されているサブルーチンプログラムに変換され得る。そのサブルーチンプログラム[Quantum Search]の処理動作の詳細は、図５（ｂ）に示すライブラリ３２の中にＣ++言語で記述されている。グローバーの検索アルゴリズムの場合、最大検索繰り返し回数は従来の場合をＮとすると√Ｎとなることが知られているから、この場合には最大１００回の繰り返し演算で済む。但し、この場合、１回の演算処理の所要時間は従来の場合と同じとは限らない。何故なら、従来の論理演算では例えば四則が組み合わさった演算が１ステップで実行できることが保証されているが、量子状態の操作の場合にはそうではないからである。そこで、１つの方法として、これまでの研究で知られている量子回路設計手法を導入し、実際にｉｆ文で示される演算処理に対応する量子回路を作成した上で何ステップ掛かるかを見積もることができる。【００３４】
この実施例の場合、１回のデータベース検索は１ステップの演算で十分であるから、プログラム領域２１に対する従来型コンピュータによる処理時間の推算値よりも量子計算による処理時間の推算値が小さくなる。判断部１４は両者の処理時間の推算値を比較、量子計算による処理時間の推算値が小さい場合には該当ｉｆ文を置換すべきであると判断し（ステップＳ２でＹｅｓ）、対応するデータベース検索のプログラム、ここでは上記[Quantum Search]という名称のＣ++言語で記述されたサブルーチンプログラムに置換する（ステップＳ３）。その結果、ソースコード中ではプログラム領域２１に代えてプログラム領域３１のコードが挿入される。【００３５】
さらに処理はステップＳ３からＳ１へと戻り、未処理のｉｆ文が存在するか否かを判定する。図４の例では、プログラム領域２２にもｉｆ文が存在するから、上記と同様にして処理時間の推算値の判定を実行する。この場合、データベース検索の対象の母数が１００と少ないため、量子計算の処理時間の推算値が従来型コンピュータによる処理時間の推算値よりも長いものとする。この場合には、ステップＳ２で置換すべきでないと判定され、上述したような置換処理は実行されずにステップＳ１に戻ることになる。【００３６】
そして、入力されたソースコード中で全てのｉｆ文に対する処理が終了したと判定されると、ステップＳ１でＮｏとなりプログラム変換処理を終了する。これにより、図４に示すような入力に対しては図５に示すように出力が出力部１８より得られることになる。即ち、出力として得られるソースコードは、量子計算に適した部分、具体的には量子コンピュータを利用すれば従来型コンピュータよりも短時間で処理が済む部分についてのみ、量子コンピュータで行う動作を従来型コンピュータでシミュレートするようなプログラムに入れ替えられる。そこで、このプログラムを従来の一般のコンピュータに導入して実行させることにより、図１に示したような従来型コンピュータ２と量子コンピュータ３とを併設したコンピュータシステム１における両コンピュータ２、３の協調的動作のシミュレーション検証を既存のコンピュータ（従来型コンピュータ）で実行することができる。【００３７】
図２に示す構成のプログラム開発支援装置において上記のようなプログラムの変換が可能であるから、この装置にＣ++言語のコンパイラ及びコンピュータを組み合わせることにより、上記コンピュータシステム１における両コンピュータ２、３の協調的動作を一般の既存のコンピュータ上でシミュレーション可能なシミュレーション装置を得ることができる。【００３８】
なお、上記実施例では入力されたソースコード中にデータベース検索領域があって且つその検索処理の実行所要時間が量子計算を用いた場合に短くなることが想定される場合には自動的にその領域を量子計算によるデータベース検索に置き換えるようにしていたが、予め取り決めた指示文等をソースコード中に挿入することによって、ソースコード中の一部の領域を強制的に量子計算を用いて実行するようにプログラムの置換を実行させたり、逆に本来は量子計算を用いて実行するほうが適切なプログラムを強制的に従来型コンピュータでの演算処理で実行させたりするようにしてもよい。【００３９】
上記実施例はシミュレーション用のプログラムの作成や開発を支援する装置であって、量子コンピュータのハードウエアが完成する前であっても、そうした量子コンピュータのハードウエアの実現を想定した上での量子アルゴリズムの開発に利用することができる。また、量子コンピュータのハードウエアが実現された場合には、簡単な変更によって、量子コンピュータと従来型コンピュータを併設したコンピュータシステムを動作させるプログラムの作成・開発用ツールとして使用することができる。【００４０】
即ち、上記実施例では、量子アルゴリズムライブラリ１７にグローバーの検索アルゴリズムを従来型コンピュータの論理回路で仮想的に実行するつまりシミュレートするためのＣ++言語で記述されたサブルーチンプログラムが格納されていたが、これに代えて、グローバーの検索アルゴリズムに対応して量子コンピュータのキュービットを制御するためのプログラムを格納しておくことにより、量子コンピュータの量子計算に向いたデータベース検索処理のみを量子コンピュータに振り分けるようなプログラムを容易に作成することができる。【００４１】
また、上記実施例では全ての処理機能をコンピュータで実現させるようにしているが、一部の機能又は全部を専用に設計した論理回路で構成するようにしてもよい。【００４２】
また、上記実施例は一例であって、本発明の趣旨の範囲で適宜変形や修正を行っても、本願特許請求の範囲に包含されることも明らかである。
【図１】
0004867009.tif 000002
【図２】
0004867009.tif 000003
【図３】
0004867009.tif 000004
【図４】
0004867009.tif 000005
【図５】
0004867009.tif 000006