IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 富士通株式会社の特許一覧

特開2024-142277情報処理プログラム、情報処理方法、および情報処理装置
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024142277
(43)【公開日】2024-10-10
(54)【発明の名称】情報処理プログラム、情報処理方法、および情報処理装置
(51)【国際特許分類】
   G06N 10/20 20220101AFI20241003BHJP
【FI】
G06N10/20
【審査請求】未請求
【請求項の数】7
【出願形態】OL
(21)【出願番号】P 2023054410
(22)【出願日】2023-03-29
(71)【出願人】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】100104190
【弁理士】
【氏名又は名称】酒井 昭徳
(72)【発明者】
【氏名】田渕 晶大
(57)【要約】
【課題】演算を効率よく実施し易くすること。
【解決手段】情報処理装置100は、n個の量子ビットに関する第1量子回路110を取得する。情報処理装置100は、取得した第1量子回路110に基づいて、非巡回有向グラフ(Directed Acyclic Graph)130を生成する。情報処理装置100は、他のゲートに依存せずに実行可能な、全体としてローカルな量子ビットの上限以下の量子ビットを参照する、それぞれプロセス間通信が発生する1以上のゲートを特定する。情報処理装置100は、第1量子回路110と論理的に等価な第2量子回路150を生成する。第2量子回路150は、少なくとも、特定した1以上の量子ビットがローカルになるよう、ローカルな量子ビットとグローバルな量子ビットとを入れ替える1以上のスワップゲートを、特定した1以上のゲートの直前に含む。
【選択図】図1
【特許請求の範囲】
【請求項1】
ローカルな1以上の量子ビットと、グローバルな1以上の量子ビットとを含む複数の量子ビットに関して、それぞれ異なる1以上の量子ビットに対して演算を実施することを表す複数のゲートを、時系列に沿って規定した第1量子回路を取得し、
取得した前記第1量子回路に基づいて、前記複数のゲートのそれぞれのゲートを表すノードと、異なるノードが表すゲート間の演算の実施順序を表す有向エッジとを含む非巡回有向グラフを生成し、
生成した前記非巡回有向グラフに基づいて、前記複数のゲートのうち、他のゲートに依存せずに実行可能な、ローカルな量子ビットの上限以下の1以上の量子ビットを参照する、それぞれプロセス間通信が発生する1以上の第1ゲートによって参照される、前記1以上の量子ビットを特定し、
特定した前記1以上の量子ビットがローカルになるよう、ローカルな量子ビットとグローバルな量子ビットとを入れ替える1以上のスワップゲートを、前記1以上の第1ゲートの直前に含む、前記第1量子回路と論理的に等価な第2量子回路を生成する、
処理をコンピュータに実行させることを特徴とする情報処理プログラム。
【請求項2】
前記1以上の量子ビットを特定する都度、前記非巡回有向グラフに基づいて、前記複数のゲートのうち、他のゲートに依存せずに実行可能な、それぞれプロセス間通信が発生しない1以上の第2ゲートを特定し、
前記1以上の第2ゲートを特定する都度、前記非巡回有向グラフの中から、特定した前記1以上の第2ゲートのそれぞれの第2ゲートを表すノードを除去する、
処理を前記コンピュータに実行させ、
前記第2量子回路を生成する処理は、
前記1以上の量子ビットを特定する都度、雛型回路に対して、特定した前記1以上の量子ビットがローカルになるよう、ローカルな量子ビットとグローバルな量子ビットとを入れ替える1以上のスワップゲートを追加し、前記1以上の第2ゲートを特定する都度、前記雛型回路に対して、特定した前記1以上の第2ゲートを追加することにより、前記第2量子回路を生成する、ことを特徴とする請求項1に記載の情報処理プログラム。
【請求項3】
前記1以上の第2ゲートを特定する処理は、
前記1以上の量子ビットを最初に特定する前に、前記非巡回有向グラフに基づいて、前記複数のゲートのうち、他のゲートに依存せずに実行可能な、それぞれプロセス間通信が発生しない1以上の第2ゲートを一度特定する、ことを特徴とする請求項2に記載の情報処理プログラム。
【請求項4】
前記第2量子回路を生成する処理は、
前記非巡回有向グラフが空である場合、前記雛型回路の末尾に、初期状態でローカルな1以上の量子ビットがローカルに戻るよう、ローカルな量子ビットとグローバルな量子ビットとを入れ替える1以上のスワップゲートを追加することにより、前記第2量子回路を生成し、前記第2量子回路を生成する処理を終了する、ことを特徴とする請求項3に記載の情報処理プログラム。
【請求項5】
前記第2量子回路を生成する処理は、
前記1以上の量子ビットを特定した際、特定した前記1以上の量子ビットに基づいて、入れ替える量子ビットの数が4以上であれば、前記雛型回路に対して、特定した前記1以上の量子ビットがローカルになるよう、ローカルな量子ビットとグローバルな量子ビットとを入れ替える、フューズドスワップゲートを含む1以上のスワップゲートを追加する、ことを特徴とする請求項2~4のいずれか一つに記載の情報処理プログラム。
【請求項6】
ローカルな1以上の量子ビットと、グローバルな1以上の量子ビットとを含む複数の量子ビットに関して、それぞれ異なる1以上の量子ビットに対して演算を実施することを表す複数のゲートを、時系列に沿って規定した第1量子回路を取得し、
取得した前記第1量子回路に基づいて、前記複数のゲートのそれぞれのゲートを表すノードと、異なるノードが表すゲート間の演算の実施順序を表す有向エッジとを含む非巡回有向グラフを生成し、
生成した前記非巡回有向グラフに基づいて、前記複数のゲートのうち、他のゲートに依存せずに実行可能な、ローカルな量子ビットの上限以下の1以上の量子ビットを参照する、それぞれプロセス間通信が発生する1以上の第1ゲートによって参照される、前記1以上の量子ビットを特定し、
特定した前記1以上の量子ビットがローカルになるよう、ローカルな量子ビットとグローバルな量子ビットとを入れ替える1以上のスワップゲートを、前記1以上の第1ゲートの直前に含む、前記第1量子回路と論理的に等価な第2量子回路を生成する、
処理をコンピュータが実行することを特徴とする情報処理方法。
【請求項7】
ローカルな1以上の量子ビットと、グローバルな1以上の量子ビットとを含む複数の量子ビットに関して、それぞれ異なる1以上の量子ビットに対して演算を実施することを表す複数のゲートを、時系列に沿って規定した第1量子回路を取得し、
取得した前記第1量子回路に基づいて、前記複数のゲートのそれぞれのゲートを表すノードと、異なるノードが表すゲート間の演算の実施順序を表す有向エッジとを含む非巡回有向グラフを生成し、
生成した前記非巡回有向グラフに基づいて、前記複数のゲートのうち、他のゲートに依存せずに実行可能な、ローカルな量子ビットの上限以下の1以上の量子ビットを参照する、それぞれプロセス間通信が発生する1以上の第1ゲートによって参照される、前記1以上の量子ビットを特定し、
特定した前記1以上の量子ビットがローカルになるよう、ローカルな量子ビットとグローバルな量子ビットとを入れ替える1以上のスワップゲートを、前記1以上の第1ゲートの直前に含む、前記第1量子回路と論理的に等価な第2量子回路を生成する、
制御部を有することを特徴とする情報処理装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、情報処理プログラム、情報処理方法、および情報処理装置に関する。
【背景技術】
【0002】
従来、複数の量子ビットのそれぞれの量子ビットが表す量子状態の組み合わせを、ベクトル形式で表現する技術がある。例えば、量子ビットが2つ存在する場合、それぞれの量子ビットが表す量子状態の組み合わせが、「00」である確率と「01」である確率と「10」である確率と「11」である確率とを、それぞれ成分として有するベクトルを記憶することがある。また、ベクトルのそれぞれの成分を、複数のプロセスで分担して取り扱う場合がある。この場合、1以上の量子ビットに対して所定の演算を実施する際、異なる成分を担当する複数のプロセスにおいて、プロセス間通信が発生することがある。
【0003】
先行技術としては、例えば、動作に関係するグローバルな量子ビットと、ローカルな量子ビットとを交換するものがある。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】米国特許出願公開第2021/0049496号明細書
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかしながら、従来技術では、量子回路が表す、それぞれ異なる1以上の量子ビットに対する一連の演算を、効率よく実施することが難しい。例えば、プロセス間通信が発生すると、一連の演算を実施する際にかかる処理負担および処理時間の増大化を招く。
【0006】
1つの側面では、本発明は、演算を効率よく実施し易くすることを目的とする。
【課題を解決するための手段】
【0007】
1つの実施態様によれば、ローカルな1以上の量子ビットと、グローバルな1以上の量子ビットとを含む複数の量子ビットに関して、それぞれ異なる1以上の量子ビットに対して演算を実施することを表す複数のゲートを、時系列に沿って規定した第1量子回路を取得し、取得した前記第1量子回路に基づいて、前記複数のゲートのそれぞれのゲートを表すノードと、異なるノードが表すゲート間の演算の実施順序を表す有向エッジとを含む非巡回有向グラフを生成し、生成した前記非巡回有向グラフに基づいて、前記複数のゲートのうち、他のゲートに依存せずに実行可能な、ローカルな量子ビットの上限以下の1以上の量子ビットを参照する、それぞれプロセス間通信が発生する1以上の第1ゲートによって参照される、前記1以上の量子ビットを特定し、特定した前記1以上の量子ビットがローカルになるよう、ローカルな量子ビットとグローバルな量子ビットとを入れ替える1以上のスワップゲートを、前記1以上の第1ゲートの直前に含む、前記第1量子回路と論理的に等価な第2量子回路を生成する情報処理プログラム、情報処理方法、および情報処理装置が提案される。
【発明の効果】
【0008】
一態様によれば、演算を効率よく実施し易くすることが可能になる。
【図面の簡単な説明】
【0009】
図1図1は、実施の形態にかかる情報処理方法の一実施例を示す説明図である。
図2図2は、情報処理システム200の一例を示す説明図である。
図3図3は、情報処理装置100のハードウェア構成例を示すブロック図である。
図4図4は、情報処理装置100の機能的構成例を示すブロック図である。
図5図5は、情報処理装置100の動作の流れを示す説明図(その1)である。
図6図6は、情報処理装置100の動作の流れを示す説明図(その2)である。
図7図7は、情報処理装置100の動作の流れを示す説明図(その3)である。
図8図8は、情報処理装置100の動作の流れを示す説明図(その4)である。
図9図9は、情報処理装置100の動作の流れを示す説明図(その5)である。
図10図10は、情報処理装置100の動作の一例を示す説明図(その1)である。
図11図11は、情報処理装置100の動作の一例を示す説明図(その2)である。
図12図12は、情報処理装置100の動作の一例を示す説明図(その3)である。
図13図13は、情報処理装置100の動作の一例を示す説明図(その4)である。
図14図14は、情報処理装置100の動作の一例を示す説明図(その5)である。
図15図15は、情報処理装置100の動作の具体例を示す説明図(その1)である。
図16図16は、情報処理装置100の動作の具体例を示す説明図(その2)である。
図17図17は、情報処理装置100の動作の具体例を示す説明図(その3)である。
図18図18は、情報処理装置100の動作の具体例を示す説明図(その4)である。
図19図19は、情報処理装置100の第1適用例を示す説明図である。
図20図20は、情報処理装置100の第2適用例を示す説明図(その1)である。
図21図21は、情報処理装置100の第2適用例を示す説明図(その2)である。
図22図22は、情報処理装置100の第3適用例を示す説明図(その1)である。
図23図23は、情報処理装置100の第3適用例を示す説明図(その2)である。
図24図24は、全体処理手順の一例を示すフローチャートである。
【発明を実施するための形態】
【0010】
以下に、図面を参照して、本発明にかかる情報処理プログラム、情報処理方法、および情報処理装置の実施の形態を詳細に説明する。
【0011】
(実施の形態にかかる情報処理方法の一実施例)
図1は、実施の形態にかかる情報処理方法の一実施例を示す説明図である。情報処理装置100は、量子回路が表す、それぞれ異なる1以上の量子ビットに対する一連の演算を、効率よく実施し易くするためのコンピュータである。情報処理装置100は、例えば、サーバ、または、PC(Personal Computer)などである。
【0012】
ここで、量子回路が表す、それぞれ異なる1以上の量子ビットに対する一連の演算を、例えば、量子コンピュータを模擬する量子シミュレータ上で実施することがある。演算は、例えば、量子回路内のゲートによって示される。この際、複数の量子ビットのそれぞれの量子ビットが表す量子状態の組み合わせを、ベクトル形式で表現することがある。量子状態の組み合わせを表現するベクトルは、例えば、ステートベクトルとも呼ばれる。そして、1以上の量子ビットに対する演算を実施する都度、ベクトルの少なくともいずれかの成分を参照および更新する。
【0013】
ここで、量子ビットの数が増大するほど、ベクトルの成分の数が増大することになる。このため、ベクトルのそれぞれの成分を、複数のプロセスで分担して取り扱う場合がある。複数のプロセスのうち、2以上のプロセスは、例えば、それぞれ異なるコンピュータ上に存在する。複数のプロセスのうち、2以上のプロセスは、例えば、同一のコンピュータ上に存在してもよい。この場合、1以上の量子ビットに対して所定の演算を実施する際、異なる成分を担当する複数のプロセスにおいて、プロセス間通信が発生することがある。プロセス間通信が発生する2以上のプロセスが、それぞれ異なるコンピュータ上に存在する場合、さらに、ネットワーク通信が発生することがある。
【0014】
例えば、量子ビットa,bが存在する場合、量子ビットa,bが表す量子状態の組み合わせが、「00」である確率と「01」である確率と「10」である確率と「11」である確率とを、それぞれ成分として有するベクトルを記憶することになる。上記「**」のうち、左側の値は、量子ビットaが表す量子状態に対応し、右側の値は、量子ビットbが表す量子状態に対応する。この場合、例えば、量子ビットa,bが表す量子状態の組み合わせが、「00」である確率と「01」である確率とを、プロセスαが担当することが考えられる。また、例えば、量子ビットa,bが表す量子状態の組み合わせが、「10」である確率と「11」である確率とを、プロセスβが担当することが考えられる。
【0015】
ここで、例えば、量子ビットaに対するXゲートの演算を実施する際、量子ビットa,bが表す量子状態の組み合わせが、「00」である確率と「10」である確率とを入れ替え、かつ、「01」である確率と「11」である確率とを入れ替えることが望まれる。この際には、「00」である確率と「10」である確率とを、それぞれ異なるプロセスが担当し、かつ、「01」である確率と「11」である確率とを、それぞれ異なるプロセスが担当するため、プロセス間通信が発生することになる。
【0016】
一方で、例えば、量子ビットbに対するXゲートの演算を実施する際、量子ビットa,bが表す量子状態の組み合わせが、「00」である確率と「01」である確率とを入れ替え、かつ、「10」である確率と「11」である確率とを入れ替えることが望まれる。この際には、「00」である確率と「01」である確率とを、同一のプロセスが担当し、かつ、「10」である確率と「11」である確率とを、同一のプロセスが担当するため、プロセス間通信が発生しないことになる。
【0017】
以下の説明では、プロセス間通信が発生する要因となる量子ビットを「グローバルな量子ビット」と表記する場合がある。上述した一例では、具体的には、量子ビットaが、グローバルな量子ビットである。また、以下の説明では、プロセス間通信が発生する要因とならない量子ビットを「ローカルな量子ビット」と表記する場合がある。上述した一例では、具体的には、量子ビットbが、ローカルな量子ビットである。
【0018】
従来では、上述したグローバルな量子ビットに起因して、量子回路が表す、それぞれ異なる1以上の量子ビットに対する一連の演算を、効率よく実施することが難しいという問題がある。例えば、いずれかの演算を実施する際に、プロセス間通信が発生すると、一連の演算を実施する際にかかる処理負担および処理時間の増大化を招く。具体的には、いずれかの演算を実施する際に、プロセス間通信に伴いネットワーク通信が発生すると、一連の演算を実施する際にかかる処理負担および処理時間の増大化を招く。
【0019】
これに対し、例えば、一連の演算のうち、プロセス間通信が発生する演算の直前に、ローカルな量子ビットとグローバルな量子ビットとを入れ替える演算を追加するよう、量子回路を、作業者が人手で更新する場合が考えられる。この場合、作業者にかかる作業負担の増大化を招くという問題があり、一連の演算を実施する際にかかる処理負担および処理時間の低減化を図ることが難しいことがある。
【0020】
また、従来では、2以上のローカルな量子ビットと2以上のグローバルな量子ビットとを入れ替える演算を追加するよう、量子回路を効率よく自動で更新する手法が提案されていない。このため、一連の演算を実施する際にかかる処理負担および処理時間の低減化を図ることが難しいことがある。
【0021】
そこで、本実施の形態では、1以上の量子ビットに対する演算を効率よく実施し易くすることができる情報処理方法について説明する。
【0022】
図1において、ローカルな1以上の量子ビットと、グローバルな1以上の量子ビットとを含む複数の量子ビットが存在する。例えば、n個の量子ビットが存在する。
【0023】
n個の量子ビットのうち、m個の量子ビットが、ローカルな量子ビットに設定される。例えば、n個の量子ビットを順に並べた場合の下位m個の量子ビットが、ローカルな量子ビットに設定される。n個の量子ビットのうち、p個の量子ビットは、グローバルな量子ビットに設定される。例えば、n個の量子ビットを順に並べた場合の上位p個の量子ビットが、グローバルな量子ビットに設定される。n=m+pである。
【0024】
n個の量子ビットのそれぞれの量子ビットが表す量子状態の組み合わせの確率を表す成分は、2^n個存在する。2^n個の成分は、2^p個のプロセスで分担される。2^p個のプロセスは、それぞれ、2^m個の成分を担当する。2^p個のプロセスは、具体的には、それぞれ、上位p個の量子ビットのそれぞれの量子ビットが表す量子状態のいずれか1つの組み合わせが、重複なく割り当てられる。2^p個のプロセスは、具体的には、それぞれ、n個の量子ビットのそれぞれの量子ビットが表す量子状態の組み合わせのうち、自プロセスに割り当てられた組み合わせを含む組み合わせの確率を表す2^m個の成分を担当する。
【0025】
図1の例では、具体的には、量子ビット0~3が存在するとする。ここで、n=4である。m=2である。p=2である。例えば、量子ビット0,1が、ローカルな量子ビットに設定される。例えば、量子ビット2,3が、グローバルな量子ビットに設定される。量子ビット0~3の量子状態の組み合わせの確率を表す成分は、16個存在する。16個の成分は、4個のプロセスで分担される。4個のプロセスは、それぞれ、4個の成分を担当する。
【0026】
4個のプロセスは、具体的には、量子ビット0~3の量子状態の組み合わせが、「00**」である確率を表す4個の成分を担当するプロセス1を含む。*は、0と1とのいずれの値であってもよい部分を示す。4個のプロセスは、具体的には、量子ビット0~3の量子状態の組み合わせが、「01**」である確率を表す4個の成分を担当するプロセス2を含む。4個のプロセスは、具体的には、量子ビット0~3の量子状態の組み合わせが、「10**」である確率を表す4個の成分を担当するプロセス3を含む。4個のプロセスは、具体的には、量子ビット0~3の量子状態の組み合わせが、「11**」である確率を表す4個の成分を担当するプロセス4を含む。
【0027】
(1-1)情報処理装置100は、n個の量子ビットに関する第1量子回路110を取得する。図1の例では、具体的には、n=4であるとする。図1の例では、具体的には、第1量子回路110は、4個の量子ビットに関して、複数のゲート121~123を、時系列に沿って規定した情報である。ゲート121~123は、それぞれ、1以上の量子ビットに対して演算を実施することを表す情報である。
【0028】
(1-2)情報処理装置100は、取得した第1量子回路110に基づいて、非巡回有向グラフ(DAG:Directed Acyclic Graph)130を生成する。非巡回有向グラフ130は、ゲート121~123をそれぞれ表すノード141~143と、ゲート121~123についてゲート間の演算の実施順序を表す有向エッジとを含む。有向エッジは、例えば、連続する2つの演算のうち、先に実施する演算に対応するノードを始点とし、後に実施する演算に対応するノードを終点とする。
【0029】
(1-3)情報処理装置100は、他のゲートに依存せずに実行可能な、全体としてローカルな量子ビットの上限以下の量子ビットを参照する、それぞれプロセス間通信が発生する1以上のゲートを特定する。情報処理装置100は、特定した1以上のゲートが全体として参照する1以上の量子ビットを特定する。
【0030】
上限は、ローカルに設定可能な量子ビットの最大数である。図1の例では、上限は、具体的には、2である。他のゲートに依存せずに実行可能とは、例えば、1以上のゲートが、全体として他のゲートに依存せずに実行可能であることを示す。他のゲートに依存せずに実行可能とは、具体的には、1以上のゲートに含まれない他のゲートを始点とする有向エッジが、1以上のゲートのいずれのゲートにも接続されない状態を示す。
【0031】
図1の例では、情報処理装置100は、具体的には、非巡回有向グラフ130に基づいて、他のゲートに依存せずに実行可能な、上限以下の2つの量子ビットを参照する、プロセス間通信が発生する1以上のゲートとして、ゲート121を特定する。情報処理装置100は、ゲート121が参照する量子ビット0,2を特定する。
【0032】
(1-4)情報処理装置100は、第1量子回路110と論理的に等価な第2量子回路150を生成する。第2量子回路150は、少なくとも、特定した1以上の量子ビットがローカルになるよう、ローカルな量子ビットとグローバルな量子ビットとを入れ替える1以上のスワップゲートを、特定した1以上のゲートの直前に含む。1以上のスワップゲートは、例えば、2つの量子ビットを入れ替える単一スワップゲート、または、4つ以上の量子ビットを入れ替えるフューズドスワップゲートを含む。
【0033】
図1の例では、情報処理装置100は、具体的には、空の雛型回路を用意する。情報処理装置100は、具体的には、雛型回路に対して、スワップゲート160を追加し、スワップゲート160の次に、特定したゲート121を追加する。スワップゲート160は、例えば、ローカルな量子ビット1と、グローバルな量子ビット2とを入れ替える。情報処理装置100は、雛型回路に対して、ゲート122と、ゲート123とを追加する。情報処理装置100は、雛型回路を、第2量子回路150として採用する。
【0034】
これにより、情報処理装置100は、第1量子回路110と論理的に等価な、第1量子回路110よりもプロセス間通信が発生する回数、または、通信量が少ない第2量子回路150を生成することができる。これにより、情報処理装置100は、それぞれ異なる1以上の量子ビットに対する一連の演算を、効率よく実施し易くすることができる。情報処理装置100は、例えば、一連の演算を実施する際にかかる処理負担および処理時間の低減化を図ることができる。
【0035】
(1-5)情報処理装置100は、生成した第2量子回路150に従って、複数のプロセスを制御し、第2量子回路150に規定された一連の演算による量子状態の組み合わせの変化を模擬するシミュレーションを実施する。プロセスは、例えば、情報処理装置100が有していてもよい。情報処理装置100は、シミュレーションを実施した結果を、利用者が参照可能に出力する。これにより、情報処理装置100は、シミュレーションを実施した結果を、利用者が利用可能にすることができる。
【0036】
ここでは、情報処理装置100が、他のゲートに依存せずに実行可能な、それぞれプロセス間通信が発生する1以上のゲートを特定する場合について説明したが、これに限らない。例えば、情報処理装置100が、他のゲートに依存せずに実行可能な、それぞれプロセス間通信が発生しない1以上のゲートを特定する場合があってもよい。この場合、情報処理装置100は、具体的には、空の雛型回路に対して、特定したそれぞれプロセス間通信が発生しない1以上のゲートを追加した後に、他のゲートに依存せずに実行可能な、それぞれプロセス間通信が発生する1以上のゲートを特定してもよい。この場合の一例については、具体的には、図5図18を用いて後述する。
【0037】
ここでは、情報処理装置100が、ゲート121の直前にのみ、1以上のスワップゲートを含む第2量子回路150を生成する場合について説明したが、これに限らない。例えば、情報処理装置100が、ゲート121の直前の他、ゲート122の直前にも、1以上のスワップゲートを含む第2量子回路150を生成する場合があってもよい。この場合の一例については、具体的には、図5図18を用いて後述する。
【0038】
ここでは、情報処理装置100が、単独で動作する場合について説明したが、これに限らない。例えば、情報処理装置100が、他のコンピュータと協働する場合があってもよい。具体的には、情報処理装置100が、複数のプロセスを有する他のコンピュータに、第2量子回路150を送信する場合があってもよい。複数のプロセスは、異なるコンピュータが有していてもよい。例えば、複数のコンピュータが、協働で情報処理装置100としての機能を実現する場合があってもよい。具体的には、クラウド上に、情報処理装置100としての機能が実現される場合があってもよい。
【0039】
(情報処理システム200の一例)
次に、図2を用いて、図1に示した情報処理装置100を適用した、情報処理システム200の一例について説明する。
【0040】
図2は、情報処理システム200の一例を示す説明図である。図2において、情報処理システム200は、情報処理装置100と、1以上の演算処理装置201と、1以上のクライアント装置202とを含む。
【0041】
情報処理システム200において、情報処理装置100と演算処理装置201とは、有線または無線のネットワーク210を介して接続される。ネットワーク210は、例えば、LAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどである。また、情報処理システム200において、情報処理装置100とクライアント装置202とは、有線または無線のネットワーク210を介して接続される。
【0042】
情報処理装置100は、第1量子回路を生成するためのコンピュータである。情報処理装置100は、n個の量子ビットに関し、一連の演算のそれぞれの演算を表すゲートを時系列に沿って規定した第1量子回路を、クライアント装置202から受信する。情報処理装置100は、受信した第1量子回路と論理的に等価な第2量子回路を生成する。
【0043】
情報処理装置100は、例えば、n個の量子ビットのうち、ローカルなm個の量子ビットと、グローバルなp個の量子ビットとを設定する。情報処理装置100は、第1量子回路と、ローカルなm個の量子ビットと、グローバルなp個の量子ビットとに基づいて、第2量子回路を生成する。情報処理装置100は、具体的には、図5図18に後述するように、第2量子回路を生成する。
【0044】
情報処理装置100は、生成した第2量子回路に従って、一連の演算による量子状態の組み合わせの変化を模擬するシミュレーションを分担するよう、複数の演算処理装置201を制御する。情報処理装置100は、例えば、量子状態の組み合わせを表現するベクトルのそれぞれの成分を、複数の演算処理装置201に分散して割り当てる。情報処理装置100は、例えば、第2量子回路を、複数の演算処理装置201に送信することにより、当該演算処理装置201に割り当てられた1以上の成分を更新するよう、複数の演算処理装置201を制御する。
【0045】
情報処理装置100は、量子状態の組み合わせを表現するベクトルのそれぞれの成分を、複数の演算処理装置201から受信する。情報処理装置100は、受信した量子状態の組み合わせを表現するベクトルのそれぞれの成分に基づいて、一連の演算による量子状態の組み合わせの変化を模擬するシミュレーションを実施した結果を生成する。情報処理装置100は、シミュレーションを実施した結果を、クライアント装置202に送信する。情報処理装置100は、例えば、サーバ、または、PCなどである。
【0046】
演算処理装置201は、一連の演算による量子状態の組み合わせの変化を模擬するシミュレーションを分担するためのコンピュータである。演算処理装置201は、量子状態の組み合わせを表現するベクトルの1以上の成分を管理するプロセスを有する。演算処理装置201は、第2量子回路を、情報処理装置100から受信する。演算処理装置201は、第2量子回路に基づいて、他の演算処理装置201と通信し、自装置が管理する1以上の成分を更新する。演算処理装置201は、ベクトルの1以上の成分を、情報処理装置100に送信する。演算処理装置201は、例えば、サーバ、または、PCなどである。
【0047】
クライアント装置202は、作業者によって用いられるコンピュータである。クライアント装置202は、作業者の操作入力に基づき、第1量子回路の指定を受け付ける。クライアント装置202は、指定の第1量子回路を、情報処理装置100に送信する。クライアント装置202は、シミュレーションを実施した結果を、情報処理装置100から受信する。クライアント装置202は、シミュレーションを実施した結果を、作業者が参照可能に出力する。クライアント装置202は、例えば、PC、タブレット端末、または、スマートフォンなどである。
【0048】
ここでは、情報処理装置100が、演算処理装置201とは異なる装置である場合について説明したが、これに限らない。例えば、情報処理装置100が、演算処理装置201としての機能を有し、演算処理装置201としても動作する場合があってもよい。ここでは、情報処理装置100が、クライアント装置202とは異なる装置である場合について説明したが、これに限らない。例えば、情報処理装置100が、クライアント装置202としての機能を有し、クライアント装置202としても動作する場合があってもよい。
【0049】
(情報処理装置100のハードウェア構成例)
次に、図3を用いて、情報処理装置100のハードウェア構成例について説明する。
【0050】
図3は、情報処理装置100のハードウェア構成例を示すブロック図である。図3において、情報処理装置100は、CPU(Central Processing Unit)301と、メモリ302と、ネットワークI/F(Interface)303と、記録媒体I/F304と、記録媒体305とを有する。また、各構成部は、バス300によってそれぞれ接続される。
【0051】
ここで、CPU301は、情報処理装置100の全体の制御を司る。メモリ302は、例えば、ROM(Read Only Memory)、RAM(Random Access Memory)およびフラッシュROMなどを有する。具体的には、例えば、フラッシュROMやROMが各種プログラムを記憶し、RAMがCPU301のワークエリアとして使用される。メモリ302に記憶されるプログラムは、CPU301にロードされることにより、コーディングされている処理をCPU301に実行させる。
【0052】
ネットワークI/F303は、通信回線を通じてネットワーク210に接続され、ネットワーク210を介して他のコンピュータに接続される。そして、ネットワークI/F303は、ネットワーク210と内部のインターフェースを司り、他のコンピュータからのデータの入出力を制御する。ネットワークI/F303は、例えば、モデムやLANアダプタなどである。
【0053】
記録媒体I/F304は、CPU301の制御に従って記録媒体305に対するデータのリード/ライトを制御する。記録媒体I/F304は、例えば、ディスクドライブ、SSD(Solid State Drive)、USB(Universal Serial Bus)ポートなどである。記録媒体305は、記録媒体I/F304の制御で書き込まれたデータを記憶する不揮発メモリである。記録媒体305は、例えば、ディスク、半導体メモリ、USBメモリなどである。記録媒体305は、情報処理装置100から着脱可能であってもよい。
【0054】
情報処理装置100は、上述した構成部の他、例えば、キーボード、マウス、ディスプレイ、プリンタ、スキャナ、マイク、スピーカーなどを有してもよい。また、情報処理装置100は、記録媒体I/F304や記録媒体305を複数有していてもよい。また、情報処理装置100は、記録媒体I/F304や記録媒体305を有していなくてもよい。
【0055】
(演算処理装置201のハードウェア構成例)
演算処理装置201のハードウェア構成例は、具体的には、図3に示した情報処理装置100のハードウェア構成例と同様であるため、説明を省略する。
【0056】
(クライアント装置202のハードウェア構成例)
クライアント装置202のハードウェア構成例は、具体的には、図3に示した情報処理装置100のハードウェア構成例と同様であるため、説明を省略する。
【0057】
(情報処理装置100の機能的構成例)
次に、図4を用いて、情報処理装置100の機能的構成例について説明する。
【0058】
図4は、情報処理装置100の機能的構成例を示すブロック図である。情報処理装置100は、記憶部400と、取得部401と、第1生成部402と、第1特定部403と、第2特定部404と、第2生成部405と、模擬部406と、出力部407とを含む。
【0059】
記憶部400は、例えば、図3に示したメモリ302や記録媒体305などの記憶領域によって実現される。以下では、記憶部400が、情報処理装置100に含まれる場合について説明するが、これに限らない。例えば、記憶部400が、情報処理装置100とは異なる装置に含まれ、記憶部400の記憶内容が情報処理装置100から参照可能である場合があってもよい。
【0060】
取得部401~出力部407は、制御部の一例として機能する。取得部401~出力部407は、具体的には、例えば、図3に示したメモリ302や記録媒体305などの記憶領域に記憶されたプログラムをCPU301に実行させることにより、または、ネットワークI/F303により、その機能を実現する。各機能部の処理結果は、例えば、図3に示したメモリ302や記録媒体305などの記憶領域に記憶される。
【0061】
記憶部400は、各機能部の処理において参照され、または更新される各種情報を記憶する。記憶部400は、例えば、第1量子回路を記憶する。第1量子回路は、複数の量子ビットに関する量子回路である。複数の量子ビットは、ローカルな1以上の量子ビットと、グローバルな1以上の量子ビットとを含む。第1量子回路は、それぞれ異なる1以上の量子ビットに対して演算を実施することを表す複数のゲートを、時系列に沿って規定する。第1量子回路は、例えば、取得部401によって取得される。
【0062】
記憶部400は、例えば、複数の量子ビットのうち、ローカルな量子ビットと、グローバルな量子ビットとを識別する識別情報を記憶する。ローカルな量子ビットと、グローバルな量子ビットとは、入れ替えることができる。例えば、ある量子ビットを、ローカルからグローバルに変更し、他の量子ビットを、グローバルからローカルに変更することにより、ローカルな量子ビットと、グローバルな量子ビットとを入れ替える。識別情報は、例えば、取得部401によって取得される。
【0063】
記憶部400は、例えば、第2量子回路を記憶する。第2量子回路は、複数の量子ビットに関する量子回路である。第2量子回路は、それぞれ異なる1以上の量子ビットに対して演算を実施することを表す複数のゲートを、時系列に沿って規定する。第2量子回路は、第1量子回路と論理的に等価な量子回路である。第2量子回路は、例えば、第2生成部405によって生成される。
【0064】
取得部401は、各機能部の処理に用いられる各種情報を取得する。取得部401は、取得した各種情報を、記憶部400に記憶し、または、各機能部に出力する。また、取得部401は、記憶部400に記憶しておいた各種情報を、各機能部に出力してもよい。取得部401は、例えば、利用者の操作入力に基づき、各種情報を取得する。取得部401は、例えば、情報処理装置100とは異なる装置から、各種情報を受信してもよい。
【0065】
取得部401は、例えば、第1量子回路を取得する。取得部401は、具体的には、利用者の操作入力に基づき、第1量子回路の入力を受け付けることにより、第1量子回路を取得する。取得部401は、具体的には、第1量子回路を、他のコンピュータから受信することにより取得する。他のコンピュータは、具体的には、クライアント装置202などである。
【0066】
取得部401は、例えば、ローカルな量子ビットと、グローバルな量子ビットとを識別する識別情報を取得する。取得部401は、具体的には、利用者の操作入力に基づき、識別情報の入力を受け付けることにより、識別情報を取得する。取得部401は、具体的には、識別情報を、他のコンピュータから受信することにより取得する。他のコンピュータは、具体的には、クライアント装置202などである。
【0067】
取得部401は、いずれかの機能部の処理を開始する開始トリガーを受け付けてもよい。開始トリガーは、例えば、利用者による所定の操作入力があったことである。開始トリガーは、例えば、他のコンピュータから、所定の情報を受信したことであってもよい。開始トリガーは、例えば、いずれかの機能部が所定の情報を出力したことであってもよい。取得部401は、例えば、第1量子回路を取得したことを、第1生成部402と、第1特定部403と、第2特定部404と、第2生成部405との処理を開始する開始トリガーとして受け付ける。
【0068】
第1生成部402は、取得した第1量子回路に基づいて、複数のゲートのそれぞれのゲートを表すノードと、異なるノードが表すゲート間の演算の実施順序を表す有向エッジとを含む非巡回有向グラフを生成する。これにより、第1生成部402は、ゲート間の依存関係を特定可能にすることができ、第1量子回路の中身を解析し易くすることができる。
【0069】
第1特定部403は、生成した非巡回有向グラフに基づいて、複数のゲートのうち、他のゲートに依存せずに実行可能な、ローカルな量子ビットの上限以下の量子ビットを参照するそれぞれプロセス間通信が発生する1以上の第1ゲートを特定する。第1特定部403は、特定した1以上の第1ゲートが参照する1以上の量子ビットを特定する。
【0070】
他のゲートに依存せずに実行可能な、1以上の第1ゲートは、例えば、1以上の第1ゲートが、全体として他のゲートに依存せずに実行可能な状態である。他のゲートに依存せずに実行可能な、1以上の第1ゲートは、具体的には、1以上の第1ゲートに含まれない他のゲートを始点とする有向エッジが、1以上の第1ゲートのいずれの第1ゲートにも接続されない状態である。
【0071】
他のゲートに依存せずに実行可能な、1以上の第1ゲートは、例えば、1以上の第1ゲートのそれぞれの第1ゲートが、他のゲートに依存せずに実行可能な状態であってもよい。他のゲートに依存せずに実行可能な、1以上の第1ゲートは、具体的には、1以上の第1ゲートのそれぞれの第1ゲートについて、当該第1ゲートとは異なる他のゲートを始点とする有向エッジが、当該第1ゲートに接続されない状態であってもよい。
【0072】
第1特定部403は、例えば、第2特定部404で1以上の第2ゲートを特定する都度、1以上の第1ゲートを特定する。第1特定部403は、具体的には、第2特定部404で非巡回有向グラフを更新する都度、1以上の第1ゲートを特定する。第1特定部403は、例えば、第2特定部404で1以上の第2ゲートが特定されない場合、1以上の第1ゲートを特定してもよい。
【0073】
第1特定部403は、具体的には、対角行列で表現される演算を実施することを表すゲートを、プロセス間通信が発生しないゲートであると判定する。第1特定部403は、具体的には、グローバルな量子ビットに関連しないゲートを、プロセス間通信が発生しないゲートであると判定する。第1特定部403は、具体的には、対角行列で表現されない演算を実施することを表し、グローバルな量子ビットに関連するゲートを、プロセス間通信が発生するゲートであると判定する。
【0074】
第1特定部403は、具体的には、非巡回有向グラフと、プロセス間通信が発生するゲートであるか否かを判定した結果とに基づいて、1以上の第1ゲートを特定する。第1特定部403は、より具体的には、他のゲートに依存せずに実行可能なプロセス間通信が発生するゲートから始まり、全体として他のゲートに依存せずに実行可能なそれぞれプロセス間通信が発生する、1以上の第1ゲートを特定する。
【0075】
第1特定部403は、具体的には、非巡回有向グラフに基づいて、他のゲートに依存せずに実行可能な、プロセス間通信が発生するゲートを順に選択してもよい。第1特定部403は、具体的には、ゲートを選択する都度、当該ゲートに関わる量子ビットを、グループに追加するという処理を、グループに含まれる量子ビットの数が、ローカルな量子ビットの上限を超えない範囲で繰り返し実施する。第1特定部403は、選択済みのゲートを、1以上の第1ゲートとして特定する。第1特定部403は、最終的にグループに含まれる1以上の量子ビットを特定する。
【0076】
第1特定部403は、具体的には、非巡回有向グラフに基づいて、他のゲートに依存せずに実行可能な、ローカルな量子ビットの上限以下の1以上の量子ビットを参照する、プロセス間通信が発生するゲートの複数の組み合わせを特定してもよい。第1特定部403は、複数の組み合わせのうち、最も多くのゲートを含む組み合わせとなる、それぞれプロセス間通信が発生する1以上のゲートを、1以上の第1ゲートとして特定する。第1特定部403は、特定した1以上の第1ゲートが参照する1以上の量子ビットを特定する。これにより、第1特定部403は、第2量子回路を生成する指針を得ることができる。
【0077】
第2特定部404は、非巡回有向グラフに基づいて、複数のゲートのうち、他のゲートに依存せずに実行可能な、それぞれプロセス間通信が発生しない1以上の第2ゲートを特定する。
【0078】
他のゲートに依存せずに実行可能な、1以上の第2ゲートは、例えば、1以上の第2ゲートが、全体として他のゲートに依存せずに実行可能な状態である。他のゲートに依存せずに実行可能な、1以上の第2ゲートは、具体的には、1以上の第2ゲートに含まれない他のゲートを始点とする有向エッジが、1以上の第2ゲートのいずれの第2ゲートにも接続されない状態である。
【0079】
他のゲートに依存せずに実行可能な、1以上の第2ゲートは、例えば、1以上の第2ゲートのそれぞれの第2ゲートが、他のゲートに依存せずに実行可能な状態であってもよい。他のゲートに依存せずに実行可能な、1以上の第2ゲートは、具体的には、1以上の第2ゲートのそれぞれの第2ゲートについて、当該第2ゲートとは異なる他のゲートを始点とする有向エッジが、当該第2ゲートに接続されない状態であってもよい。
【0080】
第2特定部404は、例えば、第1特定部403で1以上の量子ビットを最初に特定する前に1以上の第2ゲートを一度特定する。第2特定部404は、例えば、第1特定部403で1以上の量子ビットを特定する都度、1以上の第2ゲートを特定する。
【0081】
第2特定部404は、具体的には、第1特定部403で1以上の量子ビットを特定し、第2生成部405で雛型回路に1以上のスワップゲートを追加したことに応じて、1以上の第2ゲートを特定する。スワップゲートは、2つの量子ビットを入れ替える単一スワップゲート、または、4つ以上の量子ビットを入れ替えるフューズドスワップゲートである。第2特定部404は、例えば、第1特定部403で1以上の量子ビットが特定されない場合に、1以上の第2ゲートを特定してもよい。
【0082】
第2特定部404は、具体的には、対角行列で表現される演算を実施することを表すゲートを、プロセス間通信が発生しないゲートであると判定する。第2特定部404は、具体的には、グローバルな量子ビットに関連しないゲートを、プロセス間通信が発生しないゲートであると判定する。第2特定部404は、具体的には、対角行列で表現されない演算を実施することを表し、グローバルな量子ビットに関連するゲートを、プロセス間通信が発生するゲートであると判定する。
【0083】
第2特定部404は、具体的には、非巡回有向グラフと、プロセス間通信が発生するゲートであるか否かを判定した結果とに基づいて、1以上の第2ゲートを特定する。第2特定部404は、より具体的には、他のゲートに依存せずに実行可能なプロセス間通信が発生しないゲートから始まり、全体として他のゲートに依存せずに実行可能なそれぞれプロセス間通信が発生しない1以上の第2ゲートを特定する。
【0084】
第2特定部404は、第2特定部404で1以上の第2ゲートを特定する都度、非巡回有向グラフの中から、第2特定部404で今回特定した1以上の第2ゲートのそれぞれの第2ゲートを表すノードを除去するよう、非巡回有向グラフを更新する。これにより、第2特定部404は、特定済みのゲートを判別可能に、第2量子回路を生成する目的に適するよう、非巡回有向グラフを更新することができる。
【0085】
第2生成部405は、第1量子回路と論理的に等価な第2量子回路を生成する。第2量子回路は、例えば、第1特定部403で特定した1以上の量子ビットがローカルになるよう、ローカルな量子ビットとグローバルな量子ビットとを入れ替える1以上のスワップゲートを、第1特定部403で特定した1以上の第1ゲートの直前に含む。
【0086】
第2生成部405は、例えば、空の雛型回路を用意する。第2生成部405は、例えば、第2特定部404で1以上の第2ゲートを特定する都度、雛型回路に対して、第2特定部404で特定した1以上の第2ゲートを追加する。これにより、第2生成部405は、第2量子回路を、段階的に生成していくことができる。
【0087】
第2生成部405は、例えば、第1特定部403で1以上の量子ビットを特定する都度、雛型回路に対して、第1特定部403で特定した1以上の量子ビットがローカルになるよう、1以上のスワップゲートを追加する。第2生成部405は、具体的には、入れ替える量子ビットの数が4以上であれば、雛型回路に対して、フューズドスワップゲートを含む1以上のスワップゲートを追加する。これにより、第2生成部405は、第2量子回路を、段階的に生成していくことができる。
【0088】
第2生成部405は、非巡回有向グラフが空であるか否かを判定する。第2生成部405は、空である場合、雛型回路の末尾に、初期状態でローカルな1以上の量子ビットがローカルに戻るよう、1以上のスワップゲートを追加することにより、第2量子回路を生成する。これにより、第2生成部405は、第2量子回路を完成することができる。
【0089】
模擬部406は、量子状態の組み合わせを表現するベクトルのそれぞれの成分を分担する複数のプロセスを制御して、第2生成部405で生成した第2量子回路に規定された一連の演算による量子状態の組み合わせの変化を模擬するシミュレーションを実施する。プロセスは、情報処理装置100が有していてもよい。プロセスは、他のコンピュータが有していてもよい。他のコンピュータは、例えば、演算処理装置201である。これにより、模擬部406は、一連の演算による量子状態の組み合わせの変化を模擬するシミュレーションを効率よく実施することができる。
【0090】
出力部407は、少なくともいずれかの機能部の処理結果を出力する。出力形式は、例えば、ディスプレイへの表示、プリンタへの印刷出力、ネットワークI/F303による外部装置への送信、または、メモリ302や記録媒体305などの記憶領域への記憶である。これにより、出力部407は、少なくともいずれかの機能部の処理結果を利用者に通知可能にし、情報処理装置100の利便性の向上を図ることができる。
【0091】
出力部407は、例えば、第2生成部405で生成した第2量子回路を出力する。出力部407は、具体的には、第2生成部405で生成した第2量子回路を、利用者が参照可能に出力する。出力部407は、具体的には、第2生成部405で生成した第2量子回路を、他のコンピュータに送信してもよい。これにより、出力部407は、第2量子回路を、外部で利用可能にすることができる。
【0092】
出力部407は、例えば、模擬部406でシミュレーションを実施した結果を出力する。出力部407は、具体的には、模擬部406でシミュレーションを実施した結果を、利用者が参照可能に出力する。出力部407は、具体的には、模擬部406でシミュレーションを実施した結果を、他のコンピュータに送信してもよい。これにより、出力部407は、模擬部406でシミュレーションを実施した結果を、外部で利用可能にすることができる。
【0093】
(情報処理装置100の動作の流れ)
次に、図5図9を用いて、情報処理装置100の動作の流れについて説明する。
【0094】
図5図9は、情報処理装置100の動作の流れを示す説明図である。図5は、具体的には、量子状態の組み合わせを表現するステートベクトル500の一例を示す。図5において、n個の量子ビットが存在するとする。図5の例では、具体的には、n=4であるとし、量子ビット0~3が存在するとする。情報処理装置100は、量子ビット0~3の量子状態のそれぞれの組み合わせの確率を表す成分を有するステートベクトル500を設定する。
【0095】
ステートベクトル500は、例えば、量子ビット0~3の量子状態の組み合わせが、「0000」~「1111」のそれぞれである確率を表す成分を有する。以下の説明では、量子ビット0~3の量子状態の組み合わせが、「****」である確率を表す成分を、「c****」と表記する場合がある。*は、0と1とのいずれかの値となる部分を示す。
【0096】
量子回路510の先頭のゲートから順に、当該ゲートに応じてステートベクトルのそれぞれの成分を更新することにより、量子回路510に規定された一連の演算による量子ビット0~3の量子状態の組み合わせの変化を模擬するシミュレーションが実施される。先頭は、具体的には、左側である。情報処理装置100は、具体的には、ステートベクトルの複数の成分を、複数のプロセスに割り当てて、複数のプロセスを制御することにより、シミュレーションを実施する。次に、図6の説明に移行する。
【0097】
図6は、ステートベクトルの複数の成分を複数のプロセスに割り当てる一例を示す。図6において、情報処理装置100は、pおよびmの入力を受け付ける。情報処理装置100は、n個の量子ビットを並べた量子ビット列600の上位p個の量子ビットを、グローバルな量子ビットに設定し、量子ビット列600の下位m個の量子ビットを、ローカルな量子ビットに設定する。図6の例では、n=36である。このため、ステートベクトルの成分は、2^n個存在する。
【0098】
情報処理装置100は、ステートベクトルの2^n個の成分を、2^p個のプロセスに均等に割り当てる。情報処理装置100は、具体的には、ステートベクトルの2^n個の成分を、先頭から、2^m個の成分単位で区切る。情報処理装置100は、具体的には、区切った2^m個の成分を、2^m個の成分ごとに異なるプロセスに割り当てる。このため、グローバルな量子ビットに関連しないゲートが表す演算を実施する場合には、プロセス間通信が発生しないことになる。一方で、グローバルな量子ビットに関連するゲートが表す演算を実施する場合には、プロセス間通信が発生し得る。次に、図7の説明に移行する。
【0099】
図7は、プロセス間通信が発生する一例を示す。例えば、グローバルな量子ビットに関連し、対角行列で表現されない演算を実施する場合には、プロセス間通信が発生するという性質がある。図7において、対角行列で表現されないXゲートの演算について示す。図7の例では、説明の簡略化のため、n=3であり、量子ビット0~2が存在するとする。また、上位1個の量子ビット2が、グローバルな量子ビットであり、下位2個の量子ビット0,1が、ローカルな量子ビットであるとする。
【0100】
図7の表710に示す通り、ローカルな量子ビット0に関連するXゲートの演算では、同一のプロセスが担当する、量子ビット0の値のみが異なる成分同士を入れ替えることになる。図7の表710において、sは、成分の値を示す。indexは、成分を識別する識別子を示す。a(***)は、量子状態の組み合わせが「***」である確率を表す成分を識別する識別子である。
【0101】
入れ替えた後のそれぞれの成分は、図7の表711に示される。図7の表711において、sは、成分の値を示す。indexは、成分を識別する識別子を示す。このように、ローカルな量子ビット0に関連するXゲートの演算では、同一のプロセスが担当する、量子ビット0の値のみが異なる成分同士を入れ替えればよいため、プロセス間通信が発生しないと考えられる。
【0102】
一方で、図7の表720に示す通り、グローバルな量子ビット2に関連するXゲートの演算では、それぞれ異なるプロセスが担当する、量子ビット2の値のみが異なる成分同士を入れ替えることになる。図7の表720において、sは、成分の値を示す。indexは、成分を識別する識別子を示す。a(***)は、量子状態の組み合わせが「***」である確率を表す成分を識別する識別子である。
【0103】
入れ替えた後のそれぞれの成分は、図7の表721に示される。図7の表721において、sは、成分の値を示す。indexは、成分を識別する識別子を示す。このように、グローバルな量子ビット2に関連するXゲートの演算では、それぞれ異なるプロセスが担当する、量子ビット2の値のみが異なる成分同士を入れ替えることになるため、プロセス間通信が発生すると考えられる。次に、図8の説明に移行する。
【0104】
図8の表800は、ゲートの種類の一例を示す。表800のゲート名のフィールドには、ゲートを識別する名称が設定される。表800の要素数のフィールドには、上記名称のゲートが表す演算に関連する要素の数が設定される。ここで、N=2^nである。
【0105】
表800の演算数/要素のフィールドには、上記名称のゲートが表す演算において、1つの要素を更新する際の複素数の演算の回数が設定される。複素数の演算は、例えば、加算、減算、積算、または、積和などである。
【0106】
表800のランク間転送量のフィールドには、上記名称のゲートが表す演算が、グローバルな量子ビットに関連する場合に、プロセス間通信により転送する要素の数が設定される。ここで、M=2^(ローカルな量子ビットの数)である。ランク間転送量は、例えば、通信量に対応する。
【0107】
このように、ゲートの種類によっては、グローバルな量子ビットに関連する演算を実施する際に、プロセス間通信が発生してしまう傾向がある。従って、プロセス間通信に起因し、量子回路に規定された一連の演算を実施する際にかかる処理時間および処理負担の増大化を招くことが考えられる。そこで、情報処理装置100は、量子回路の入力を受け付けた場合、当該量子回路と論理的に等価な、当該量子回路よりもプロセス間通信が発生する回数、または、通信量が抑制された新たな量子回路を生成することにする。
【0108】
例えば、表800に示す通り、汎用ゲート、Xゲート、または、Yゲートなどに関する通信量よりも、スワップゲートに関する通信量の方が小さくなる傾向がある。このため、情報処理装置100は、具体的には、スワップゲートを利用して、各種ゲートが表す演算において参照する量子ビットを、予めローカルに移動するような、新たな量子回路を生成することにする。次に、図9の説明に移行する。
【0109】
図9において、情報処理装置100は、量子回路900の入力を受け付けたとする。(9-1)情報処理装置100は、量子回路900の先頭のゲート910が、ローカルな量子ビット0に関連するゲートであり、他のゲートに依存せずに実行可能であるため、そのまま量子回路900に残す。
【0110】
情報処理装置100は、量子回路900のゲート911が、グローバルな量子ビット2を含む2個以下の量子ビット0,2に関連し、他のゲートに依存せずに実行可能であるため、量子ビット0,2をローカルな量子ビットに設定すると決定する。
【0111】
(9-2)情報処理装置100は、量子ビット0,2をローカルな量子ビットに設定するため、ゲート912の直前に、スワップゲート930を追加する。これにより、情報処理装置100は、量子回路900を更新し、量子回路920を生成する。情報処理装置100は、スワップゲート930を追加することにより、ゲート911,913でプロセス間通信が発生しないようにすることができる。
【0112】
(9-3)情報処理装置100は、量子回路920のゲート913が、現在ローカルな量子ビット2に関連するゲートであり、他のゲートに依存せずに実行可能であるため、ゲート912の直後に移動する。情報処理装置100は、量子回路920のゲート912が、現在グローバルな量子ビット1,3を含む2個以下の量子ビット1,3に関連し、他のゲートに依存せずに実行可能であるため、量子ビット1,3を次のローカルな量子ビットに設定すると決定する。
【0113】
(9-4)情報処理装置100は、量子ビット1,3をローカルな量子ビットに設定するため、ゲート912の直前に、スワップゲート950を追加する。これにより、情報処理装置100は、量子回路920を更新し、量子回路940を生成する。情報処理装置100は、スワップゲート950を追加することにより、ゲート912でプロセス間通信が発生しないようにすることができる。
【0114】
このように、情報処理装置100は、量子回路900と論理的に等価な、量子回路900よりもプロセス間通信が発生する回数、または、通信量が抑制された量子回路940を得ることができる。情報処理装置100は、量子回路940に従って、複数のプロセスを制御することにより、プロセス間通信が発生する回数、または、通信量を抑制しつつ、量子回路940に規定された一連の演算を効率よく実施することができる。情報処理装置100は、実質的に、入力を受け付けた量子回路900に規定された一連の演算を実施することができる。
【0115】
(情報処理装置100の動作の一例)
次に、図10図14を用いて、情報処理装置100の動作の一例について説明する。
【0116】
図10図14は、情報処理装置100の動作の一例を示す説明図である。図10において、情報処理装置100は、量子回路1000の入力を受け付ける。量子回路1000は、n個の量子ビットに関する。図5の例では、n=4である。量子回路1000は、ゲート1010~1013を含む。量子ビット0,1は、初期状態で、ローカルな量子ビットである。量子ビット2,3は、初期状態で、グローバルな量子ビットである。
【0117】
情報処理装置100は、量子回路1000に対応するDAG1020を生成する。DAG1020は、ゲート1010~1013のそれぞれを表すノード1030~1033を含む。情報処理装置100は、DAG1020に対してトポロジカルソートを実施しておいてもよい。
【0118】
情報処理装置100は、グラフGに、生成したDAG1020を設定する。情報処理装置100は、空の出力回路Cを用意する。情報処理装置100は、現在のグローバルな量子ビットと、現在のローカルな量子ビットとを区別可能にするqubit順序σを記憶する。
【0119】
qubit順序σは、例えば、n個の量子ビットを並べた量子ビット列の上位から順に、それぞれの量子ビットを識別する識別子を並べて表す情報である。qubit順序σは、具体的には、初期状態で、[0,1,2,3]などである。これにより、情報処理装置100は、量子回路1000の中身を解析し易くすることができる。ここでは、説明の簡略化のため、n=4である場合について説明したが、以下の説明では、n=6である場合について説明する。次に、図11の説明に移行する。
【0120】
図11において、情報処理装置100は、グラフGが空になるまで、後述する(11-1)~(11-3)の処理を繰り返し実施する。qubit順序σは、具体的には、初期状態で、[0,1,2,3,4,5]である。qubit順序σのうち、左側3個の量子ビットが、ローカルであり、右側3個の量子ビットが、グローバルである。
【0121】
(11-1)情報処理装置100は、グラフGのそれぞれのノードが表すゲートgが、他のゲートに依存せずに実行可能、かつ、現在のqubit順序σに対してプロセス間通信が発生しないゲートであれば、グラフGの中から当該ゲートgを除去する。情報処理装置100は、例えば、表800を参照して、グラフGのそれぞれのノードが表すゲートgが、現在のqubit順序σに対してプロセス間通信が発生するゲートであるか否かを判定してもよい。
【0122】
情報処理装置100は、除去したゲートgを、現在のqubit順序σに適合するよう更新した後に、現在の出力回路Cの末尾に、順に追加する。情報処理装置100は、具体的には、除去したゲートgが参照する量子ビットの番号が、現在のqubit順序σに適合するよう、当該ゲートgの中身を書き換えた後に、現在の出力回路Cの末尾に追加する。これにより、情報処理装置100は、現在プロセス間通信が発生しないゲートが、グローバルな量子ビットとローカルな量子ビットとを入れ替えた後に、プロセス間通信が発生するゲートになってしまうことを回避し易くすることができる。
【0123】
(11-2)情報処理装置100は、次にローカルにする1以上の量子ビットを特定する。情報処理装置100は、例えば、現在のグラフGと、現在のqubit順序σとに基づいて、次にローカルにする1以上の量子ビットを表す集合Qlocal’を決定する。
【0124】
情報処理装置100は、例えば、|Qlocal’|≦(ローカルな量子ビットの数)である限り、グラフGのうち、他のゲートに依存せずに実行可能なゲートを順に検索することを繰り返す。情報処理装置100は、例えば、|Qlocal’|≦(ローカルな量子ビットの数)である限り、グラフGのうち、検索済みのゲート以外の他のゲートに依存せずに実行可能なゲートを順に検索することを繰り返してもよい。情報処理装置100は、例えば、検索したゲートが参照する量子ビットを、Qlocal’に追加する。|*|は、*の量子ビットの数である。これにより、情報処理装置100は、次にローカルにする1以上の量子ビットを特定することができる。
【0125】
(11-3)情報処理装置100は、ローカルな量子ビットが、Qlocal’と一致するよう、スワップゲートまたはフューズドスワップゲートを、出力回路Cに追加する。
【0126】
情報処理装置100は、例えば、次にローカルにする1以上の量子ビットの集合Q_importと、グローバルに移動可能な1以上の量子ビットの集合Q_exportableとを特定する。情報処理装置100は、具体的には、Q_import←Qlocal’-Qlocalを特定する。Qlocalは、現在のローカルな量子ビットである。情報処理装置100は、具体的には、Q_exportable←Qlocal-Qlocal’を特定する。図11の例では、Q_import={3,5}である。Q_exportable={0,2}である。qubit順序σ=[0,1,2,3,4,5]である。
【0127】
情報処理装置100は、例えば、ローカルな量子ビットのうち、上位|Q_import|個の量子ビットが、Q_exportableに含まれる量子ビットになるよう、ローカルな量子ビット同士を入れ替えるスワップゲートを、出力回路Cに追加する。図11の例では、情報処理装置100は、表1100に示す通り、ローカルな量子ビット0,1同士を入れ替えるスワップゲートを、出力回路Cに追加する。
【0128】
情報処理装置100は、例えば、グローバルな量子ビットのうち、Q_importの量子ビットが連続するよう、スワップゲートを、出力回路Cに追加する。グローバルな量子ビット同士を入れ替えるスワップゲートは、プロセス間通信なしに実施可能なように実装される傾向がある。図11の例では、情報処理装置100は、表1100に示す通り、グローバルな量子ビット4,5同士を入れ替えるスワップゲートを、出力回路Cに追加する。
【0129】
情報処理装置100は、ローカルな量子ビットのうち、上位|Q_import|個の量子ビットと、グローバルな量子ビットのうち、Q_importの量子ビットとを入れ替えるよう、スワップゲートまたはフューズドスワップゲートを、出力回路Cに追加する。図11の例では、情報処理装置100は、表1100に示す通り、ローカルな量子ビット0,2と、グローバルな量子ビット3,5とを入れ替えるフューズドスワップゲートを、出力回路Cに追加する。これにより、情報処理装置100は、上位|Q_import|個の量子ビットを入れ替え、不連続メモリアクセスによる性能低下を回避し易くすることができる。
【0130】
次に、図12の説明に移行し、グローバルな量子ビット同士を入れ替えるスワップゲートが、プロセス間通信なしに実施可能なように実装されていない場合に、ローカルな量子ビットと、グローバルな量子ビットとをどのように入れ替えるのかについて説明する。図12の例では、Q_import={3,5}である。Q_exportable={0,1,2}である。qubit順序σ=[0,1,2,3,4,5]である。
【0131】
図12において、情報処理装置100は、|Q_import|に対して|Q_exportable|に余分があれば、グローバルな量子ビットのうち、不連続になる量子ビットを、Q_importに追加してもよい。そして、情報処理装置100は、フューズドスワップゲートを活用し、ローカルな量子ビットと、グローバルな量子ビットとを一度で入れ替えるようにしてもよい。
【0132】
図12の例では、情報処理装置100は、具体的には、量子ビット4を、Q_importに追加する。情報処理装置100は、具体的には、表1210に示す通り、ローカルな量子ビット0~2と、グローバルな量子ビット3~5とを入れ替える1つのフューズドスワップゲートを、出力回路Cに追加する。これにより、情報処理装置100は、フューズドスワップゲートを活用して、Q_exportableの量子ビットと、Q_importの量子ビットとを入れ替えることができる。
【0133】
情報処理装置100は、|Q_import|に対して|Q_exportable|に余分がなければ、ローカルな量子ビットと、グローバルな量子ビットとを複数回に分けて入れ替えることが考えられる。図12の例では、情報処理装置100は、具体的には、表1200に示す通り、ローカルな量子ビット1と、グローバルな量子ビット3とを入れ替える1つのスワップゲートを、出力回路Cに追加する。情報処理装置100は、具体的には、表1200に示す通り、ローカルな量子ビット2と、グローバルな量子ビット5とを入れ替える1つのスワップゲートを、出力回路Cに追加する。
【0134】
表1200,1210に示す通り、情報処理装置100は、フューズドスワップゲートを活用して、Q_exportableの量子ビットと、Q_importの量子ビットとを入れ替える際にかかる処理負担の低減化を図ることができる。情報処理装置100は、具体的には、出力回路Cに追加するゲートの数の低減化を図ることができる。情報処理装置100は、具体的には、出力回路Cに従って、量子ビットを入れ替える演算を実施する回数の低減化を図ることができる。次に、図13の説明に移行する。
【0135】
図13において、情報処理装置100は、グラフGが空になったことを検出する。情報処理装置100は、グラフGが空になると、qubit順序σを初期状態に戻すよう、スワップゲートまたはフューズドスワップゲートを、出力回路Cに追加する。情報処理装置100は、例えば、Qlocal’={0,…,(ローカルな量子ビットの数-1)}に設定する。情報処理装置100は、例えば、図11と同様に、Qlocal’に基づいて、スワップゲートまたはフューズドスワップゲートを、出力回路Cに追加する。
【0136】
図13の例では、情報処理装置100は、具体的には、表1300に示す通り、ローカルな量子ビット5,4と、グローバルな量子ビット0,2とを入れ替えるフューズドスワップゲートを、出力回路Cに追加する。情報処理装置100は、具体的には、ローカルな量子ビット0,1同士を入れ替えるスワップゲートを、出力回路Cに追加する。情報処理装置100は、具体的には、グローバルな量子ビット4,5同士を入れ替えるスワップゲートを、出力回路Cに追加する。
【0137】
これにより、情報処理装置100は、入力を受け付けた量子回路と論理的に等価になり、プロセス間通信が発生する回数、または、通信量が抑制された出力回路Cを生成することができる。次に、図14の説明に移行し、グローバルな量子ビット同士を入れ替えるスワップゲートが、プロセス間通信なしに実施可能なように実装されていない場合に、qubit順序σをどのように初期状態に戻すのかについて説明する。
【0138】
図14において、情報処理装置100は、ローカルな量子ビットの数が、グローバルな量子ビットの数の2倍未満である場合、1つの量子ビットずつ、量子ビット同士を入れ替えることになる。従って、この場合、情報処理装置100は、最大で量子ビットの数-1個のスワップゲートを、出力回路Cに追加することになる。
【0139】
情報処理装置100は、ローカルな量子ビットの数が、グローバルな量子ビットの数の2倍以上である場合、下記に示す通り、qubit順序σを初期状態に戻す。
【0140】
例えば、グローバルな量子ビットに、(ローカルな量子ビットの数)~(量子ビットの数-1)番の量子ビットが含まれる場合がある。この場合、情報処理装置100は、例えば、ローカルな量子ビットの上位(グローバルな量子ビットの数)個の量子ビットに、(ローカルな量子ビットの数)~(量子ビットの数-1)番の量子ビットが含まれないよう、スワップゲートを、出力回路Cに追加する。図14の例では、情報処理装置100は、具体的には、表1400に示す通り、ローカルな量子ビット0,5同士を入れ替えるスワップゲートを、出力回路Cに追加する。
【0141】
情報処理装置100は、例えば、ローカルな量子ビットの上位(グローバルな量子ビットの数)個の量子ビットと、グローバルな量子ビットとを入れ替えるフューズドスワップゲートを、出力回路Cに追加する。図14の例では、情報処理装置100は、具体的には、表1400に示す通り、ローカルな量子ビット0,3と、グローバルな量子ビット2,4とを入れ替えるフューズドスワップゲートを、出力回路Cに追加する。
【0142】
情報処理装置100は、例えば、ローカルな量子ビットの上位(グローバルな量子ビットの数)個の量子ビットにおいて、(ローカルな量子ビットの数)~(量子ビットの数-1)番の量子ビットを順序通りに並べ替えるスワップゲートを、出力回路Cに追加する。図14の例では、情報処理装置100は、具体的には、表1400に示す通り、ローカルな量子ビット2,4,5を順序通りに並べ替える2つのスワップゲートを、出力回路Cに追加する。
【0143】
情報処理装置100は、例えば、ローカルな量子ビットの上位(グローバルな量子ビットの数)個の量子ビットと、グローバルな量子ビットとを入れ替えるフューズドスワップゲートを、出力回路Cに追加する。図14の例では、情報処理装置100は、具体的には、表1400に示す通り、ローカルな量子ビット4,5と、グローバルな量子ビット0,3とを入れ替えるフューズドスワップゲートを、出力回路Cに追加する。
【0144】
情報処理装置100は、例えば、ローカルな量子ビットを順序通り並べ替えるスワップゲートを、出力回路Cに追加する。図14の例では、情報処理装置100は、具体的には、表1400に示す通り、ローカルな量子ビット0,1,2を順序通りに並べ替える2つのスワップゲートを、出力回路Cに追加する。これにより、情報処理装置100は、qubit順序σを初期状態に戻すよう、複数の量子ビットを適切に入れ替えることができる。
【0145】
(情報処理装置100の動作の具体例)
次に、図15図18を用いて、情報処理装置100の動作の具体例について説明する。
【0146】
図15図18は、情報処理装置100の動作の具体例を示す説明図である。図15において、情報処理装置100は、量子回路1500の入力を受け付けたとする。量子回路1500は、ゲート1510~1518を含む。情報処理装置100は、量子回路1500に対応するDAG1520を生成する。DAG1520は、ゲート1510~1518のそれぞれを表すノード1530~1538を含む。次に、図16の説明に移行する。
【0147】
図16において、(16-1)情報処理装置100は、qubit順序σに基づいて、グローバルな量子ビットに関連せず、プロセス間通信が発生しないゲートを表すノード1530~1532を特定する。情報処理装置100は、DAG1520に基づいて、特定したノード1530~1532のうち、他のノードを始点とする有向エッジが接続されず、他のゲートに依存せずに実行可能なゲートを表す、ノード1530~1532を特定する。情報処理装置100は、特定したノード1530~1532を、DAG1520から除去する。情報処理装置100は、特定したノード1530~1532が表すゲート1610~1612を、出力回路1600に追加する。
【0148】
(16-2)情報処理装置100は、最新のqubit順序σに基づいて、グローバルな量子ビットに関連し、プロセス間通信が発生する1以上のゲートを表すノード1533~1538を特定する。情報処理装置100は、最新のDAG1520に基づいて、特定したノード1533~1538のうち、他のノードを始点とする有向エッジが接続されず、他のゲートに依存せずに実行可能な1以上のゲートを表す、ノード1533~1536を特定する。情報処理装置100は、特定したノード1533~1536に基づいて、次にローカルに設定する量子ビットの集合Qlocal’={2,3,4}を特定する。
【0149】
(16-3)情報処理装置100は、Qlocal’={2,3,4}に基づいて、qubit順序σを更新し、スワップゲート1620と、フューズドスワップゲート1630とを、出力回路1600に追加する。次に、図17の説明に移行する。
【0150】
図17において、(17-1)情報処理装置100は、最新のqubit順序σに基づいて、グローバルな量子ビットに関連せず、プロセス間通信が発生しないゲートを表すノード1533~1536を特定する。情報処理装置100は、最新のDAG1520に基づいて、特定したノード1533~1536のうち、他のノードを始点とする有向エッジが接続されず、他のゲートに依存せずに実行可能なゲートを表す、ノード1533,1534を特定する。情報処理装置100は、特定したノード1533,1534を、DAG1520から除去する。情報処理装置100は、特定したノード1533,1534が表すゲート1700,1701を、出力回路1600に追加する。
【0151】
情報処理装置100は、最新のqubit順序σに基づいて、グローバルな量子ビットに関連せず、プロセス間通信が発生しないゲートを表すノード1535,1536を特定する。情報処理装置100は、最新のDAG1520に基づいて、特定したノード1535,1536のうち、他のノードを始点とする有向エッジが接続されず、他のゲートに依存せずに実行可能なゲートを表す、ノード1535を特定する。情報処理装置100は、特定したノード1535を、DAG1520から除去する。情報処理装置100は、特定したノード1535が表すゲート1702を、出力回路1600に追加する。
【0152】
情報処理装置100は、最新のqubit順序σに基づいて、グローバルな量子ビットに関連せず、プロセス間通信が発生しないゲートを表すノード1536を特定する。情報処理装置100は、最新のDAG1520に基づいて、特定したノード1536のうち、他のノードを始点とする有向エッジが接続されず、他のゲートに依存せずに実行可能なゲートを表す、ノード1536を特定する。情報処理装置100は、特定したノード1536を、DAG1520から除去する。情報処理装置100は、特定したノード1536が表すゲート1702を、出力回路1600に追加する。
【0153】
(17-2)情報処理装置100は、最新のqubit順序σに基づいて、グローバルな量子ビットに関連し、プロセス間通信が発生する1以上のゲートを表すノード1537,1538を特定する。情報処理装置100は、最新のDAG1520に基づいて、特定したノード1537,1538のうち、他のノードを始点とする有向エッジが接続されず、他のゲートに依存せずに実行可能な1以上のゲートを表す、ノード1537,1538を特定する。情報処理装置100は、特定したノード1537,1538に基づいて、次にローカルに設定する量子ビットの集合Qlocal’={0,1,2}を特定する。
【0154】
(17-3)情報処理装置100は、Qlocal’={0,1,2}に基づいて、qubit順序σを更新し、フューズドスワップゲート1710を、出力回路1600に追加する。次に、図18の説明に移行する。
【0155】
図18において、(18-1)情報処理装置100は、最新のqubit順序σに基づいて、グローバルな量子ビットに関連せず、プロセス間通信が発生しないゲートを表すノード1537,1538を特定する。情報処理装置100は、最新のDAG1520に基づいて、特定したノード1537,1538のうち、他のノードを始点とする有向エッジが接続されず、他のゲートに依存せずに実行可能なゲートを表す、ノード1537を特定する。情報処理装置100は、特定したノード1537を、DAG1520から除去する。情報処理装置100は、特定したノード1537が表すゲート1801を、出力回路1600に追加する。
【0156】
情報処理装置100は、最新のqubit順序σに基づいて、グローバルな量子ビットに関連せず、プロセス間通信が発生しないゲートを表すノード1538を特定する。情報処理装置100は、最新のDAG1520に基づいて、特定したノード1538のうち、他のノードを始点とする有向エッジが接続されず、他のゲートに依存せずに実行可能なゲートを表す、ノード1538を特定する。情報処理装置100は、特定したノード1538を、DAG1520から除去する。情報処理装置100は、特定したノード1538が表すゲート1802を、出力回路1600に追加する。
【0157】
(18-2)情報処理装置100は、DAG1520が空になったことを検出する。情報処理装置100は、DAG1520が空になったため、qubit順序σを初期状態に戻すよう、スワップゲート1810を、出力回路1600に追加する。これにより、情報処理装置100は、入力を受け付けた量子回路1500と論理的に等価な、プロセス間通信が発生する回数、または、通信量が抑制された出力回路1600を生成することができる。
【0158】
(情報処理装置100の第1適用例)
次に、図19を用いて、情報処理装置100の第1適用例について説明する。
【0159】
図19は、情報処理装置100の第1適用例を示す説明図である。図19において、情報処理装置100は、量子回路1900の入力を受け付けたとする。量子回路1900は、ゲート1910~1913を含む。ゲート1910~1913は、汎用ゲートである。量子回路1900において発生するプロセス間通信の通信量は、例えば、7Mである。Mは、2^(ローカルな量子ビットの数)である。
【0160】
情報処理装置100は、量子回路1900と論理的に等価な量子回路1920を生成したとする。量子回路1920は、ゲート1910~1913のそれぞれに対応するゲート1930~1933を含む。量子回路1920は、スワップゲート1940と、フューズドスワップゲート1950と、スワップゲート1960~1962とを含む。これにより、情報処理装置100は、量子回路1920において、プロセス間通信の通信量を2.75Mに低減することができる。
【0161】
(情報処理装置100の第2適用例)
次に、図20および図21を用いて、情報処理装置100の第2適用例について説明する。
【0162】
図20および図21は、情報処理装置100の第2適用例を示す説明図である。図20において、情報処理装置100は、Qulacs benchmarkの量子回路に適用されたとする。情報処理装置100は、表2000に示す測定条件下で、上述した通り量子回路に対する最適化を行い、量子回路に規定された一連の演算を実施する際にかかる処理時間を測定したとする。
【0163】
以下の説明では、情報処理装置100が測定した処理時間を「「w/ our opt.」の処理時間」と表記する場合がある。また、「w/ our opt.」の処理時間との比較例として、「w/o opt.」の処理時間と、「w/ existing opt.」の処理時間とを採用する。
【0164】
「w/o opt.」の処理時間は、量子回路に対する最適化を行わない場合の処理時間である。「w/ existing opt.」の処理時間は、量子回路に対して従来の最適化を行う場合の処理時間である。次に、図21の説明に移行する。
【0165】
図21のグラフ2100は、「w/ our opt.」の処理時間と、「w/o opt.」の処理時間と、「w/ existing opt.」の処理時間とを示す。グラフ2100に示す通り、情報処理装置100は、update時間について、「w/o opt.」に比べて1.84倍の高速化を図ることができる。情報処理装置100は、update時間について、「w/ existing opt.」に比べて1.16倍の高速化を図ることができる。
【0166】
グラフ2100に示す通り、情報処理装置100は、全体時間について、「w/o opt.」に比べて1.72倍の高速化を図ることができる。情報処理装置100は、全体時間について、「w/ existing opt.」に比べて1.35倍の高速化を図ることができる。このように、情報処理装置100は、従来に比べて、量子回路に規定された一連の演算を実施する際にかかる処理時間を低減することができる。
【0167】
(情報処理装置100の第3適用例)
次に、図22および図23を用いて、情報処理装置100の第3適用例について説明する。
【0168】
図22および図23は、情報処理装置100の第3適用例を示す説明図である。図22において、情報処理装置100は、Quantum Volume Benchmark (depth=30)の量子回路に適用されたとする。
【0169】
情報処理装置100は、表2200に示す測定条件下で、上述した通り量子回路に対する最適化を行い、量子回路に規定された一連の演算を実施する際にかかる処理時間を測定したとする。以下の説明では、情報処理装置100が測定した処理時間を「「w/ fused-swap」の処理時間」と表記する場合がある。
【0170】
また、情報処理装置100は、表2200に示す測定条件下で、ゲートフュージョンの最適化を利用して、上述した通り量子回路に対する最適化を行い、量子回路に規定された一連の演算を実施する際にかかる処理時間を測定したとする。以下の説明では、ゲートフュージョンの最適化を利用して、情報処理装置100が測定した処理時間を「「w/ fused-swap and gate fusion」の処理時間」と表記する場合がある。
【0171】
ゲートフュージョンの最適化は、同一の量子ビットを参照する複数のゲートが存在する場合、複数のゲートの表現行列を掛け合わせた表現行列を有するゲートで、複数のゲートを置き換えることにより、ベクトルの成分を更新する回数の低減化を図る手法である。
【0172】
また、「w/ fused-swap」の処理時間と、「w/ fused-swap and gate fusion」の処理時間との比較例として、「w/o opt.」の処理時間と、「w/ gate fusion」の処理時間とを採用する。
【0173】
「w/o opt.」の処理時間は、量子回路に対する最適化を行わない場合の処理時間である。「w/ gate fusion」の処理時間は、量子回路に対するゲートフュージョンを利用する従来の最適化を行う場合の処理時間である。次に、図23の説明に移行する。
【0174】
図23のグラフ2300は、「w/ fused-swap」の処理時間と、「w/ fused-swap and gate fusion」の処理時間と、「w/o opt.」の処理時間と、「w/ gate fusion」の処理時間とを示す。グラフ2300に示す通り、情報処理装置100は、処理時間を、「w/o opt.」および「w/ existing opt.」に比べて、約1/8に短縮することができる。
【0175】
図23のグラフ2310は、「w/ our opt.」の通信時間と、「w/ fused-swap and gate fusion」の通信時間と、「w/o opt.」の通信時間と、「w/ existing opt.」の通信時間とを示す。
【0176】
図23のグラフ2320は、「w/ our opt.」の通信量と、「w/ fused-swap and gate fusion」の通信量と、「w/o opt.」の通信量と、「w/ existing opt.」の通信量とを示す。グラフ2310,2320に示す通り、情報処理装置100は、通信時間および通信量を、「w/o opt.」および「w/ existing opt.」に比べて、低減することができる。
【0177】
(情報処理装置100の適用例)
情報処理装置100は、例えば、創薬分野に適用することができる。情報処理装置100は、具体的には、創薬分野において、物質の性質を解析するために、複数の量子ビットを利用して、物質を形成する原子の動きなどを模擬する際に適用することができる。
【0178】
(全体処理手順)
次に、図24を用いて、情報処理装置100が実行する、全体処理手順の一例について説明する。全体処理は、例えば、図3に示したCPU301と、メモリ302や記録媒体305などの記憶領域と、ネットワークI/F303とによって実現される。
【0179】
図24は、全体処理手順の一例を示すフローチャートである。図24において、情報処理装置100は、量子回路Iを取得する(ステップS2401)。情報処理装置100は、取得した量子回路Iに対応する非巡回有向グラフGを生成し、空の出力回路Cを生成する(ステップS2402)。
【0180】
情報処理装置100は、非巡回有向グラフGのそれぞれのノードnが表すゲートgのうち、まだ選択していないゲートgを選択する(ステップS2403)。情報処理装置100は、qubit順序σに基づいて、選択したゲートgが、実行可能であってプロセス間通信が発生しないという所定の条件を満たすか否かを判定する(ステップS2404)。
【0181】
ここで、所定の条件を満たさない場合(ステップS2404:No)、情報処理装置100は、ステップS2406の処理に移行する。一方で、所定の条件を満たす場合(ステップS2404:Yes)、情報処理装置100は、ステップS2405の処理に移行する。
【0182】
ステップS2405では、情報処理装置100は、選択したゲートgを表すノードnを、非巡回有向グラフGから除去し、qubit順序σに適合するよう、選択したゲートgを設定し、出力回路Cに追加する(ステップS2405)。情報処理装置100は、ステップS2406の処理に移行する。
【0183】
ステップS2406では、情報処理装置100は、非巡回有向グラフGのそれぞれのノードnが表すゲートgのうち、すべてのゲートgを選択したか否かを判定する(ステップS2406)。ここで、選択していないゲートgが残っている場合(ステップS2406:No)、情報処理装置100は、ステップS2403の処理に戻る。一方で、すべてのゲートgを選択している場合(ステップS2406:Yes)、情報処理装置100は、ステップS2407の処理に移行する。
【0184】
ステップS2407では、情報処理装置100は、非巡回有向グラフGと、qubit順序σとに基づいて、次のローカルな量子ビットの集合Qlocalを特定する(ステップS2407)。情報処理装置100は、特定した次のローカルな量子ビットの集合Qlocalに基づいて、量子ビットのグローバルとローカルとの区分情報σを更新する(ステップS2408)。情報処理装置100は、更新した量子ビットのグローバルとローカルとの区分情報σに適合するよう、グローバルとローカルとを入れ替える1以上のスワップゲートsを、出力回路Cに追加する(ステップS2409)。
【0185】
情報処理装置100は、非巡回有向グラフGが空であるか否かを判定する(ステップS2410)。ここで、非巡回有向グラフGが空ではない場合(ステップS2410:No)、情報処理装置100は、ステップS2403の処理に戻る。一方で、非巡回有向グラフGが空である場合(ステップS2410:Yes)、情報処理装置100は、ステップS2411の処理に移行する。
【0186】
ステップS2411では、情報処理装置100は、量子ビットのグローバルとローカルとの区分情報σを、初期状態に設定する(ステップS2411)。情報処理装置100は、量子ビットのグローバルとローカルとの区分情報σに適合するよう、グローバルとローカルとを入れ替える1以上のスワップゲートsを、出力回路Cに追加する(ステップS2412)。情報処理装置100は、全体処理を終了する。
【0187】
以上説明したように、情報処理装置100によれば、複数の量子ビットに関して、それぞれ異なる1以上の量子ビットに対して演算を実施することを表す複数のゲートを、時系列に沿って規定した第1量子回路を取得することができる。情報処理装置100によれば、取得した第1量子回路に基づいて、複数のゲートのそれぞれのゲートを表すノードと、異なるノードが表すゲート間の演算の実施順序を表す有向エッジとを含む非巡回有向グラフを生成することができる。情報処理装置100によれば、生成した非巡回有向グラフに基づいて、複数のゲートのうち、他のゲートに依存せずに実行可能な、それぞれプロセス間通信が発生する1以上の第1ゲートによって参照される1以上の量子ビットを特定することができる。情報処理装置100によれば、特定した1以上の量子ビットがローカルになるよう、ローカルな量子ビットとグローバルな量子ビットとを入れ替える1以上のスワップゲートを、1以上の第1ゲートの直前に含む第2量子回路を生成することができる。これにより、情報処理装置100は、プロセス間通信が発生する回数、または、通信量が抑制された第2量子回路を生成することができ、複数の量子ビットに関する一連の演算を実施し易くすることができる。
【0188】
情報処理装置100によれば、1以上の量子ビットを特定する都度、非巡回有向グラフに基づいて、複数のゲートのうち、他のゲートに依存せずに実行可能な、それぞれプロセス間通信が発生しない1以上の第2ゲートを特定することができる。情報処理装置100によれば、1以上の第2ゲートを特定する都度、非巡回有向グラフの中から、特定した1以上の第2ゲートのそれぞれの第2ゲートを表すノードを除去することができる。情報処理装置100によれば、1以上の量子ビットを特定する都度、雛型回路に対して、特定した1以上の量子ビットがローカルになるよう、ローカルな量子ビットとグローバルな量子ビットとを入れ替える1以上のスワップゲートを追加することができる。情報処理装置100によれば、1以上の第2ゲートを特定する都度、雛型回路に対して、特定した1以上の第2ゲートを追加することができる。これにより、情報処理装置100は、段階的に、第2量子回路を適切に生成していくことができる。
【0189】
情報処理装置100によれば、1以上の量子ビットを最初に特定する前に、非巡回有向グラフに基づいて、複数のゲートのうち、他のゲートに依存せずに実行可能な、それぞれプロセス間通信が発生しない1以上の第2ゲートを一度特定することができる。これにより、情報処理装置100は、1以上の第2ゲートを先頭に含むよう、第2量子回路を適切に生成することができる。
【0190】
情報処理装置100によれば、非巡回有向グラフが空である場合、雛型回路の末尾に、初期状態でローカルな1以上の量子ビットがローカルに戻るよう、1以上のスワップゲートを追加することができる。これにより、情報処理装置100は、第2量子回路を適切に生成することができる。
【0191】
情報処理装置100によれば、1以上の量子ビットを特定した際、特定した1以上の量子ビットに基づいて、入れ替える量子ビットの数が4以上であるか否かを判定することができる。情報処理装置100によれば、4以上であれば、雛型回路に対して、特定した1以上の量子ビットがローカルになるよう、フューズドスワップゲートを含む1以上のスワップゲートを追加することができる。これにより、情報処理装置100は、プロセス間通信が発生する回数、または、通信量の低減化を図ることができる。
【0192】
情報処理装置100によれば、非巡回有向グラフに基づいて、複数のゲートのうち、他のゲートに依存せずに実行可能な、プロセス間通信が発生するゲートを順に選択することができる。情報処理装置100によれば、ゲートを選択する都度、当該ゲートに関わる量子ビットを、グループに追加するという処理を、グループに含まれる量子ビットの数が、ローカルな量子ビットの上限を超えない範囲で繰り返し実施することができる。情報処理装置100によれば、グループに含まれる1以上の量子ビットを特定することができる。これにより、情報処理装置100は、1以上の量子ビットを適切に特定することができる。
【0193】
情報処理装置100によれば、非巡回有向グラフに基づいて、他のゲートに依存せずに実行可能な、ローカルな量子ビットの上限以下の1以上の量子ビットを参照する、プロセス間通信が発生するゲートの複数の組み合わせを特定することができる。情報処理装置100によれば、複数の組み合わせのうち、最も多くのゲートを含む組み合わせとなる、それぞれプロセス間通信が発生する1以上の第1ゲートによって参照される1以上の量子ビットを特定することができる。これにより、情報処理装置100は、1以上の量子ビットを適切に特定することができる。
【0194】
なお、本実施の形態で説明した情報処理方法は、予め用意されたプログラムをPCやワークステーションなどのコンピュータで実行することにより実現することができる。本実施の形態で説明した情報処理プログラムは、コンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。記録媒体は、ハードディスク、フレキシブルディスク、CD(Compact Disc)-ROM、MO(Magneto Optical disc)、DVD(Digital Versatile Disc)などである。また、本実施の形態で説明した情報処理プログラムは、インターネットなどのネットワークを介して配布してもよい。
【0195】
上述した実施の形態に関し、さらに以下の付記を開示する。
【0196】
(付記1)ローカルな1以上の量子ビットと、グローバルな1以上の量子ビットとを含む複数の量子ビットに関して、それぞれ異なる1以上の量子ビットに対して演算を実施することを表す複数のゲートを、時系列に沿って規定した第1量子回路を取得し、
取得した前記第1量子回路に基づいて、前記複数のゲートのそれぞれのゲートを表すノードと、異なるノードが表すゲート間の演算の実施順序を表す有向エッジとを含む非巡回有向グラフを生成し、
生成した前記非巡回有向グラフに基づいて、前記複数のゲートのうち、他のゲートに依存せずに実行可能な、ローカルな量子ビットの上限以下の1以上の量子ビットを参照する、それぞれプロセス間通信が発生する1以上の第1ゲートによって参照される、前記1以上の量子ビットを特定し、
特定した前記1以上の量子ビットがローカルになるよう、ローカルな量子ビットとグローバルな量子ビットとを入れ替える1以上のスワップゲートを、前記1以上の第1ゲートの直前に含む、前記第1量子回路と論理的に等価な第2量子回路を生成する、
処理をコンピュータに実行させることを特徴とする情報処理プログラム。
【0197】
(付記2)前記1以上の量子ビットを特定する都度、前記非巡回有向グラフに基づいて、前記複数のゲートのうち、他のゲートに依存せずに実行可能な、それぞれプロセス間通信が発生しない1以上の第2ゲートを特定し、
前記1以上の第2ゲートを特定する都度、前記非巡回有向グラフの中から、特定した前記1以上の第2ゲートのそれぞれの第2ゲートを表すノードを除去する、
処理を前記コンピュータに実行させ、
前記第2量子回路を生成する処理は、
前記1以上の量子ビットを特定する都度、雛型回路に対して、特定した前記1以上の量子ビットがローカルになるよう、ローカルな量子ビットとグローバルな量子ビットとを入れ替える1以上のスワップゲートを追加し、前記1以上の第2ゲートを特定する都度、前記雛型回路に対して、特定した前記1以上の第2ゲートを追加することにより、前記第2量子回路を生成する、ことを特徴とする付記1に記載の情報処理プログラム。
【0198】
(付記3)前記1以上の第2ゲートを特定する処理は、
前記1以上の量子ビットを最初に特定する前に、前記非巡回有向グラフに基づいて、前記複数のゲートのうち、他のゲートに依存せずに実行可能な、それぞれプロセス間通信が発生しない1以上の第2ゲートを一度特定する、ことを特徴とする付記2に記載の情報処理プログラム。
【0199】
(付記4)前記第2量子回路を生成する処理は、
前記非巡回有向グラフが空である場合、前記雛型回路の末尾に、初期状態でローカルな1以上の量子ビットがローカルに戻るよう、ローカルな量子ビットとグローバルな量子ビットとを入れ替える1以上のスワップゲートを追加することにより、前記第2量子回路を生成し、前記第2量子回路を生成する処理を終了する、ことを特徴とする付記3に記載の情報処理プログラム。
【0200】
(付記5)前記第2量子回路を生成する処理は、
前記1以上の量子ビットを特定した際、特定した前記1以上の量子ビットに基づいて、入れ替える量子ビットの数が4以上であれば、前記雛型回路に対して、特定した前記1以上の量子ビットがローカルになるよう、ローカルな量子ビットとグローバルな量子ビットとを入れ替える、フューズドスワップゲートを含む1以上のスワップゲートを追加する、ことを特徴とする付記2~4のいずれか一つに記載の情報処理プログラム。
【0201】
(付記6)前記1以上の量子ビットを特定する処理は、
前記非巡回有向グラフに基づいて、前記複数のゲートのうち、他のゲートに依存せずに実行可能な、プロセス間通信が発生するゲートを順に選択する都度、当該ゲートに関わる量子ビットを、グループに追加するという処理を、前記グループに含まれる量子ビットの数が、ローカルな量子ビットの上限を超えない範囲で繰り返し実施した後、前記グループに含まれる1以上の量子ビットを特定する、ことを特徴とする付記2~4のいずれか一つに記載の情報処理プログラム。
【0202】
(付記7)前記1以上の量子ビットを特定する処理は、
前記非巡回有向グラフに基づいて、前記複数のゲートのうち、他のゲートに依存せずに実行可能な、ローカルな量子ビットの上限以下の1以上の量子ビットを参照する、プロセス間通信が発生するゲートの複数の組み合わせのうち、最も多くのゲートを含む組み合わせとなる、それぞれプロセス間通信が発生する1以上の第1ゲートによって参照される1以上の量子ビットを特定する、ことを特徴とする付記2~4のいずれか一つに記載の情報処理プログラム。
【0203】
(付記8)ローカルな1以上の量子ビットと、グローバルな1以上の量子ビットとを含む複数の量子ビットに関して、それぞれ異なる1以上の量子ビットに対して演算を実施することを表す複数のゲートを、時系列に沿って規定した第1量子回路を取得し、
取得した前記第1量子回路に基づいて、前記複数のゲートのそれぞれのゲートを表すノードと、異なるノードが表すゲート間の演算の実施順序を表す有向エッジとを含む非巡回有向グラフを生成し、
生成した前記非巡回有向グラフに基づいて、前記複数のゲートのうち、他のゲートに依存せずに実行可能な、ローカルな量子ビットの上限以下の1以上の量子ビットを参照する、それぞれプロセス間通信が発生する1以上の第1ゲートによって参照される、前記1以上の量子ビットを特定し、
特定した前記1以上の量子ビットがローカルになるよう、ローカルな量子ビットとグローバルな量子ビットとを入れ替える1以上のスワップゲートを、前記1以上の第1ゲートの直前に含む、前記第1量子回路と論理的に等価な第2量子回路を生成する、
処理をコンピュータが実行することを特徴とする情報処理方法。
【0204】
(付記9)ローカルな1以上の量子ビットと、グローバルな1以上の量子ビットとを含む複数の量子ビットに関して、それぞれ異なる1以上の量子ビットに対して演算を実施することを表す複数のゲートを、時系列に沿って規定した第1量子回路を取得し、
取得した前記第1量子回路に基づいて、前記複数のゲートのそれぞれのゲートを表すノードと、異なるノードが表すゲート間の演算の実施順序を表す有向エッジとを含む非巡回有向グラフを生成し、
生成した前記非巡回有向グラフに基づいて、前記複数のゲートのうち、他のゲートに依存せずに実行可能な、ローカルな量子ビットの上限以下の1以上の量子ビットを参照する、それぞれプロセス間通信が発生する1以上の第1ゲートによって参照される、前記1以上の量子ビットを特定し、
特定した前記1以上の量子ビットがローカルになるよう、ローカルな量子ビットとグローバルな量子ビットとを入れ替える1以上のスワップゲートを、前記1以上の第1ゲートの直前に含む、前記第1量子回路と論理的に等価な第2量子回路を生成する、
制御部を有することを特徴とする情報処理装置。
【符号の説明】
【0205】
100 情報処理装置
110 第1量子回路
121~123,910~913,1010~1013,1510~1518,1610~1612,1700~1702,1801,1802,1910~1913,1930~1933 ゲート
130,1020,1520 非巡回有向グラフ
141~143,1030~1033,1530~1538 ノード
150 第2量子回路
160,930,950,1620,1810,1940,1960~1962 スワップゲート
200 情報処理システム
201 演算処理装置
202 クライアント装置
210 ネットワーク
300 バス
301 CPU
302 メモリ
303 ネットワークI/F
304 記録媒体I/F
305 記録媒体
400 記憶部
401 取得部
402 第1生成部
403 第1特定部
404 第2特定部
405 第2生成部
406 模擬部
407 出力部
500 ステートベクトル
510,900,920,940,1000,1500,1900,1920 量子回路
600 量子ビット列
710,711,720,721,800,1100,1200,1210,1300,1400,2000,2200 表
1600 出力回路
1630,1710,1950 フューズドスワップゲート
2100,2300,2310,2320 グラフ
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18
図19
図20
図21
図22
図23
図24