(57)【要約】  本明細書では、量子回路の機械可読の仕様を含んでいる入力量子回路のシミュレーションが説明される。各態様は、テンソル・スライシングのために識別された量子ビットの少なくとも２つのグループに基づいて入力量子回路を部分回路のグループに分割することを含み、この結果として得られた部分回路はテンソル・スライシングに使用される量子ビットの関連付けられたセットを含む。このシミュレーションは、１つの部分回路につき１つの段ずつ各段内で発生することができる。部分回路に関連付けられた量子ビットのセットは、入力量子状態回路のシミュレートされた量子状態テンソルを量子状態テンソル・スライスに分割するために使用でき、その部分回路内の量子ゲートは、量子状態テンソル・スライスを更新された量子状態テンソル・スライスに更新するために使用できる。更新された量子状態テンソル・スライスは、微小スライスとして二次ストレージに格納される。【選択図】図１
2021521504.tif 000002
【特許請求の範囲】
【請求項１】
システムであって、
量子回路の機械可読の仕様を含んでいる入力量子回路を、テンソル・スライシングのために識別された量子ビットの少なくとも２つのグループに基づいて部分回路に分割する分割コンポーネントであって、前記部分回路が、テンソル・スライシングに使用される量子ビットの関連付けられたセットを含んでいる、前記分割コンポーネントと、
前記部分回路に基づく各段内の前記入力量子回路を、１つの部分回路につき１つの段ずつ、シミュレートされた量子状態テンソルにシミュレートするシミュレーション・コンポーネントであって、部分回路に関連付けられた量子ビットのセットが、前記入力量子回路に対して前記シミュレートされた量子状態テンソルを量子状態テンソル・スライスに分割するために使用され、前記部分回路内の量子ゲートが、前記量子状態テンソル・スライスを更新された量子状態テンソル・スライスに更新するために使用される、前記シミュレーション・コンポーネントと、
前記シミュレートされた量子状態テンソルの前記更新された量子状態テンソル・スライスを、微小スライスとして二次ストレージに格納する読取り／書込みコンポーネントとを備えている、システム。
【請求項２】
前記読取り／書込みコンポーネントが、前記二次ストレージの少なくとも２つのディスク・セクタにわたるサイズを有する前記微小スライスを書き込み、前記さらに更新された量子状態テンソル・スライスを前記二次ストレージに格納する、請求項１に記載のシステム。
【請求項３】
前記読取り／書込みコンポーネントが、前記更新された量子状態テンソル・スライスを前記二次ストレージから取り出し、前記シミュレーション・コンポーネントが、別の部分回路を他の部分回路テンソルに処理し、前記二次ストレージから取り出された前記更新された量子状態テンソル・スライスを使用して、前記他の部分回路テンソルをさらに更新された量子状態テンソル・スライスに更新する、請求項１に記載のシステム。
【請求項４】
前記分割コンポーネントが、前記入力量子回路を、第１の量子ビット分割グループ、第２の量子ビット分割グループ、第３の量子ビット分割グループ、および第４の量子ビット分割グループを含んでいる、前記部分回路に対応する量子ビット分割グループに分割し、前記シミュレーション・コンポーネントが、前記第３の量子ビット分割グループの量子ゲートを前記第１の量子ビット分割グループおよび第２の量子ビット分割グループの前記テンソル・スライスに適用して、前記更新された量子状態テンソルを取得し、前記読取り／書込みコンポーネントが、前記更新された量子状態テンソル・スライスを前記二次ストレージからメモリに読み取り、前記シミュレーション・コンポーネントが、前記第４の量子ビット分割グループの量子ゲートを前記更新された量子状態テンソル・スライスに適用して、さらに更新された量子状態テンソルを取得する、請求項１に記載のシステム。
【請求項５】
プロセッサに動作可能なように結合されたデバイスによって、量子回路の機械可読の仕様を含んでいる入力量子回路を処理することを含んでいるコンピュータ実装方法であって、前記処理することが、
テンソル・スライシングのために識別された量子ビットの少なくとも２つのグループに基づいて、前記入力量子回路を部分回路のグループに分割することであって、前記部分回路のグループが、テンソル・スライシングに使用される量子ビットの関連付けられたセットを含んでいる、前記分割することと、
前記入力量子回路を、前記部分回路のグループに基づく各段内で、１つの部分回路につき１つの段ずつ、シミュレートされた量子状態テンソルにシミュレートすることであって、部分回路に関連付けられた量子ビットのセットが、前記入力量子回路に対して前記シミュレートされた量子状態テンソルを量子状態テンソル・スライスに分割するために使用され、前記部分回路内の量子ゲートが、前記量子状態テンソル・スライスを更新された量子状態テンソル・スライスに更新するために使用される、前記シミュレートすることと、
前記シミュレートされた量子状態テンソルの前記更新された量子状態テンソル・スライスを、微小スライスとして二次ストレージに格納することとを含んでいる、コンピュータ実装方法。
【請求項６】
前記シミュレートされた量子状態テンソルの前記更新された量子状態テンソル・スライスを微小スライスとして二次ストレージに前記格納することが、前記微小スライスを前記二次ストレージの少なくとも２つのディスク・セクタに格納することを含んでいる、請求項５に記載のコンピュータ実装方法。
【請求項７】
前記デバイスによって、別の部分回路を他の部分回路テンソルに処理することと、前更新された量子状態テンソル・スライスを前記二次ストレージから取り出すことと、二次ストレージから取り出された前記更新された量子状態テンソル・スライスを使用して前記他の部分回路テンソルをさらに更新された量子状態テンソル・スライスに更新することとをさらに含んでいる、請求項５に記載のコンピュータ実装方法。
【請求項８】
前記デバイスによって、前記さらに更新された量子状態テンソル・スライスを前記二次ストレージに格納することをさらに含んでいる、請求項７に記載のコンピュータ実装方法。
【請求項９】
前記入力量子回路を前記部分回路のグループに前記分割することが、前記入力量子回路を第１の部分回路分割グループ、第２の部分回路分割グループ、および第３の部分回路分割グループに分割することを含んでおり、前記更新された量子状態テンソル・スライスを前記格納することが、前記第３の部分回路分割グループのゲートを前記第１の部分回路分割グループおよび前記第２の部分回路分割グループに対応するテンソル・スライスに適用して前記更新された量子状態テンソル・スライスを取得することを含んでいる、請求項５に記載のコンピュータ実装方法。
【請求項１０】
前記入力量子回路を前記部分回路のグループに前記分割することが、前記入力量子回路を第４の部分回路分割グループに分割することをさらに含んでおり、前記更新された量子状態テンソル・スライスを前記二次ストレージから取り出すことをさらに含んでおり、前記二次ストレージから取り出された前記更新された量子状態テンソル・スライスを使用して、他の部分回路テンソルをさらに更新された量子状態テンソル・スライスに更新することが、前記第４の部分回路分割グループのゲートを適用することを含んでいる、請求項９に記載のコンピュータ実装方法。
【請求項１１】
プロセッサに動作可能なように結合されたデバイスによって、量子回路の機械可読の仕様を含んでいる入力量子回路をシミュレートすることを含んでいるコンピュータ実装方法であって、前記シミュレートすることが、
テンソル・スライシングのために識別された量子ビットの少なくとも２つのグループに基づいて、前記入力量子回路をメタ部分回路に分割することであって、前記メタ部分回路のうちの少なくとも１つが、単一のプロセッサのメモリを超える、前記分割することと、
メタ部分回路を単一のプロセッサの前記メモリ内に収まる下位部分回路にさらに分割することと、
前記下位部分回路に対してテンソルを計算することと、
テンソル・スライシングによって、前記テンソルをテンソル・スライスに縮小させることとを含んでいる、コンピュータ実装方法。
【請求項１２】
前記デバイスによって、別の部分回路のゲートを前記テンソル・スライスに適用して、量子状態データを表す更新されたテンソル・スライスを取得することと、前記更新されたテンソル・スライスを二次ストレージに格納することとをさらに含んでいる、請求項１１に記載のコンピュータ実装方法。
【請求項１３】
前記デバイスによって、前記更新されたテンソル・スライスを二次ストレージから取り出すことと、さらに他の部分回路のゲートを前記更新されたテンソル・スライスに適用して、さらに更新されたテンソル・スライスを取得することとをさらに含んでいる、請求項１２に記載のコンピュータ実装方法。
【請求項１４】
二次ストレージが、１つまたは複数のディスク・デバイスを備えており、メタ・スライスを微小スライスに構造化することをさらに含んでおり、前記微小スライスのサイズが、前記二次ストレージの少なくとも２つのディスク・セクタにわたり、前記更新されたテンソル・スライスを前記二次ストレージに前記格納することが、前記微小スライスを格納することを含んでいる、請求項１１に記載のコンピュータ実装方法。
【請求項１５】
量子回路の機械可読の仕様を含んでいる入力量子回路を含む量子回路をシミュレートするためのコンピュータ・プログラム製品であって、前記コンピュータ・プログラム製品が、プログラム命令が具現化されている１つまたは複数のコンピュータ可読ストレージ媒体を備えており、前記プログラム命令が、前記プロセッサに、請求項５ないし１４のいずれかに記載の方法を実行させるために、処理コンポーネントによって実行可能である、コンピュータ・プログラム製品。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、量子コンピューティングに関連しており、より詳細には、量子回路をシミュレートすることに関連している。量子情報処理（量子コンピューティング）は、従来の機械計算では解決困難な特定のカテゴリの数学的問題を解決する可能性がある。量子コンピュータは、情報をエンコードするために量子ビット（quantum bits）（量子ビット（qubits））を採用し、ここで、量子ビットは量子情報の基本単位である。量子回路は、量子ビットの重ね合わせおよび量子ビットのもつれなどの、量子力学的現象に基づく。
【背景技術】
【０００２】
量子コンピューティングの潜在的利益にもかかわらず、量子回路は、構築するのが困難であり、高額な費用を要し、スケーリングおよび量子デコヒーレンスなどのさまざまな問題を抱えている。したがって、回路の忠実性を定量化し、測定された結果に対して量子状態の振幅を計算する能力に基づく正しさ、性能、およびスケーリングを評価することなどのために、市販されている従来の（非量子）コンピュータを使用した量子回路のシミュレーションが採用されている。しかし、量子ビットの数と共に振幅の数が指数関数的に増大するため、既存の手法を使用して、測定された結果に対して量子状態の振幅を計算することは、急速に解決困難になり、強力なスーパーコンピュータ上でさえ、使用可能なコンピューティング・リソースを圧倒する。実際、１つの最近の公開文献であるBOIXO, et al., "Characterizing quantum supremacy in near-term devices," ARTICLES, Nature Physics (2018), doi:10.1038/s41567-018-0124-xでは、「７×７の量子ビットおよび約４０サイクルの深さを有する回路の出力振幅の計算は、現在実行不可能である」と述べられている。したがって、量子回路シミュレーションは、比較的少数の量子ビットおよび浅い回路の深さを有する回路に制限されてきた（回路の深さは、任意の特定の層で、多くても１つのゲートが特定の１量子ビットに作用するような方法で回路を分割できる、層の数である）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】米国特許出願第１５／７１３，３２３号
【非特許文献】
【０００４】
【非特許文献１】BOIXO, et al., "Characterizing quantum supremacy in near-term devices," ARTICLES, Nature Physics (2018),doi:10.1038/s41567-018-0124-x
【非特許文献２】Thomas Haner and Damian S Steiger, “0.5 petabyte simulation of a 45-qubit quantum circuit,” arXiv preprint arXiv:1704.01127, (2017)
【非特許文献３】Riling Li, Bujiao Wu, Mingsheng Ying, Xiaoming Sun, and Guangwen Yang, “Quantum Supremacy Circuit Simulation on Sunway TaihuLight,”arXiv preprint arXiv:1804.04797, (2018)
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本発明は、量子回路をシミュレートすることを目的とする。
【課題を解決するための手段】
【０００６】
以下に、本発明の１つまたは複数の実施形態の基本的理解を可能にするための概要を示す。この概要は、主要な要素または重要な要素を特定するように意図されておらず、また本発明の特定の実施形態の任意の範囲または特許請求の範囲の任意の範囲を正確に説明するように意図されていない。この概要の唯一の目的は、後で提示されるより詳細な説明のための前置きとして、概念を簡略化された形態で提示することである。
【０００７】
本発明の一実施形態によれば、システムは、量子回路の機械可読の仕様を含んでいる入力量子回路を、テンソル・スライシング（tensor slicing）のために識別された量子ビットの少なくとも２つのグループに基づいて部分回路に分割する、分割コンポーネントを備え、これらの部分回路は、テンソル・スライシングに使用される量子ビットの関連付けられたセットを含む。シミュレーション・コンポーネントは、部分回路に基づく各段内の入力量子回路を、１つの部分回路につき１つの段ずつ、シミュレートされた量子状態テンソル（quantum state tensor）にシミュレートし、部分回路に関連付けられた量子ビットのセットが、入力量子回路に対してシミュレートされた量子状態テンソルを量子状態テンソル・スライス（quantum state tensor slices）に分割するために使用され、その部分回路内の量子ゲートが、量子状態テンソル・スライスを更新された量子状態テンソル・スライスに更新するために使用される。読取り／書込みコンポーネントは、シミュレートされた量子状態テンソルの更新された量子状態テンソル・スライスを、微小スライスとして二次ストレージに格納する。
【０００８】
読取り／書込みコンポーネントは、二次ストレージの少なくとも２つのディスク・セクタにわたるサイズを有する微小スライスを書き込んでよい。読取り／書込みコンポーネントは、更新された量子状態テンソル・スライスを二次ストレージからさらに取り出してよく、シミュレーション・コンポーネントは、別の部分回路を他の部分回路テンソル（sub-circuit tensors）に処理し、二次ストレージから取り出された更新された量子状態テンソル・スライスを使用して、他の部分回路テンソルをさらに更新された量子状態テンソル・スライスに更新してよい。
【０００９】
本発明の一実施形態によれば、コンピュータ実装方法が、量子回路の機械可読の仕様を含んでいる入力量子回路を処理することを含む。この処理することは、テンソル・スライシングのために識別された量子ビットの少なくとも２つのグループに基づいて、入力量子回路を部分回路のグループに分割することを含み、これらの部分回路のグループは、テンソル・スライシングに使用される量子ビットの関連付けられたセットを含む。入力量子回路をシミュレートされた量子状態テンソルにシミュレートすることは、１つの部分回路につき１つの段ずつ、部分回路のグループに基づく各段内で発生し、部分回路に関連付けられた量子ビットのセットが、入力量子回路に対してシミュレートされた量子状態テンソルを量子状態テンソル・スライスに分割するために使用され、部分回路内の量子ゲートが、量子状態テンソル・スライスを更新された量子状態テンソル・スライスに更新するために使用される。この方法は、シミュレートされた量子状態テンソルの更新された量子状態テンソル・スライスを、微小スライスとして二次ストレージに格納することを含む。
【００１０】
１つまたは複数の実施形態によれば、量子回路の機械可読の仕様を含んでいる入力量子回路を含む量子回路をシミュレートするためのコンピュータ・プログラム製品が提供される。この製品は、コンピュータ可読ストレージ媒体と、ストレージ媒体に格納されたプログラム命令とを備える。これらのプログラム命令は、プロセッサに、テンソル・スライシングのために識別された量子ビットの少なくとも２つのグループに基づいて入力量子回路を部分回路のグループに分割させるために、処理コンポーネントによって実行可能であり、これらの部分回路のグループは、テンソル・スライシングに使用される量子ビットの関連付けられたセットを含む。さらに命令は、部分回路のグループに基づく各段内の入力量子回路を、１つの部分回路につき１つの段ずつ、シミュレートされた量子状態テンソルにシミュレートし、部分回路に関連付けられた量子ビットのセットが、入力量子回路に対してシミュレートされた量子状態テンソルを量子状態テンソル・スライスに分割するために使用され、部分回路内の量子ゲートが、量子状態テンソル・スライスを更新された量子状態テンソル・スライスに更新し、入力量子状態回路に対してシミュレートされた量子状態テンソルの更新された量子状態テンソル・スライスを微小スライスとして二次ストレージに格納するために使用される。
【００１１】
さらに命令は、別の部分回路を他の部分回路テンソルに処理することと、更新された量子状態テンソル・スライスを二次ストレージから取り出すことと、二次ストレージから取り出された更新された量子状態テンソル・スライスを使用して他の部分回路テンソルをさらに更新された量子状態テンソル・スライスに更新することとを含んでよい。シミュレートされた量子状態テンソルの更新された量子状態テンソル・スライスを微小スライスとして二次ストレージに格納することは、微小スライスを二次ストレージの少なくとも２つのディスク・セクタに格納することを含んでよい。
【００１２】
１つまたは複数の実施形態によれば、少なくとも２つのプロセッサに動作可能なように結合されたデバイスによって実行可能なコンピュータ実装方法が、量子回路の機械可読の仕様を含んでいる入力量子回路をシミュレートすることを含む。このシミュレートすることは、テンソル・スライシングのために識別された量子ビットの少なくとも２つのグループに基づいて、入力量子回路をメタ部分回路（meta sub-circuits）に分割することを含み、これらのメタ部分回路のうちの少なくとも１つが、単一のプロセッサのメモリを超える。この方法は、メタ部分回路を単一のプロセッサのメモリ内に収まる下位部分回路にさらに分割することと、下位部分回路に対してテンソルを計算することと、テンソル・スライシングによって、テンソルをテンソル・スライスに縮小させることとを含む。
【００１３】
この方法は、別の部分回路のゲートをテンソル・スライスに適用して、量子状態データを表す更新されたテンソル・スライスを取得することと、更新されたテンソル・スライスを二次ストレージに格納することとをさらに含んでよい。この二次ストレージは、１つまたは複数のディスク・デバイスを備えることができ、この方法は、量子状態データを微小スライスに構造化することをさらに含んでよく、この微小スライスのサイズは、二次ストレージの少なくとも２つのディスク・セクタにわたる。
【００１４】
１つまたは複数の実施形態によれば、量子回路の機械可読の仕様を含んでいる入力量子回路を含む量子回路をシミュレートするためのコンピュータ・プログラム製品が提供される。この製品は、コンピュータ可読ストレージ媒体と、ストレージ媒体に格納されたプログラム命令とを備える。これらのプログラム命令は、プロセッサに、テンソル・スライシングのために識別された量子ビットの少なくとも２つのグループに基づいて、入力量子回路をメタ部分回路に分割させるために、処理コンポーネントによって実行可能であり、これらのメタ部分回路のうちの少なくとも１つが、単一のプロセッサのメモリを超える。これらのプログラム命令は、メタ部分回路を単一のプロセッサのメモリ内に収まる下位部分回路にさらに分割し、下位部分回路に対してテンソルを計算し、テンソル・スライシングによって、テンソルをテンソル・スライスに縮小させる。
【図面の簡単な説明】
【００１５】
【図１】本発明の一実施形態に従って、本明細書に記載された技術に基づいて量子回路のシミュレーションを実装するためのコンポーネントのブロック図である。
【図２】本発明の一実施形態に従って、本明細書に記載された技術に基づいて量子回路をシミュレートするためのフロー図である。
【図３】本発明の一実施形態に従って、単一のプロセッサのメモリに広がる量子状態データのテンソル・スライスを含んでおり、さらなるテンソル・スライシングおよび処理のために、単一のプロセッサのメモリ内に収まる下位部分回路に分割された対応するメタ部分回路を含んでいる、メタ・スライスの表現である。
【図４】本発明の一実施形態に従う、ランダムに生成された量子回路のクラスに通常は属する深さ５５の４９量子ビットの量子回路の表現である。
【図５】本発明の一実施形態に従う、量子回路シミュレーションのために分割された深さ５５の４９量子ビットの量子回路の表現である。
【図６】本発明の一実施形態に従う、量子回路シミュレーションのために分割された深さ８３の４９量子ビットの量子回路の表現である。
【図７】本発明の一実施形態に従う、量子回路シミュレーションのために分割された深さ８３の４９量子ビットの量子回路の表現である。
【図８】本発明の一実施形態に従う、量子回路シミュレーションのために分割された深さ１１１の４９量子ビットの量子回路の表現である。
【図９】本発明の一実施形態に従う、量子回路シミュレーションのために分割された深さ１１１の４９量子ビットの量子回路の表現である。
【図１０】本発明の一実施形態に従う、量子回路分割動作のフロー図である。
【図１１】本発明の一実施形態に従う、一連の量子回路分割動作のフロー図である。
【図１２】本発明の一実施形態に従う、図１１の量子回路分割動作の追加の詳細のフロー図である。
【図１３】本発明の一実施形態に従う、量子回路の事前分割最適化の図である。
【図１４】本発明の一実施形態に従う、量子回路の事前分割最適化の図である。
【図１５】本発明の一実施形態に従う、量子回路の事前分割最適化の図である。
【図１６】本発明の一実施形態に従う、量子回路実行動作のフロー図である。
【図１７】本発明の一実施形態に従う、図１６の量子回路実行動作の追加の詳細のフロー図である。
【図１８】本明細書に記載された技術のさまざまな態様を実装するためのシステムのブロック図である。
【図１９】本明細書に記載された技術のさまざまな態様を実装するためのコンピュータ実装方法のブロック図である。
【図２０】本明細書に記載された技術のさまざまな態様を実装するための別のコンピュータ実装方法のブロック図である。
【図２１】本明細書に記載された本発明の１つまたは複数の実施形態を容易にすることができる動作環境のブロック図である。
【発明を実施するための形態】
【００１６】
以下の詳細な説明は、単に例にすぎず、本発明の実施形態、または本発明の実施形態の適用もしくは使用、あるいはその両方を制限するように意図されていない。さらに、先行するセクションまたは「発明を実施するための形態」のセクションで提示された、いずれかの明示されたか、または暗示された情報によって制約されるという意図はない。
【００１７】
ここで、図面を参照して本発明の１つまたは複数の実施形態が説明され、図面全体を通じて、類似する参照番号が、類似する要素を参照するために使用されている。以下の説明では、説明の目的で、本発明の実施形態を十分に理解できるように、多数の特定の詳細が示されている。しかし、これらの特定の詳細がなくても、さまざまな事例において、本発明の実施形態が実践され得るということは明らかである。
【００１８】
さらに、本発明は特定の例示的なアーキテクチャに関して説明されるが、本発明の範囲内で、他のアーキテクチャ、構造、または動作、あるいはその組合せに変更できるということが理解されるべきである。
【００１９】
本明細書において説明されているように、従来のコンピュータ上でシミュレートされる「入力量子回路」が、実際には量子回路の機械可読の仕様のことを指すということが、理解されるべきである。量子ビットなどの要素が別の要素に結合されているか、または接続されていると見なされる場合、その要素は他の要素に直接結合または接続されているか、あるいは存在することがある１つまたは複数の介在する要素によって、他の要素に間接的に結合または接続されている可能性があるということも理解されるであろう。これに対して、ある要素が「直接」結合または接続されていると見なされる場合、およびそのように見なされるときにのみ、介在する要素が存在せず、すなわち、ある要素が別の要素に「直接接続されている」か、または「直接結合されている」と見なされる場合、およびそのように見なされるときにのみ、介在する要素が存在しない。
【００２０】
本明細書における本原理の「１つの実施形態」または「一実施形態」およびその他のそれらの変形への言及は、実施形態に関連して説明される特定の特徴、構造、特性などが、本発明の少なくとも１つの実施形態に含まれることを意味している。したがって、本明細書全体のさまざまな場所に現れる「１つの実施形態では」または「一実施形態では」という語句、あるいは任意のその他の変形は、必ずしもすべてが同じ実施形態を参照しているわけではない。
【００２１】
既存の量子回路シミュレーションに伴う問題は、量子回路をシミュレートするために大量のメモリが必要になるということであり、メモリ制限のため、通常、４９量子ビットを超えるのは不可能であるか、または少なくとも実用的ではないと考えられている。より詳細には、量子ビットの７×７配列は、４９量子ビットの可能性のある状態を表すために２４９個のメモリ値を必要とし、２つの８バイト浮動小数点値を使用して（複素数の）量子ビット状態情報を格納する場合、８ペタバイトのストレージが必要であり、５６量子ビット回路は１エクサバイトのストレージを必要とする。
【００２２】
本明細書では、テンソル・スライシング手法と共に、量子シミュレーションにおいて量子状態を表すためにテンソルを使用することが説明されており、これによって、メイン・メモリ内で量子状態全体を具体化することを必要とせずに、スライス内で回路の量子状態を計算できるようにする。本明細書では、計算が相対的に大きいテンソル・スライスに構造化されることが、さらに説明される。なおさらに、理解されるように、量子状態をメモリ内の妥当な回路の深さまで計算した後に、二次ストレージが使用され、ここで、相対的に大きいテンソル・スライスのため、二次ストレージの使用が効率的になり得る。さらに、本明細書では、量子回路分割における選択をデータ構造化の選択と組み合わせることに基づいて、二次ストレージの効率的使用が説明され、この効率的使用によって、二次ストレージに対する全体的な読取り／書込みサイクルの数、ならびに読取りおよび書込みが実行される効率を同時に最適化する。
【００２３】
「二次ストレージ」（または階層型ストレージ）が、本明細書において説明されているように、少なくとも１つのレベルの二次ストレージを含むということに注意するべきである。理解されるように、本明細書に記載されたフレームワークは、１つ（二次）または複数のレベルのストレージに対処するように一般化され得る。任意のそのようなストレージ・レベルは、それ自身の容量およびアクセス特性を含むことができ、これらが、シミュレーション計算およびストレージ割当てにおいて考慮され得る。したがって、本明細書に記載された技術は、どの物理的ハードウェアまたはストレージ・デバイスの種類にも限定されず、データを微小スライスに構造化するための、データをハードウェア・デバイス間でブロック単位で転送できるようにする任意のデバイスまたはデバイスの組合せを使用することができる。
【００２４】
本明細書において使用されるとき、（例えば、量子部分回路に関して）「シミュレートする」および「実行する」という用語は、（何かの現実の単なる近似である多くのシミュレーションとは対照的に）本明細書で開示された量子回路シミュレーション手法が、現実の計算的に有効な結果をもたらすという点において、基本的に同義語である。本明細書において使用されるとき、「インデックス変数」または同様の語句は、目的のデータまたはメモリ位置あるいはその両方にアクセスすることをもたらす任意の種類のメモリ・アドレス指定またはインデックス付与のことを指す。
【００２５】
本明細書で開示された本発明の実施形態の少なくとも一部は、通常仮定されるメモリより少ないメモリを使用して量子回路がシミュレートされてよいということを認識する。例えば、本明細書で開示された本発明の実施形態の少なくとも一部は、Ｘ量子ビットを含んでいる量子回路を表してシミュレートするために必要なメモリを、２Ｘ個の複素数値からその量のごく一部に縮小する。より詳細には、本明細書で開示された本発明の実施形態の少なくとも一部は、量子回路素子を部分回路のうちの２つ以上にもつれさせることによって、量子回路が部分回路に分割されてよいということを認識する。本明細書で開示された本発明の実施形態の少なくとも一部は、一部の部分回路のシミュレーション結果がスライス内で計算されてよく、そうすることによって、量子回路全体をシミュレートするために必要な作業メモリを、従来の予想と異なり、大幅に削減できるということをさらに認識する。
【００２６】
ここで、類似する番号が同じ要素または類似する要素を表している各図面を参照すると、図１は、本明細書に記載された技術が実装され得る一般的なシステム１００を示している。図１の例では、プロセッサ１０２、メモリ１０４、および二次ストレージ１０６が、従来の（非量子）コンピュータ（スーパーコンピュータであってよい）の形態で提供されている。分割コンポーネント１０８は、入力量子回路（すなわち、シミュレーション用の量子回路の機械可読の仕様）を処理して、入力量子回路を、本明細書において説明されているように、テンソル（配列）として表されたメモリ１０４内の部分回路に分割する。
【００２７】
テンソル・スライシング・コンポーネント１１０は、メモリ１０４内のテンソルをスライスし、シミュレーション・コンポーネント１１２は、例えばゲートを適用して、各段内の入力量子回路を、１つの部分回路につき１つの段ずつシミュレートし、入力量子状態回路のシミュレートされた量子状態テンソルを提供する。二次ストレージ（との）読取り／書込みコンポーネント１１４は、入力量子状態回路のシミュレートされた量子状態テンソルのスライスを二次ストレージに格納し、入力量子状態回路のシミュレートされた量子状態テンソルのスライスを二次ストレージ１０６から取り出し、テンソル・スライシングに使用される結合された量子ビットに従って、二次ストレージを微小スライスに構造化し、量子ビットの特定のセットのスライスが、複数の微小スライスとして格納され、取り出される。
【００２８】
図２は、図１のコンポーネントの例示的な動作を要約している。動作２０２は、入力量子回路（の機械可読の仕様）を受信することを表している。動作２０４は、入力量子回路を解析して、テンソル・スライシングに使用される量子ビットの少なくとも２つのグループを識別する。動作２０６は、量子ビットのグループに基づいて、入力量子回路を複数の部分回路に分割し、このようにして結果として得られたすべての部分回路は、テンソル・スライシングに使用される量子ビットの関連付けられたセットを含む。
【００２９】
動作２０８は、各段内の入力量子回路を、１つの部分回路につき１つの段ずつシミュレートすることを表している。部分回路に関連付けられた量子ビットのセットが、入力量子状態回路のシミュレートされた量子状態テンソルをスライスに分割するために使用され、その部分回路内の量子ゲートが、スライスを更新するために適用される。
【００３０】
動作２１０は、入力量子状態回路のシミュレートされた量子状態テンソルのスライスを二次ストレージ１０６（図１）に格納することを表している。動作２１２は、入力量子状態回路のシミュレートされた量子状態テンソルのスライスを二次ストレージ１０６から取り出すことを表している。動作２１４は、テンソル・スライシングに使用される量子ビットの結合されたセットに従って、二次ストレージを微小スライスに構造化することを表しており、量子ビットの特定のセットのスライスが、微小スライスのセットとして格納され、取り出される。
【００３１】
本明細書において説明されているように、二次ストレージのコストを最小限に抑えるために、計算が、「メタ」スライスと呼ばれるかなり大きいテンソル・スライスに構造化される。一般に、テンソル・スライスが大きくなるほど、二次ストレージに対する必要な読取り／書込みサイクルが少なくなる。図３に表されているように、「メタ」スライス３３０は、集合体メイン・メモリ１０４内に収まることができる必要があるが、必ずしも、単一のプロセッサ（処理ノード）のメモリ（例えば、プロセッサ１  ３０２（１）の場合、プロセッサ１のメモリ３０４（１））内に収まる必要はない。各「メタ」部分回路内のゲートを適用する際の通信を最小限に抑えるために、各下位部分回路をプロセッサ間スライシングに使用して、既知のテンソル・スライシング戦略（図１のテンソル・スライシング・コンポーネント１１０の部分のインスタンス３３４（１）〜３４４（ｎ））を適用できるように、次に、対応する「メタ」部分回路３３２が、（例えば、図１の分割コンポーネント１０８によって）下位部分回路３３４（１）〜３４４（ｎ）にさらに分割される。
【００３２】
例えば、計算において、１つの公開されている方法（Thomas Haner and Damian S Steiger, “0.5 petabyte simulation of a 45-qubit quantum circuit,” arXiv preprint arXiv:1704.01127, (2017)）を適用できる。この参考文献では、部分回路内のすべてのゲートを適用して、処理ノード間で量子状態情報を通信せずにスライスごとに量子状態テンソルを更新できるように、回路が分割される。この参考文献では、回路分割およびテンソル・スライシングに関して、「グローバル」量子ビットが、スライスされているテンソル・インデックスに対応する処理ノード全体にインデックスを付与するために使用され、「ローカル」量子ビットが、各処理ノードに格納されたテンソル・スライスにインデックスを付与するために使用されているテンソル・インデックスに対応する。部分回路内のすべての非対角ゲート（non-diagonal gates）が「ローカル」量子ビットのみに適用されている場合、通信なしでの更新が可能である。事実上、回路は、「ローカル」量子ビットの異なるサブセットを選択し、対応する部分回路を生成するためにどのゲートを適用できるかを解析することによって、分割される。シミュレーション中に、シミュレーションがある部分回路から別の部分回路に切り替わるときにのみ、処理ノード間で通信が発生する。これらの通信フェーズの間に、次にシミュレートされる部分回路の必要性に従って、処理ノード全体に「グローバルに」インデックスを付与し、一方、個々のノードのメモリ内で「ローカルに」インデックスを付与するために、インデックスの新しいサブセットが使用されるように、量子状態テンソルのメモリ・レイアウトが再編成される。
【００３３】
これに対して、本明細書では回路分割が説明され、この回路分割では、結果として得られたテンソルが二次ストレージに格納され、結果として得られたテンソルの「メタ」スライスを使用可能な集合体メモリに読み込み、部分回路のゲートをこれらのメタ・スライスに適用し、その後、更新されたメタ・スライスを二次ストレージに再び書き込むことによって、量子状態が部分回路ごとに更新される。それにもかかわらず、メタ・スライスの対応するサブスライスが個々のプロセッサのメモリ内に収まるように、各部分回路を下位部分回路にさらに分割することによって、前述の公開された方法が、ある程度、活用され得る。
【００３４】
本明細書において図１０〜図１７を参照して説明される回路分解方法は、初めて二次ストレージに書き込むことが必要になる前に、完全にメモリ内で量子状態を妥当な深さまで計算することによって、プロセス全体をブートストラップするために使用され得る。例として、図５は、回路の深さ２７まで４９量子ビットをシミュレートするための分割（例えば、２０１７年９月２２日に出願された米国特許出願第１５／７１３，３２３号において説明されているように）を回路の深さ５５に拡張できる方法を、ストレージの１読取り／書込みサイクルで表している。下で説明される図６および図７は、回路の深さ２７まで４９量子ビットをシミュレートするための分割を回路の深さ８３に拡張できる方法を、ストレージの２読取り／書込みサイクルで表しており、図８および図９は、回路の深さ２７まで４９量子ビットをシミュレートするための分割を回路の深さ１１１に拡張できる方法を、ストレージの３読取り／書込みサイクルで表しているなどのように、任意の深さまで同様に拡張可能である。
【００３５】
図４の例は、通常は、ランダムに生成された量子回路のクラスに属する４９量子ビット、深さ５５の量子回路を示している。この例では、量子ビットが７×７配列に配置されている。特定の７×７の正方形は、時間のスライス、および量子ビットに適用されるゲート（例えば、各レベルで適用されるゲート）を表している（左端に、レベル（例えば、０、９、１７、…４９）が示されている）。レベル０は、初期化レベルである。黒い点の対（各対が、灰色の背景に囲まれている）は、制御Ｚ（ＣＺ：controlled-Z）ゲートを表している。白い背景を有する他の灰色の点は、さまざまな単一量子ビット・ゲートを表している。
【００３６】
図５は、図４に示されている回路の部分回路への分割およびスライシングを示しており、これによって、量子回路を、現在使用可能なコンピューティング・システム上でシミュレートできるようにする。理解されるように、本明細書において説明されているように、複数のレベルの粒度（例えば、テンソルのメタ・スライスから微小スライスまで）が、任意の回路の深さまでのシミュレーションを可能にする。
【００３７】
図５の分割方式では、特定の正方形は、７×７量子ビットの配列の時間のスライス、および量子ビットに適用されるゲート（例えば、各レベルで適用されるゲート）を表している（左端に、レベル（例えば、０、９、１７、…４９）が示されている）。レベル０は、初期化レベルである。
【００３８】
図５のこの例では、量子回路の量子ビット（ゲートに対応する）には、１〜４の番号でラベルが付けられている。番号「１」（濃い灰色の背景の上）で識別される量子ビットは、１つの部分回路に属するゲートを表し、番号「２」（非常に薄い灰色の背景を有する）で識別される量子ビットは、別の部分回路に属するゲートを表し、番号「３」（中間の灰色から濃い灰色までの背景を有する）で識別される量子ビットは、第３の部分回路に属するゲートを表し、番号「４」（薄い灰色から中間の灰色までの背景を有する）で識別される量子ビットは、第４の部分回路に属するゲートを表す。部分回路（例えば、１および２によって識別される）をもつれさせることができ、ここで、ブリッジ・ゲートは、制御Ｚ（ＣＺ）ゲートである（ここで、量子ビットのうちの１つが、パウリＺ演算が他の量子ビットに適用されるかどうかを決定する）。例えば、回路をシミュレートする能力に影響を与えることなく、これらのＣＺゲートを、いずれかの部分回路に割り当てることができ、例えば図５に示されているように、最下部の部分回路に任意に割り当てることができる。
【００３９】
量子ビット番号付けは（陰影付けと共に）、テンソルの縮小およびスライシングのために部分回路間でゲートを分割する１つの方法を示している。一般に、このプロセスは、最初に深さ２７まで動作し、量子ビットの最後の７行の値にわたってループして、計算を適用する。図５の例では、レベル２７を超えて広がるために、二次ストレージが使用される。すなわち、分割は、３として識別された量子ビット／ゲートに適用され、その後、４として識別された量子ビット／ゲートに適用される。
【００４０】
より詳細には、図５の例では、部分回路１および２のテンソルが、既知の方法で計算される。７量子ビットの最下部の行をスライスすることによって、２つの結果として得られたテンソルが６４ＴＢのスライスに縮小される。２のラベルが付けられた量子ビットに対応する量子ビットの最下部の行が、第１のフェーズ（フェーズ１）でスライスされる（強調するために、２のラベルが付けられた量子ビットの最後の行は、ラベル付きの行５４１である）。３のラベルが付けられた量子ビットに対応する量子ビットの最上部の行が、第２のフェーズ（フェーズ２）でスライスされる（強調するために、３のラベルが付けられた量子ビットの最上部の行は、ラベル付きの行５４２である）。
【００４１】
部分回路３内のゲートが各スライスに適用されるが、この場合、部分回路３が深さ２７を超えて深さ５５まで広がり、更新されたスライスがストレージに送信される。部分回路４の場合、最上部の７量子ビットをスライスして、６４ＴＢのスライスがストレージから取り出され、更新されたスライスがストレージに返送される。
【００４２】
図６〜図９に関しては、部分回路５の場合、最下部の７量子ビットが再度スライスされ、ストレージから取り出された６４ＴＢのスライスを生成し、その後、更新されたスライスがストレージに返送される。図６および図７（回路の深さ８３）では、量子ビットの最下部の行も、第３のフェーズ（フェーズ３）でスライスされる（最後の行に、６４３のラベルが付けられている）。部分回路６の場合、最上部の７量子ビットがスライスされて、ストレージから６４ＴＢのスライスを取り出し、更新されたスライスが処理されるか、またはストレージに再び返送される。図８および図９（回路の深さ１１１）では、量子ビットの最下部の行が第３のフェーズ（フェーズ３）でスライスされ、量子ビットの最上部の行が第４のフェーズ（フェーズ４）でスライスされる（最上部の行に、７４４のラベルが付けられている）。
【００４３】
したがって、本明細書に記載された技術は、二次ストレージを活用することによって、７×７量子ビット、深さ２７のランダムな回路の分割をより大きい深さに拡張すると同時に、読取り／書込みサイクルの数を最小限に抑えることを可能にする。この分割方式を使用して、既知の方法で生成された７×７量子ビット、深さ５５のランダムな回路を、１読取り／書込みサイクル（図５）のみを使用してシミュレートすることができ、７×７量子ビット、深さ５８３のランダムな回路を、２読取り／書込みサイクル（図６および図７）のみを使用してシミュレートすることができるなどのように、少なくとも深さ１１１（図８および図９）までシミュレートすることができる。
【００４４】
深さ５５の回路の場合、部分回路１および２のテンソルが最初に計算され、結果として得られたテンソルの対が、一度に１スライスずつ、縮小される。スライシングは、部分回路１のテンソルを使用して縮小を実行する前に、量子ビット４３〜４９の可能性のある値にわたってループし、これらの値に対して部分回路２のテンソルをスライスすることによって進む。次に、１２８個の結果として得られた縮小スライスごとに、図５の部分回路３に属するゲートが縮小結果に適用され、結果として得られた更新されたスライスが、二次ストレージに転送される。スライスし、縮小し、ゲートを適用し、そして二次ストレージへ結果を送信することというこのプロセスが、この例では１２８回（量子ビット４３〜４９の１２８個の可能性のある値ごとに１回）繰り返される。
【００４５】
深さ５５のシミュレーションを完了するために、図５の部分回路４に属する深さ５５までのゲートが、二次ストレージに転送された中間結果に適用される。これらのゲートの適用は、今回は量子ビット１〜７に対してスライスする各スライスにおいて、同様に実行され得る。二次ストレージからの取り出しが確実に効率的に実行されることを保証するために、データを、量子ビット１〜７および４３〜４９の値によってインデックス付けされた２１４個の微小スライスとして、二次ストレージ内で構造化することができ、各微小スライスは、量子ビット８〜４２に対応する２３５個の複素振幅を含む。したがって、部分回路３内のゲートを適用する前述したフェーズでは、スライスされている量子ビット４３〜４９の１２８個の値ごとに、量子ビット１〜７の１２８個の可能性のある値に対応する１２８個の微小スライスが、二次ストレージに書き込まれる。部分回路４内のゲートを適用する現在のフェーズでは、スライスされている量子ビット１〜７の１２８個の値ごとに、量子ビット４３〜４９の１２８個の可能性のある値に対応する１２８個の微小スライスが、二次ストレージから読み取られる。振幅のこれらの１２８個の微小スライスがメモリに読み込まれた後に、次に、部分回路４内のゲートが適用され得る。同様に、これらのゲートが適用された後に、次に、更新された各スライスをストレージに再び書き込むことができ、代替として、最終的な振幅を、スライスごとにメモリ内で処理することができる。図１に示されている二次ストレージ（との）読取り／書込みコンポーネント１１４は、採用されているコンピュータ・クラスタ内の二次ストレージ要素の物理的分散およびそのクラスタの通信ネットワークの特性を考慮することによって、ならびに微小スライスの読取りおよび書込みにおいて、および処理ノードとストレージ要素の間の微小スライスの通信において並列性の機会を利用することによって、微小スライスの読取りおよび書込みを最適化するように実装され得る。例えば、各微小スライスは、並列性の恩恵を受けるために、複数の物理的ディスク・ドライブにわたって分散される方法で格納されてよく、データ転送速度を最適化するために、各ディスク上の連続的なセクタにわたってデータがストライプ化される。
【００４６】
深さ８３（図６および図７）までシミュレーションを続行するために、部分回路４内のゲートが深さ８３まで適用され、更新されたスライスが二次ストレージに再び書き込まれる。部分回路４のシミュレーションにおいて、すべてのスライスについて、このプロセスが完了した後に、シミュレーションが、図６および図７に示されている部分回路５に対して、深さ８３まで残りのゲートを引き続きシミュレートする。部分回路４の場合と同じ方法でプロセスが進むが、今回は、現在スライスされている量子ビット４３〜４９の１２８個の値ごとに、量子ビット１〜７の１２８個の可能性のある値に対応する１２８個の微小スライスが、二次ストレージから読み込まれる。
【００４７】
同様に、深さ１１１（図８および図９）までシミュレーションを続行するために、部分回路５内のゲートが深さ１１１まで適用され、更新されたスライスが二次ストレージに再び書き込まれる。部分回路５のシミュレーションにおいて、すべてのスライスについて、このプロセスが完了した後に、シミュレーションが、図８および図９に示されている部分回路６に対して、深さ１１１まで残りのゲートを引き続きシミュレートする。部分回路５の場合と同じ方法でプロセスが進むが、今回は、現在スライスされている量子ビット１〜７の１２８個の値ごとに、量子ビット４３〜４９の１２８個の可能性のある値に対応する１２８個の微小スライスの論理ファイルが、二次ストレージから読み込まれる。
【００４８】
本発明の１つまたは複数の実施形態に従って、一般に、全体的な読取り／書込みサイクルの数を最小限に抑えることは、二次ストレージの効率的な使用を保証しない。より詳細には、二次ストレージを使用する際に、データは通常、ブロック（ディスク・セクタ）単位で読み取られ、書き込まれるため、ブロック内の単一のデータ項目を更新することは、ブロック全体の読取りおよび再書込みを必要とし、そのため、読取りおよび書込みの総量は、全体的な読取り／書込みサイクル中に更新される必要のあるブロックの数によって決定される。全体的な読取り／書込みサイクルの数と、読取りおよび書込みが実行される効率の両方を同時に最適化するために、回路分割における選択を、データ構造化の選択と組み合わせることができる。
【００４９】
ディスクに格納された量子状態データは、「微小」スライスに構造化される。「メタ」スライスを構築するために特定のフェーズにおいてスライスされたすべての量子ビットの結合が、ディスクに対する読取りおよび書込みの際に、データを「微小」スライスに構造化するためのスライシングに使用される。例えば、上で単に提示された例では、一部のフェーズで量子ビット１〜７がスライスされ、一方、他のフェーズで量子ビット４３〜４９がスライスされており、各フェーズで異なる「メタ」スライスが得られる。次に、これらのスライスされた量子ビット（すなわち、量子ビット１〜７、４３〜４９）の結合が、「微小」スライスを作成するために使用される。したがって、計算のフェーズ中の各「メタ」スライスは、複数の「微小」スライスに対応する。したがって、「メタ」スライスの読取りおよび書込みは、「微小」スライスの冗長な読取りおよび書込みが行われないように、「微小」スライス・レベルでアトミックになる。
【００５０】
各「微小」スライスのサイズが複数のディスク・セクタにわたることを保証することによって、非冗長なディスク・アクセスが実現される。ファイル・システムの特性も、「微小」スライスの最適なサイズに影響を与える可能性がある。したがって、どのフェーズの間にどの量子ビットを回路分割のためにスライスするべきかを選択するための最適化プロセスは、適切なサイズの「微小」スライスを生成するように考慮され得る。
【００５１】
図１１を参照すると、量子回路分割方法９００は、微小スライスにインデックスを付与するために使用されるグローバル量子ビットのセットを、空のセットになるように初期化すること（動作９０２）から開始する。その後の動作は、このグローバル量子ビットのセットに追加する。そのような量子ビットの数は、二次ストレージ上の微小スライスのサイズを決定し、したがって、効率的な二次ストレージのアクセスを可能にするほど十分に微小スライスが大きくなるように、微小スライスにインデックスを付与するために使用されるグローバル量子ビットの数に、制限が課される。
【００５２】
方法９００は、微小スライスにインデックスを付与するためのグローバル量子ビットの現在のセットと一致する部分回路を識別して選択すること（動作９０４）を進める。この文脈では、一致は、選択された部分回路に関連付けられたグローバル量子ビットが、微小スライスにインデックスを付与するために使用されるグローバル量子ビットの現在のセットに追加された場合に、微小スライスにインデックスを付与するために使用されるグローバル量子ビットの結果として得られたセットが、効率的な二次ストレージのアクセスを実現するために必要なそのような量子ビットの最大数を超えることを引き起こさないということを意味する。動作９０４の後に、選択された部分回路のグローバル量子ビットを、微小スライスにインデックスを付与するために使用されるグローバル量子ビットのセットに追加し（動作９０６）、次に、選択された部分回路内のゲートを入力回路から削除すること（動作９０８）が続く。その後、更新された入力回路が調べられて、任意の残りのゲートが入力回路に現れるかどうかを判定し（動作９１０）、現れる場合、量子回路分割方法９００が動作９０４に戻り、次の部分回路を識別して選択する。ゲートが残っていない場合、識別されて選択された部分回路の実行順序を決定して（動作９１２）、回路分割が終了する。
【００５３】
図１２は、動作９０４の例を示している。この例は、現在の入力回路内の各ゲートが適用されるために依存するローカル量子ビットのセットを計算することと（動作１００２）、微小スライスにインデックスを付与するためのグローバル量子ビットの現在のセットと一致し、使用可能な集合体メモリを前提として適用できるゲートの数を最大化する、ローカル量子ビットのセットを識別することと（動作１００４）、識別されたローカル量子ビットを前提として適用できるゲートの部分回路を識別し、選択することと（動作１００６）を含む。動作１００４では、一致は、識別されたローカル量子ビットに含まれないグローバル量子ビットを、微小スライスにインデックスを付与するために使用されるグローバル量子ビットの現在のセットに追加することが、微小スライスにインデックスを付与するために使用されるグローバル量子ビットの結果として得られたセットが、効率的な二次ストレージのアクセスを実現するために必要なそのような量子ビットの最大数を超えることを引き起こさないということを意味する。
【００５４】
図１１の動作９０４の例は、本明細書において図１０〜図２０を参照して説明され、米国特許出願第１５／７１３，３２３号において説明されている、初めて二次ストレージに書き込むことが必要になる前に、完全にメモリ内で量子状態を妥当な深さまで計算することによって、プロセス全体をブートストラップするための回路分解方法を含んでもよい。
【００５５】
図１０を参照すると、量子回路分割方法８００は、初期段の量子ビットごとに部分回路を作成することと（動作８０２）、その後の段のゲートを部分回路に追加することと（動作８０４）、すべての関連するゲートが割り当てられたかどうかを判定し（動作８０６）、割り当てられた場合、実行順序を決定することと（動作８０８）を含む。
【００５６】
動作８１０は、関連するすべてのゲートが割り当てられるまで、ブリッジ・ゲートを選択することを表す。動作８１２は、ブリッジされる部分回路をもつれさせるかどうかを判定し、もつれさせない場合、ブリッジされる部分回路を閉じ（動作８１４）、もつれさせる場合、ブリッジ・ゲートをもつれさせる部分回路のうちの１つに追加する（動作８１６）ことを表す。量子回路の動作８００は、従来のコンピュータおよび関連するストレージを使用して量子回路をシミュレートするために必要なリソースを削減するか、または最小限に抑えることができる方法で、量子回路の分割を可能にする。
【００５７】
初期段の量子ビットごとに部分回路を作成すること（動作８０２）は、量子回路によって（少なくとも最初に）必要とされる量子ビットの数を決定することと、量子回路によって必要とされる量子ビットごとに部分回路を定義するために、データ構造を初期化することとを含むことができる。その後の段のゲートを部分回路に追加すること（動作８０４）は、部分回路に現在割り当てられている量子ビットからの入力のみを必要とする、未割当ての次の段のゲートを各部分回路に追加することを含むことができる。この追加動作は、部分回路に割り当てられた量子ビットの残りのすべての未割当てのゲートが対角ユニタリ・ゲート（diagonal-unitary gates）であるかどうかを判定し、対角ユニタリ・ゲートである場合、その部分回路を閉じることと、閉じられた部分回路と同じ割り当てられた量子ビットを含む新しい部分回路を作成することと、この新しい部分回路に、残りのすべての未割当てのゲートが対角ユニタリ・ゲートである割り当てられた量子ビットをスライスする目的で作成されているとしてマークを付けることとを、含むこともできる。部分回路を閉じることは、この部分回路への他のゲートの追加を防ぐために、この部分回路に完了としてマークを付けることを含むことができる。
【００５８】
すべてのゲートが割り当てられたかどうかを判定すること（動作８０６）は、未割当てのゲート数または何らかのその他の指標が、すべてのゲートが部分回路に割り当てられたことを示しているかどうかを判定することを含むことができる。ブリッジ・ゲートを選択すること（動作８１０）は、部分回路に現在割り当てられている少なくとも１つの量子ビット、および部分回路に現在割り当てられていない１つまたは複数の量子ビットからの入力を必要とする、未割当ての次の段のゲートを選択することを含むことができる。言い換えると、ブリッジ・ゲートは、現在作成されているように複数の部分回路からの入力を必要とするゲートである。
【００５９】
ブリッジされた部分回路をもつれさせるかどうかを判定すること（動作８１２）は、ブリッジされた部分回路をもつれさせるという決定が行われるシナリオと、もつれさせないという決定が行われるシナリオとの選択肢のリソース・コストを推定し、各決定に関連付けられたリソース・コストを比較し、その後、最もコストの低い選択肢を選択することを含むことができる。ブリッジされた部分回路を閉じること（動作８１４）は、ブリッジされた部分回路への他のゲートの追加を防ぐために、部分回路に完了としてマークを付けることを含むことができる。ブリッジ・ゲートを新しい部分回路に割り当てること（やはり動作８１４の一部である）は、新しい部分回路を作成することと、閉じられているブリッジされた部分回路の量子ビットをこの新しい部分回路に割り当てることと、ブリッジ・ゲートをこの新しい部分回路に割り当てることとを含むことができる。
【００６０】
ブリッジ・ゲートを、もつれさせる部分回路のうちの１つに追加すること（動作８１６）は、ブリッジ・ゲートを、部分回路に含まれているゲートのリストに追加することを含むことができる。この追加動作は、最初にブリッジ・ゲートをゲートの等価な組合せに置き換えることを含むこともでき、ここで、この新しいブリッジ・ゲートは対角ユニタリになる。一例は、図１６および図１７に示されているように、ＣＮＯＴゲート（図１３〜図１５）をＣＺゲートとアダマール・ゲートの組合せに置き換えることである。これによって、図１８に示されているように、ＣＮＯＴゲートをこのゲートの等価な組合せに置き換えることができる。このような置換が行われた場合、新しいブリッジ・ゲートが、ブリッジされる部分回路のうちの１つに割り当てられ、それらの部分回路に割り当てられた量子ビットに従って、この書き換えにおいて導入されることのある任意の単一量子ビット・ゲートが、部分回路に割り当てられる。例えば、ＣＮＯＴゲートをＣＺゲートに置き換える特定の事例では、動作８０４に関連して前述した、その後の段のゲートを部分回路に追加するためのルールに従うために、導入されたアダマール・ゲートが、対応する量子ビットが割り当てられている部分回路に割り当てられる。一方、ＣＺゲートは、もつれさせられる部分回路のいずれかに割り当てられ得る。
【００６１】
図１３〜図１８が、量子回路の１つの特定の例を最適化する１つの例を示す概略図であるということに注意するべきである。本発明の一部の実施形態では、ゲートの置換（回路の書き換えとしても知られる）は、本明細書で開示された技術の範囲内のさまざまな時点で実施されてよい。例えば、図１６および図１７に示されている書き換えなどの回路の書き換えは、ステップ８１６（図１０）と共に実行され得る。より詳細には、ブリッジＣＮＯＴゲートをＣＺゲートおよびアダマール・ゲートの等価な構成に置き換えることは、対応する部分回路をもつれさせるときに導入されるもつれたインデックスの数を減らすことができ、これはさらに、結果として得られるもつれた部分回路をシミュレートするために必要とされるメモリ量を減らす効果がある。
【００６２】
したがって、図１０は、例えば、上記の使用事例および本明細書に記載された技術のその他の可能性のある使用事例の各々で、浮動小数点演算の数を最小限に抑える回路分割を見つけるために使用され得る、例示的なフロー図を示している。例として、深さ優先探索、幅優先探索、反復深化深さ優先探索、ダイクストラのアルゴリズム、およびＡ＊探索が挙げられる。
【００６３】
例えば、深さ優先再帰的最適化プロセスとして図１０に示されている動作を実装することは、可能性のある決定の選択肢にわたってループするために決定点でのループを導入することと、次に、それらのループ内で、可能性のある選択肢に関して、それらの点から前方に、図１０に示されている動作を再帰的に呼び出すことと、ループの終了時に、目的のコスト基準を最適化する選択肢を返すこととを含むことができる。これらの決定点は、割当て可能なブリッジ・ゲートを選択するための動作８１０と、部分回路をもつれさせるかどうかを選択するための動作８１２と、ブリッジ・ゲートを部分回路に割り当てるための動作８１６と、部分回路の実行順序を決定するための動作８０８とを含むことができる。これらの点での一部の決定は、代わりに、経験則を適用することによって行うことができ、一方、他の決定は、深さ優先探索の一部として含まれ得る。最小化される目的のリソース・コスト基準は、最大メモリ要件、振幅を計算するための浮動小数点演算の総数、または単一の振幅を計算するための浮動小数点演算の総数、あるいはその組合せを含むことができる。目的の制約に違反している場合に選択肢を破棄するために、条件付きテストも導入され得る。目的の制約は、シミュレーションのための合計メモリ要件が指定された制限内にとどまることを含むことができる。目的の制約は、深さ優先プロセス自体によって消費される合計実行時間に対する制限を含むこともできる。深さ優先プロセスは、実行時間制限が課されているなどの場合に、完全な探索が実行される前に深さ優先プロセスが終了した場合でも、実行した深さ優先プロセスから恩恵がなお得られるように、目的のリソース・コスト基準に従ってこれまで検出された、現在の最も良い選択肢のセットの記録を保持するように実装され得る。
【００６４】
深さ優先探索プロセスは、可能性のある一連の決定の選択肢のツリーを、それによって生じる回路分割と共に効果的に生成する。幅優先探索は、一度に１レベルずつ、このツリーを調べる。幅優先探索は、反復深化深さ優先探索として実装することができ、この実装では、行われる決定の数に制限が課され、この制限を超えると、探索ツリーの分岐が破棄される。探索の深さに制限を課すことができ、または代替として、動作８１２でもつれさせる選択肢を選択できる回数に制限を課すことができる。
【００６５】
図１６は、本明細書において示された本発明の少なくとも１つの実施形態に従う、量子回路実行のフロー図である。量子回路実行動作は、順序付けられた量子部分回路のセットを受信することと（動作１２０２）、個別のインデックス変数を割り当てることと（動作１２０４）、インデックス変数を伝搬することと（動作１２０６）、各量子部分回路を実行することと（動作１２０８）を含む。例示された量子回路の動作は、部分回路に分割された量子回路の実行を可能にすることができる。
【００６６】
順序付けられた量子部分回路のセットを受信すること（動作１２０２）は、包含されたゲートを含んでいる各量子部分回路を定義するオブジェクトまたはデータ構造へのポインタの順序付けられたリストを受信することを含むことができる。本発明の１つの実施形態では、各量子部分回路の定義は、基本的に、図１０に示されている実行計画に類似する部分回路実行計画である。個別のインデックス変数を割り当てること（動作１２０４）は、個別のインデックス変数を、すべての量子ビットの初期状態、およびすべての非対角ユニタリ・ゲートの出力に割り当てることを含むことができる。
【００６７】
インデックス変数を伝搬すること（動作１２０６）は、対角ユニタリ・ゲートごとに、入力から出力にインデックス変数を反復的に伝搬することを含むことができる。各量子部分回路を実行すること（動作１２０８）は、各量子部分回路を実行することと、生成された結果を指定された順序で結合することとを含むことができる。
【００６８】
図１７は、図１６に示されている実行動作１２０８の一例を示すフローチャートであり、この例では、部分回路および結合結果が、テンソルの積を構築すること（動作１２１０）および合計を実行すること（動作１２１２）を含むことができる。
【００６９】
テンソルの積を構築すること（動作１２１０）は、部分回路に属するゲートを、図１６の動作１２０４および１２０６でそれらのゲートに割り当てられたインデックス変数と共に識別することと、これらのインデックス変数を、添字として部分回路内のゲートの対応するテンソルに割り当てることと、部分回路のテンソルを、入力から出力への順序で配置された積に組み立てることとを含むことができる。テンソルの積を構築すること（動作１２１０）は、決定動作（例えば、図１０の動作８０８）を介して達した実行順序に従って、部分回路のシミュレーション結果に対応するテンソルをテンソルの積に組み立てることを含むこともできる。
【００７０】
合計を実行すること（動作１２１２）は、前述した構築動作１２１０で決定された入力から出力への順序で、部分回路のテンソルの積を計算することと、それらの部分回路内にあるインデックス変数が、決定された入力から出力への順序で現れるときに、それらのインデックス変数にわたって合計を実行することとを含んでよい。回路内にあるインデックス変数にわたって全体として合計を実行すること（動作１２１２）は、部分回路のシミュレーション結果を結合するために、前述した構築動作１２１０において決定されたテンソルの積を計算するときに、そのようなインデックス変数にわたって合計を実行することを含んでよい。
【００７１】
ある量子ビットに関して、シミュレートされるゲートが回路内に残っていない場合、またはその量子ビットに関する残りのすべてのゲートが対角ユニタリ・ゲートである場合、部分回路のシミュレーション結果のこの結合の前に、１つまたは複数のそのような量子ビットの可能性のある値にわたってループするｆｏｒループの導入が先行してよい。次に、その後の計算のメモリ要件を削減するために、影響を受けるテンソルのスライスに関して、その後のテンソルの積およびそれらの合計が計算されてよい。
【００７２】
図１６の動作１２０８および図１７に示されているその例に戻ると、少なくとも１つの実施形態では、部分回路は、個々の量子ビットの初期状態から作成された初期部分回路から開始して、入力から出力への順序で効率的にシミュレートされてよい。そのような方法では、その後の部分回路が入力に関して依存している先行する部分回路がシミュレートされるまで、その後の部分回路がシミュレートされない。部分回路ごとのシミュレーション結果は、コンピュータ・メモリ内でｍ次元配列として表され得る、ｍ次元テンソルに対応することができる。同等の表現を提供するために、線形配列などのその他のデータ構造も採用され得る。
【００７３】
したがって、本明細書において説明されている回路分割では、結果として得られたテンソルが、使用可能な集合体メモリ内に完全に収まるか、または結果として得られたテンソルのスライスが、すでに計算されている他のテンソルに基づいて、使用可能な集合体メモリを使用して計算され、集合体メモリに格納され得る。結果として得られたテンソルまたはそれらのスライスあるいはその両方は、通常、個々の処理ノードのメモリより大きい。既存の処理ノードごとのメモリは、本明細書に記載された手法と組み合わさって、対応するサブスライスが個々のノードのメモリ内に収まることができるような方法で部分回路を下位部分回路にさらに分割することによって、通信を最小限に抑える。
【００７４】
さらに、量子状態が大きすぎて集合体メモリ内に収まらない場合、これらの手法を組み合わせて二次ストレージを採用することができる。二次ストレージは、一般に、メイン・メモリより数桁遅いため、二次ストレージを使用することの実行可能性は、読取り／書込みサイクルの数をどの程度まで最小限に抑えることができるかに依存する。そのような最小化を実現するために、本明細書では、使用可能な集合体メモリを使用してシミュレートされ得るゲートの数を最大化することを試みるために、回路の初期部分を分割し、その後、各スライスにおいて結果として得られた量子状態が計算され、二次ストレージに書き込まれることが説明される。その後、個々の処理ノードで使用可能なメモリ・サイズに制限されるのではなく、集合体メモリのサイズに従って、「ローカル」量子ビットの数がさらに大きく設定されて、既知の分割方法が回路内の残りのゲートに適用され得る。結果として得られたテンソル・スライス（「メタ」スライス）は相対的に非常に大きく、追加の二次ストレージの読取り／書込みサイクルが必要になる前に、さらに多くのゲートをシミュレートできるようにする。本明細書において説明されるように、その後、結果として得られた部分回路を下位部分回路にさらに分割し、計算全体におけるノード間通信を最小限に抑えることができる。
【００７５】
本明細書において示されているように、図４〜図９に示されている分割方式は、７×７量子ビット、深さ２７のランダムな回路の場合、二次ストレージの１読取り／書込みサイクルのみを使用して７×７量子ビット、深さ５５の回路（図５）をシミュレートできるように拡張することができ、深さ８３（図６および図７）、深さ１１１（図８および図９）などの回路についても同様である。図１０〜図１２に示されているフロー図を適用して、図５〜図９に示されている分割方式を構築することができる。具体的には、図１０のフロー図８００を、図１１に示されているループの最初の反復での図１１の動作９０４の例において使用することができ、次に、図１２のフロー図１０００を、その後の反復における動作９０４として使用することができる。図１１に示されているループの最初の反復では、動作９０４の例は、深さ制限を増やして、図１０のフロー図８００を複数回適用し、初めて二次ストレージに書き込むことが必要になる前に量子状態を完全にメモリ内で計算することができる妥当な深さを識別することができる。このようにして、図４〜図９の事例では、そのような妥当な深さとして２７を識別することができる。深さ制限が２７に設定され、回路内のレベル７および８で第３および第４の行をブリッジするＣＺゲートを考慮する場合、図１０の動作８１２の「はい」の分岐に従うことによって、および部分回路１および２の厳密に内部に現れるＣＺゲートの事例では、動作８１２の「いいえ」の分岐に従うことによって、図５〜図９に示されている部分回路１および２が識別され得る。そのように実行することによって、図５〜図９に示されている部分回路１および２にそれぞれ対応する２つの複数の順序付けられた部分回路を生成する。このプロセスの副産物として、深さ２７までの回路内の残りのすべての未割当てのゲートが対角ユニタリ・ゲートであるため、量子ビット４３〜４９を、スライシングの候補であるとして識別することもできる。したがって、量子ビット４３〜４９は、メタ・スライスを構築する目的でスライシングに使用される識別されたグローバル量子ビットになることができる。量子回路内のレベル１５および１６で第３および第４の行をブリッジするＣＺゲートのうちのいずれか１つを考慮する場合、その後、図１０の動作８１２の「いいえ」の分岐に従うことによって、図５〜図９に示されている部分回路３が識別され得る。その後、動作８０４が後に適用されるときに、深さ２７までの部分回路３内の残りのゲートが識別され得る。深さ２７を超えて分割を拡張するために、量子ビット４３〜４９がグローバルであり、したがって、ローカル量子ビット１〜４２に適用されるゲートのみが、深さ２７を超えて部分回路３を拡張することにおいて考慮されるという制約付きで、深さ２７を超えて動作８０４が続行され得る。そのように実行することによって、図５〜図９に示されているように、部分回路３に対応する分割を生成することができる。上記のプロセスが、図１１に示されているループの最初の反復において図１１の動作９０４の実施形態として使用され、次に、図１２のフロー図１０００をその後の反復における動作９０４として使用することによって、部分回路４、５��および６が識別され得る。動作９０４においてフロー図８００を使用することは必須ではないが、前述した方法でフロー図８００を使用することによって、初めて二次ストレージに書き込むことが必要になる前に量子回路をシミュレートできる深さを増やすことができるということに、注意するべきである。深さ優先探索、幅優先探索、反復深化深さ優先探索、ダイクストラのアルゴリズム、およびＡ＊探索などの既知の最適化手法を、フロー図９００と共に使用して、動作９０４の実施形態において行われる選択を最適化することができ、例えば、計算コスト、通信コスト、および二次ストレージのアクセス・コストを考慮して、合計実行時間を最小限に抑えることができるということにも、注意するべきである。
【００７６】
１つの公開されている方法（Riling Li, Bujiao Wu,Mingsheng Ying, Xiaoming Sun, and Guangwen Yang, “Quantum Supremacy Circuit Simulation on Sunway TaihuLight,”arXiv preprint arXiv:1804.04797, (2018)）は、約５０量子ビットおよび４０を超える深さを有する普遍的でランダムな回路の単一の振幅の計算の実現可能性を示しており、この計算は、現在の技術では実現できないと考えられていた。これに対して、前述したように、５０量子ビットより大きく、任意の深さを有する普遍的でランダムな回路を、二次ストレージを使用してスーパーコンピュータ上ですべての振幅を計算して、完全にシミュレートすることができる。この結果、ディスクの読取り／書込み動作の相対的に高いコストに起因して、実行時間が長くなるが、この速度低下は、研究中の事例の場合、２倍より大幅に小さい。さらに、ＮＶＲＡＭベースのバースト・バッファなどの最近のシステムの進歩は、これらの実行時間に関して、非常に有益な効果を有することができる。二次ストレージを介して使用可能なメモリ・プールが大きくなると、量子回路シミュレーションの境界をさらに広げることができる。この目的で、量子回路は、ゲートの複数の層の他の量子ビットと定期的に相互作用しない、グリッドの境界上の量子ビットのグループを含むことができる。具体的には、７×７グリッド上の普遍的でランダムな回路の場合、境界での７量子ビットのグループは、他の行または列との２量子ビットの相互作用の２つの層を含み、さらなる相互作用のない６つの層がそれに続く（グループ内には、単一量子ビット・ゲートまたは２量子ビット・ゲートのみ）。このため、これらの量子ビットをスライスすることは非常に効果的であり、境界の行または列のうちの１つが選択され、６つの層の対応する量子ビットがスライスされる。残りの量子ビットに適用される回路は、独立してシミュレートされる。より詳細には、この手法は、グリッドの境界（例えば、グリッドの最下部の行）で量子ビットをスライスし、メモリが許す限り大きい状態ベクトルと共にシュレディンガーの手法を使用して、回路の残りの部分をシミュレートする。追加のもつれたインデックスを導入せずに、できるだけ多くのゲートの層に対してシミュレーションが実行される。反対側の行／列（例えば、グリッドの最上部の行）上の量子ビットの場合、これによって、ゲートの３０を超える層を適用することを可能にし、一方、スライスされる量子ビットに近い量子ビットの場合、メモリ占有率を増やさずに、前もってより少ない数の層で進行が停止する。これによって、同じサイズの複数のスライスを生成し、これらのスライスがディスクに格納される。さらにゲートを適用するために、前の部分回路においてスライスされた量子ビットの反対側の行／列（例えば、グリッドの最上部の行）内の量子ビットをスライスして、新しい部分回路が開始され、シュレディンガーの手法を使用して回路の残りの部分をシミュレートする。ディスクに格納されたスライスから初期状態を読み込むことができ、このプロセスが反復され得る。これによって、部分回路内に「波」パターンが生じ、このパターンでは、特定の部分回路が、量子ビットの最上部または最下部の行から開始し、その後、開始した量子ビットのセットの反対側の行を包含��るまで、回路の残りの部分に広がり、この反対側の行で、再び縮小する。追加の量子ビット（例えば、２行）をスライスすることによって、メモリ要件（ただし、ディスク・ストレージ要件ではない）を削減することができる。本明細書に記載された技術は、ディスクを操作しなくても、７×７量子ビットのグリッドに対する深さ４６の回路の単一の振幅の計算を可能にする。
【００７７】
本明細書において説明されているように、二次ストレージを使用することの効率は、読取り／書込みサイクルの数をどの程度まで最小限に抑えることができるかに依存する。２４９個の量子振幅を二次ストレージに書き込み、それらを逆に読み取るために必要なデータ転送時間は、約１．０〜２．２ＴＢ／秒の転送速度で、約２〜５時間であることができる。量子振幅は、単精度または倍精度あるいはその両方のストレージ形式で格納され得る（丸め誤差の累積を最小限に抑えるために、振幅が単精度で格納される場合でも、メモリ内の計算は倍精度で実行され得る）。したがって、読取り／書込みサイクルの数を最小限に維持できるということを条件として、二次ストレージの使用は実用的である。
【００７８】
図１８は、量子回路の機械可読の仕様を含んでいる入力量子回路を、テンソル・スライシングのために識別された量子ビットの少なくとも２つのグループに基づいて部分回路に分割する、分割コンポーネント（ブロック１３０２）を備えているシステムを表しており、これらの部分回路のグループは、テンソル・スライシングに使用される量子ビットの関連付けられたセットを含む。シミュレーション・コンポーネント（ブロック１３０４）は、部分回路のグループに基づく各段内の入力量子回路を、１つの部分回路につき１つの段ずつ、シミュレートされた量子状態テンソルにシミュレートし、部分回路に関連付けられた量子ビットのセットが、入力量子回路に対してシミュレートされた量子状態テンソルを量子状態テンソル・スライスに分割するために使用され、その部分回路内の量子ゲートが、量子状態テンソル・スライスを更新された量子状態テンソル・スライスに更新するために使用される。読取り／書込みコンポーネント（ブロック１３０６）は、シミュレートされた量子状態テンソルの更新された量子状態テンソル・スライスを、微小スライスとして二次ストレージに格納する。
【００７９】
入力量子回路は、少なくとも４９量子ビットを備えることができ、少なくとも５０の回路の深さのレベルを有することができる。
【００８０】
読取り／書込みコンポーネントは、二次ストレージの少なくとも２つのディスク・セクタにわたるサイズを有する微小スライスを書き込むことができる。読取り／書込みコンポーネントは、更新された量子状態テンソル・スライスを二次ストレージから取り出すことができ、シミュレーション・コンポーネントは、別の部分回路を他の部分回路テンソルに処理し、二次ストレージから取り出された更新された量子状態テンソル・スライスを使用して、他の部分回路テンソルをさらに更新された量子状態テンソル・スライスに更新することができる。読取り／書込みコンポーネントは、さらに更新された量子状態テンソル・スライスを二次ストレージに格納することができる。
【００８１】
分割コンポーネントは、入力量子回路を、第１の量子ビット分割グループ、第２の量子ビット分割グループ、第３の量子ビット分割グループ、および第４の量子ビット分割グループを含んでいる、部分回路に対応する量子ビット分割グループに分割することができる。シミュレーション・コンポーネントは、第３のグループの量子ゲートを、第１および第２のグループのテンソル・スライスに適用し、更新された量子状態テンソルを取得することができ、読取り／書込みコンポーネントは、更新された量子状態テンソル・スライスを二次ストレージからメモリに読み取ることができる。シミュレーション・コンポーネントは、第４のグループの量子ゲートを更新された量子状態テンソル・スライスに適用して、さらに更新された量子状態テンソルを取得することができる。
【００８２】
図１９は、例示的なコンピュータ実装方法を表しており、この方法では、動作１４０２が、量子回路の機械可読の仕様を含んでいる入力量子回路を処理することを表している。この処理することは、テンソル・スライシングのために識別された量子ビットの少なくとも２つのグループに基づいて、入力量子回路を部分回路のグループに分割すること（例えば、図１の分割コンポーネント１０８によって実行される動作１４０４）を含むことができ、これらの部分回路のグループは、テンソル・スライシングに使用される量子ビットの関連付けられたセットを含む。動作１４０６は、（例えば、図１のシミュレーション・コンポーネント１１２によって）部分回路のグループに基づく各段内の入力量子回路を、１つの部分回路につき１つの段ずつ、シミュレートされた量子状態テンソルにシミュレートすることを表しており、部分回路に関連付けられた量子ビットのセットが、入力量子回路に対してシミュレートされた量子状態テンソルを量子状態テンソル・スライスに分割するために使用され、その部分回路内の量子ゲートが、量子状態テンソル・スライスを更新された量子状態テンソル・スライスに更新するために使用される。動作１４０８は、（例えば、図１の読取り／書込みコンポーネント１１４によって）シミュレートされた量子状態テンソルの更新された量子状態テンソル・スライスを、微小スライスとして二次ストレージに格納することを表している。
【００８３】
シミュレートされた量子状態テンソルの更新された量子状態テンソル・スライスを微小スライスとして二次ストレージに格納することは、微小スライスを二次ストレージの少なくとも２つのディスク・セクタに格納することを含むことができる。
【００８４】
各態様は、別の部分回路を他の部分回路テンソルに処理することと、更新された量子状態テンソル・スライスを二次ストレージから取り出すことと、二次ストレージから取り出された更新された量子状態テンソル・スライスを使用して他の部分回路テンソルをさらに更新された量子状態テンソル・スライスに更新することとを含むことができる。各態様は、さらに更新された量子状態テンソル・スライスを二次ストレージに格納することを処理することを含むことができる。
【００８５】
入力量子回路を部分回路のグループに分割することは、入力量子回路を第１の部分回路分割グループ、第２の部分回路分割グループ、および第３の部分回路分割グループに分割することを含むことができ、更新された量子状態テンソル・スライスを格納することは、第３の部分回路分割グループのゲートを第１の部分回路分割グループおよび第２の部分回路分割グループに対応するテンソル・スライスに適用して更新された量子状態テンソル・スライスを取得することを含むことができる。入力量子回路を部分回路のグループに分割することは、入力量子回路を第４の部分回路分割グループに分割することと、更新された量子状態テンソル・スライスを二次ストレージから取り出すこととをさらに含むことができ、二次ストレージから取り出された更新された量子状態テンソル・スライスを使用して、他の部分回路テンソルをさらに更新された量子状態テンソル・スライスに更新することは、第４の部分回路分割グループのゲートを適用することを含むことができる。
【００８６】
理解されるように、図１９の例示的な動作は、一般に、量子回路の機械可読の仕様を含んでいる入力量子回路を含む量子回路をシミュレートするためのコンピュータ・プログラム製品において実装され得る。この目的で、コンピュータ・プログラム製品は、１つまたは複数のコンピュータ可読ストレージ媒体と、１つまたは複数のコンピュータ可読ストレージ媒体に格納されたプログラム命令とを備えることができる。これらのプログラム命令は、実行された場合に、図１９に例示された動作の少なくとも一部に対応することができる。
【００８７】
図２０は、例示的なコンピュータ実装方法の動作を表しており、この方法は、少なくとも２つのプロセッサに動作可能なように結合されたデバイスによって実行可能であり、量子回路の機械可読の仕様を含んでいる入力量子回路をシミュレートすることを表す動作１５０２を含んでいる。動作１５０４は、テンソル・スライシングのために識別された量子ビットの少なくとも２つのグループに基づいて、入力量子回路をメタ部分回路に分割すること表しており、これらのメタ部分回路のうちの少なくとも１つが、単一のプロセッサのメモリを超える。各態様は、メタ部分回路を単一のプロセッサのメモリ内に収まる下位部分回路にさらに分割することと（動作１５０６）、下位部分回路に対してテンソルを計算することと（動作１５０８）、テンソル・スライシングによって、テンソルをテンソル・スライスに縮小させることと（動作１５１０）を含むことができる。各態様は、別の部分回路のゲートをテンソル・スライスに適用して、量子状態データを表す更新されたテンソル・スライスを取得することと、更新されたテンソル・スライスを二次ストレージに格納することとを含むことができる。各態様は、更新されたテンソル・スライスを二次ストレージから取り出すことと、さらに他の部分回路のゲートを更新されたテンソル・スライスに適用して、さらに更新されたテンソル・スライスを取得することとを含むことができる。
【００８８】
二次ストレージは、１つまたは複数のディスク・デバイスを備えることができ、各態様は、メタ・スライスを微小スライスに構造化することを含むことができ、この微小スライスのサイズは、二次ストレージの少なくとも２つのディスク・セクタにわたり、更新されたテンソル・スライスを二次ストレージに格納することは、微小スライスを格納することを含むことができる。ディスク・デバイスに対する代替または追加として、二次ストレージは、ＮＶＲＡＭ、相変化メモリ、フラッシュなどを含むことができる。さらに、二次ストレージは、少なくともある程度、「リモート」メモリのことを指すことができる。例えば、リモート・ダイレクト・メモリ・アクセスは、ＣＰＵの介入を必要とせずに、データを効率的に転送することを可能にし、したがって、微小スライスに使用することができる。実行される動作は、例えば、ノード１５８がより多くのメモリを保有しているか、または同じ量のメモリを保有しているが、より少ないリソースを必要とするため、あるノード（例えば、ノード０）がスライスを別のノード（例えば、ノード１５８）に格納できるという点において、「メモリ対称」である必要はないということに、注意するべきである。
【００８９】
理解されるように、図２０の例示的な動作は、一般に、量子回路の機械可読の仕様を含んでいる入力量子回路を含む量子回路をシミュレートするためのコンピュータ・プログラム製品において実装され得る。この目的で、コンピュータ・プログラム製品は、１つまたは複数のコンピュータ可読ストレージ媒体と、このような１つまたは複数のコンピュータ可読ストレージ媒体に格納されたプログラム命令とを備えることができる。これらのプログラム命令は、実行された場合に、図２０に例示された動作の少なくとも一部に対応することができる。
【００９０】
本発明のさまざまな態様の背景を提供するために、図２１および以下の説明は、本発明のさまざまな態様が実装され得る適切な環境の概要を示すように意図されている。図２１は、本明細書に記載された本発明の１つまたは複数の実施形態を容易にすることができる例示的な動作環境のブロック図を示している。
【００９１】
図２１を参照すると、環境１６００は、コンピュータ１６１２を含むこともできる。コンピュータ１６１２は、処理ユニット１６１４、システム・メモリ１６１６、およびシステム・バス１６１８を含むこともできる。システム・バス１６１８は、システム・メモリ１６１６を含むが、これに限定されないシステム・コンポーネントを、処理ユニット１６１４に結合する。処理ユニット１６１４は、さまざまな使用可能なプロセッサのいずれかであることができる。デュアル・マイクロプロセッサおよびその他のマルチプロセッサ・アーキテクチャが、処理ユニット１６１４として採用されてもよい。システム・バス１６１８は、ＩＳＡ（industrial standard architecture）、ＭＣＡ（micro-channel architecture）、ＥＩＳＡ（extended ISA）、ＩＤＥ（intelligent drive electronics）、ＶＥＳＡローカル・バス（ＶＬＢ：VESA local bus）、ＰＣＩ（peripheral component interconnect）、カード・バス、ユニバーサル・シリアル・バス（ＵＳＢ：universal serial bus）、ＡＧＰ（advanced graphics port）、ＦｉｒｅＷｉｒｅ（ＩＥＥＥ  １３９４）、および小型コンピュータ・システム・インターフェイス（ＳＣＳＩ：small computer systems interface）を含むが、これらに限定されない、任意のさまざまな使用可能なバス・アーキテクチャを使用する、メモリ・バスもしくはメモリ・コントローラ、ペリフェラル・バスもしくは外部バス、またはローカル・バス、あるいはその組合せを含む、複数の種類のバス構造のいずれかであることができる。
【００９２】
システム・メモリ１６１６は、揮発性メモリ１６２０および不揮発性メモリ１６２２を含むこともできる。起動中などにコンピュータ１６１２内の要素間で情報を転送するための基本ルーチンを含んでいる基本入出力システム（ＢＩＯＳ：basic input/output system）が、不揮発性メモリ１６２２に格納される。コンピュータ１６１２は、取り外し可能／取り外し不可能な揮発性／不揮発性のコンピュータ・ストレージ媒体を含むこともできる。例えば図２１は、ディスク・ストレージ１６２４を示している。ディスク・ストレージ１６２４は、磁気ディスク・ドライブ、フロッピー（Ｒ）・ディスク・ドライブ、テープ・ドライブ、Ｊａｚドライブ、Ｚｉｐドライブ、ＬＳ−１００ドライブ、フラッシュ・メモリ・カード、またはメモリ・スティックなどの、ただしこれらに限定されない、デバイスを含むこともできる。ディスク・ストレージ１６２４は、ストレージ媒体を、別々に、または他のストレージ媒体と組み合わせて、含むこともできる。システム・バス１６１８へのディスク・ストレージ１６２４の接続を容易にするために、インターフェイス１６２６などの、取り外し可能または取り外し不可能なインターフェイスが通常は使用される。図２１は、ユーザと、適切な動作環境１６００において説明された基本的なコンピュータ・リソースとの間の仲介として機能するソフトウェアも示している。そのようなソフトウェアは、例えば、オペレーティング・システム１６２８を含むこともできる。ディスク・ストレージ１６２４に格納できるオペレーティング・システム１６２８は、コンピュータ１６１２のリソースを制御し、割り当てるように動作する。
【００９３】
システムのアプリケーション１６３０は、プログラム・モジュール１６３２を介して、オペレーティング・システム１６２８によるリソースの管理を利用し、例えばシステム・メモリ１６１６またはディスク・ストレージ１６２４のいずれかに格納されたデータ１６３４をプログラムする。さまざまなオペレーティング・システムまたはオペレーティング・システムの組合せを使用して本開示が実装され得るということが、理解されるべきである。ユーザは、１つまたは複数の入力デバイス１６３６を介して、コマンドまたは情報をコンピュータ１６１２に入力する。入力デバイス１６３６は、マウス、トラックボール、スタイラスなどのポインティング・デバイス、タッチ・パッド、キーボード、マイクロホン、ジョイスティック、ゲーム・パッド、衛星放送受信アンテナ、スキャナ、ＴＶチューナー・カード、デジタル・カメラ、デジタル・ビデオ・カメラ、Ｗｅｂカメラなどを含むが、これらに限定されない。これらおよびその他の入力デバイスは、１つまたは複数のインターフェイス・ポート１６３８を介してシステム・バス１６１８を通り、処理ユニット１６１４に接続する。１つまたは複数のインターフェイス・ポート１６３８は、例えば、シリアル・ポート、パラレル・ポート、ゲーム・ポート、およびユニバーサル・シリアル・バス（ＵＳＢ）を含む。１つまたは複数の出力デバイス１６４０は、１つまたは複数の入力デバイス１６３６と同じ種類のポートの一部を使用する。このようにして、例えば、ＵＳＢポートを使用して、入力をコンピュータ１６１２に提供し、コンピュータ１６１２から出力デバイス１６４０に情報を出力できる。出力アダプタ１６４２は、特殊なアダプタを必要とする出力デバイス１６４０の中でも特に、モニタ、スピーカ、およびプリンタのような何らかの出力デバイス１６４０が存在することを示すために提供される。出力アダプタ１６４２の例としては、出力デバイス１６４０とシステム・バス１６１８の間の接続の手段を提供するビデオ・カードおよびサウンド・カードが挙げられるが、これらに限定されない。１つまたは複数のリモート・コンピュータ１６４４などの、その他のデバイスまたはデバイスのシステムあるいはその両方が、入力機能および出力機能の両方を提供するということに、注意するべきである。
【００９４】
コンピュータ１６１２は、リモート・コンピュータ１６４４などの１つまたは複数のリモート・コンピュータへの論理接続を使用して、ネットワーク環境内で動作できる。１つまたは複数のリモート・コンピュータ１６４４は、コンピュータ、サーバ、ルータ、ネットワークＰＣ、ワークステーション、マイクロプロセッサ・ベースの機器、ピア・デバイス、またはその他の一般的なネットワーク・ノードなどであることができ、通常は、コンピュータ１６１２に関連して説明された要素の多くまたはすべてを含むこともできる。簡潔にするために、メモリ・ストレージ・デバイス１６４６のみが、１つまたは複数のリモート・コンピュータ１６４４と共に示されている。１つまたは複数のリモート・コンピュータ１６４４は、ネットワーク・インターフェイス１６４８を介してコンピュータ１６１２に論理的に接続されてから、通信接続１６５０を介して物理的に接続される。ネットワーク・インターフェイス１６４８は、ローカル・エリア・ネットワーク（ＬＡＮ：local-area networks）、広域ネットワーク（ＷＡＮ：wide-area networks）、セルラー・ネットワークなどの、有線通信ネットワークまたは無線通信ネットワークあるいはその両方を包含する。ＬＡＮ技術は、光ファイバ分散データ・インターフェイス（ＦＤＤＩ：fiber distributed data interface）、銅線分散データ・インターフェイス（ＣＤＤＩ：copper distributed data interface）、イーサネット（Ｒ）、トークン・リングなどを含む。ＷＡＮ技術は、ポイントツーポイント・リンク、総合デジタル通信網（ＩＳＤＮ：integrated services digital networks）およびそれらの変形などの回路交換網、パケット交換網、およびデジタル加入者回線（ＤＳＬ：digital subscriber lines）を含むが、これらに限定されない。１つまたは複数の通信接続１６５０は、ネットワーク・インターフェイス１６４８をシステム・バス１６１８に接続するために採用されたハードウェア／ソフトウェアのことを指す。通信接続１６５０は、説明を明確にするために、コンピュータ１６１２内に示されているが、コンピュータ１６１２の外部に存在することもできる。ネットワーク・インターフェイス１６４８に接続するためのハードウェア／ソフトウェアは、単に例示の目的で、通常の電話の等級のモデム、ケーブル・モデム、およびＤＳＬモデムを含むモデム、ＩＳＤＮアダプタ、およびイーサネット（Ｒ）・カードなどの、内部および外部の技術を含むこともできる。
【００９５】
本発明は、任意の可能な統合の技術的詳細レベルで、システム、方法、装置、またはコンピュータ・プログラム製品、あるいはその組合せであることができる。コンピュータ・プログラム製品は、プロセッサに本発明の態様を実行させるためのコンピュータ可読プログラム命令を含んでいる１つまたは複数のコンピュータ可読ストレージ媒体を含むことができる。コンピュータ可読ストレージ媒体は、命令実行デバイスによって使用するための命令を保持および格納できる有形のデバイスであることができる。コンピュータ可読ストレージ媒体は、例えば、電子ストレージ・デバイス、磁気ストレージ・デバイス、光ストレージ・デバイス、電磁ストレージ・デバイス、半導体ストレージ・デバイス、またはこれらの任意の適切な組合せであることができるが、これらに限定されない。コンピュータ可読ストレージ媒体のさらに具体的な例の非網羅的リストは、ポータブル・フロッピー（Ｒ）・ディスク、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ：random access memory）、読取り専用メモリ（ＲＯＭ：read-only memory）、消去可能プログラマブル読取り専用メモリ（ＥＰＲＯＭ：erasable programmable read-only memoryまたはフラッシュ・メモリ）、スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ：static random access memory）、ポータブル・コンパクト・ディスク読取り専用メモリ（ＣＤ−ＲＯＭ：compact disc read-only memory）、デジタル多用途ディスク（ＤＶＤ：digital versatile disk）、メモリ・スティック、フロッピー（Ｒ）・ディスク、パンチカードまたは命令が記録されている溝の中の隆起構造などの機械的にエンコードされるデバイス、およびこれらの任意の適切な組合せを含むこともできる。本明細書において使用されるとき、コンピュータ可読ストレージ媒体は、それ自体が、電波またはその他の自由に伝搬する電磁波、導波管またはその他の送信媒体を介して伝搬する電磁波（例えば、光ファイバ・ケーブルを通過する光パルス）、あるいはワイヤを介して送信される電気信号などの一過性の信号であると解釈されるべきではない。
【００９６】
本明細書に記載されたコンピュータ可読プログラム命令は、コンピュータ可読ストレージ媒体から各コンピューティング・デバイス／処理デバイスへ、またはネットワーク（例えば、インターネット、ローカル・エリア・ネットワーク、広域ネットワーク、または無線ネットワーク、あるいはその組合せ）を介して外部コンピュータまたは外部ストレージ・デバイスへダウンロードされ得る。このネットワークは、銅伝送ケーブル、光伝送ファイバ、無線送信、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバ、あるいはその組合せを備えることができる。各コンピューティング・デバイス／処理デバイス内のネットワーク・アダプタ・カードまたはネットワーク・インターフェイスは、コンピュータ可読プログラム命令をネットワークから受信し、それらのコンピュータ可読プログラム命令を各コンピューティング・デバイス／処理デバイス内のコンピュータ可読ストレージ媒体に格納するために転送する。本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ（ＩＳＡ：instruction-set-architecture）命令、マシン命令、マシン依存命令、マイクロコード、ファームウェア命令、状態設定データ、集積回路のための構成データ、あるいは、Ｓｍａｌｌｔａｌｋ（Ｒ）、Ｃ＋＋などのオブジェクト指向プログラミング言語、および「Ｃ」プログラミング言語または同様のプログラミング言語などの手続き型プログラミング言語を含む１つまたは複数のプログラミング言語の任意の組合せで記述されたソース・コードまたはオブジェクト・コードであることができる。コンピュータ可読プログラム命令は、ユーザのコンピュータ上で全体的に実行すること、ユーザのコンピュータ上でスタンドアロン・ソフトウェア・パッケージとして部分的に実行すること、ユーザのコンピュータ上およびリモート・コンピュータ上でそれぞれ部分的に実行すること、あるいはリモート・コンピュータ上またはサーバ上で全体的に実行することができる。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク（ＬＡＮ）または広域ネットワーク（ＷＡＮ）を含む任意の種類のネットワークを介してユーザのコンピュータに接続することができ、または接続は、（例えば、インターネット・サービス・プロバイダを使用してインターネットを介して）外部コンピュータに対して行われ得る。一部の実施形態では、本発明の態様を実行するために、例えばプログラマブル論理回路、フィールドプログラマブル・ゲート・アレイ（ＦＰＧＡ：field-programmable gate arrays）、またはプログラマブル・ロジック・アレイ（ＰＬＡ：programmable logic arrays）を含む電子回路は、コンピュータ可読プログラム命令の状態情報を利用することによって、電子回路をカスタマイズするためのコンピュータ可読プログラム命令を実行することができる。
【００９７】
本発明の態様は、本明細書において、本発明の実施形態に従って、方法、装置（システム）、およびコンピュータ・プログラム製品のフローチャート図またはブロック図あるいはその両方を参照して説明される。フローチャート図またはブロック図あるいはその両方の各ブロック、ならびにフローチャート図またはブロック図あるいはその両方に含まれるブロックの組合せが、コンピュータ可読プログラム命令によって実装され得るということが理解されるであろう。これらのコンピュータ可読プログラム命令は、コンピュータまたはその他のプログラム可能なデータ処理装置のプロセッサを介して実行される命令が、フローチャートまたはブロック図あるいはその両方の１つまたは複数のブロックに指定される機能／動作を実施する手段を作り出すべく、汎用コンピュータ、専用コンピュータ、または他のプログラム可能なデータ処理装置のプロセッサに提供されてマシンを作り出すものであることができる。これらのコンピュータ可読プログラム命令は、命令が格納されたコンピュータ可読ストレージ媒体がフローチャートまたはブロック図あるいはその両方の１つまたは複数のブロックに指定される機能／動作の態様を実施する命令を含んでいる製品を備えるように、コンピュータ可読ストレージ媒体に格納され、コンピュータ、プログラム可能なデータ処理装置、または他のデバイス、あるいはその組合せに特定の方式で機能するように指示できるものであることもできる。コンピュータ可読プログラム命令は、コンピュータ上、その他のプログラム可能な装置上、またはその他のデバイス上で実行される命令が、フローチャートまたはブロック図あるいはその両方の１つまたは複数のブロックに指定される機能／動作を実施するように、コンピュータ、その他のプログラム可能なデータ処理装置、またはその他のデバイスに読み込むこともでき、それによって、一連の操作可能な動作を、コンピュータ上、その他のプログラム可能な装置上、またはコンピュータ実装プロセスを生成するその他のデバイス上で実行させる。
【００９８】
図内のフローチャートおよびブロック図は、本発明のさまざまな実施形態に従って、システム、方法、およびコンピュータ・プログラム製品の可能な実装のアーキテクチャ、機能、および動作を示す。これに関連して、フローチャートまたはブロック図内の各ブロックは、規定された論理機能を実装するための１つまたは複数の実行可能な命令を含んでいる、命令のモジュール、セグメント、または部分を表すことができる。一部の代替の実装では、ブロックに示された機能は、図に示された順序とは異なる順序で発生することができる。例えば、連続して示された２つのブロックは、実際には、含まれている機能に応じて、実質的に同時に実行されるか、またはこれらのブロックが場合によっては逆の順序で実行され得る。ブロック図またはフローチャート図あるいはその両方の各ブロック、ならびにブロック図またはフローチャート図あるいはその両方に含まれるブロックの組合せは、規定された機能または動作を実行するか、または専用ハードウェアとコンピュータ命令の組合せを実行する専用ハードウェアベースのシステムによって実装され得るということにも注意するであろう。
【００９９】
上では、１つのコンピュータまたは複数のコンピュータあるいはその両方で実行されるコンピュータ・プログラム製品のコンピュータ実行可能命令の一般的な文脈において、主題が説明されたが、当業者は、本開示がその他のプログラム・モジュールと組み合わせて実装されてもよいということを認識するであろう。通常、プログラム・モジュールは、特定のタスクを実行するか、または特定の抽象データ型を実装するか、あるいはその両方を行うルーチン、プログラム、コンポーネント、データ構造などを含む。さらに、当業者は、本発明のコンピュータ実装方法が、シングルプロセッサ・コンピュータ・システムまたはマルチプロセッサ・コンピュータ・システム、ミニコンピューティング・デバイス、メインフレーム・コンピュータ、加えてコンピュータ、ハンドヘルド・コンピューティング・デバイス（例えば、ＰＤＡ、電話）、マイクロプロセッサベースまたはプログラム可能な家庭用電化製品または産業用電子機器などを含む、その他のコンピュータ・システム構成を使用して実践され得るということを理解するであろう。示された態様は、通信ネットワークを介してリンクされたリモート処理デバイスによってタスクが実行される、分散コンピューティング環境内で実践されてもよい。ただし、本発明の態様の全部ではないとしても一部は、スタンドアロン・コンピュータ上で実践され得る。分散コンピューティング環境において、プログラム・モジュールは、ローカルおよびリモートの両方のメモリ・ストレージ・デバイスに配置され得る。
【０１００】
本出願において使用されるとき、「コンポーネント」、「システム」、「プラットフォーム」、「インターフェイス」などの用語は、１つまたは複数の特定の機能を含むコンピュータ関連の実体または操作可能なマシンに関連する実体を指すことができるか、またはそれらの実体を含むことができるか、あるいはその両方が可能である。本明細書で開示された実体は、ハードウェア、ハードウェアとソフトウェアの組合せ、ソフトウェア、または実行中のソフトウェアのいずれかであることができる。例えば、コンポーネントは、プロセッサ上で実行されるプロセス、プロセッサ、オブジェクト、実行ファイル、実行のスレッド、プログラム、またはコンピュータ、あるいはその組合せであることができるが、これらに限定されない。例として、サーバ上で実行されるアプリケーションおよびサーバの両方が、コンポーネントであることができる。１つまたは複数のコンポーネントが、プロセス内または実行のスレッド内あるいはその両方に存在することができ、コンポーネントは、１つのコンピュータ上に局在するか、または２つ以上のコンピュータ間で分散されるか、あるいはその両方が可能である。別の例では、各コンポーネントは、さまざまなデータ構造が格納されているさまざまなコンピュータ可読媒体から実行できる。コンポーネントは、１つまたは複数のデータ・パケット（例えば、ローカル・システム内または分散システム内の別のコンポーネントと情報をやりとりするか、またはインターネットなどのネットワークを経由して、信号を介して他のシステムと情報をやりとりするか、あるいはその両方によって情報をやりとりする、１つのコンポーネントからのデータ）を含んでいる信号などに従って、ローカルまたはリモートあるいはその両方のプロセスを介して通信できる。別の例として、コンポーネントは、電気または電子回路によって操作される機械的部品によって提供される特定の機能を有する装置であることができ、プロセッサによって実行されるソフトウェア・アプリケーションまたはファームウェア・アプリケーションによって操作される。そのような場合、プロセッサは、装置の内部または外部に存在することができ、ソフトウェア・アプリケーションまたはファームウェア・アプリケーションの少なくとも一部を実行できる。さらに別の例として、コンポーネントは、機械的部品を含まない電子コンポーネントを介して特定の機能を提供する装置であることができ、これらの電子コンポーネントは、電子コンポーネントの機能の少なくとも一部を与えるソフトウェアまたはファームウェアを実行するためのプロセッサまたはその他の手段を含むことができる。一態様では、コンポーネントは、例えばクラウド・コンピューティング・システム内で、仮想マシンを介して電子コンポーネントをエミュレートすることができる。
【０１０１】
加えて、「または」という用語は、排他的論理和ではなく、包含的論理和を意味するように意図されている。すなわち、特に指定されない限り、または文脈から明らかでない限り、「ＸがＡまたはＢを採用する」は、自然な包含的順列のいずれかを意味するように意図されている。すなわち、ＸがＡを採用するか、ＸがＢを採用するか、またはＸがＡおよびＢの両方を採用する場合、「ＸがＡまたはＢを採用する」が、前述の事例のいずれかにおいて満たされる。さらに、本明細書および添付の図面において使用されるとき、冠詞「ａ」および「ａｎ」は、単数形を対象にすることが特に指定されない限り、または文脈から明らかでない限り、「１つまたは複数」を意味すると一般に解釈されるべきである。本明細書において使用されるとき、「例」または「例示的」あるいはその両方の用語は、例、事例、または実例となることを意味するために使用される。誤解を避けるために、本明細書で開示された主題は、そのような例によって制限されない。加えて、「例」または「例示的」あるいはその両方として本明細書に記載された任意の態様または設計は、他の態様または設計よりも好ましいか、または有利であると必ずしも解釈されず、当業者に知られている同等の例示的な構造および技術を除外するように意図されていない。
【０１０２】
本明細書において使用されるとき、「プロセッサ」という用語は、シングルコア・プロセッサと、ソフトウェアのマルチスレッド実行機能を備えるシングルプロセッサと、マルチコア・プロセッサと、ソフトウェアのマルチスレッド実行機能を備えるマルチコア・プロセッサと、ハードウェアのマルチスレッド技術を備えるマルチコア・プロセッサと、並列プラットフォームと、分散共有メモリを備える並列プラットフォームとを含むが、これらに限定されない、実質的に任意の計算処理ユニットまたはデバイスを指すことができる。さらに、プロセッサは、集積回路、特定用途向け集積回路（ＡＳＩＣ：application specific integrated circuit）、デジタル信号プロセッサ（ＤＳＰ：digital signal processor）、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ：field programmable gate array）、プログラマブル・ロジック・コントローラ（ＰＬＣ：programmable logic controller）、複合プログラム可能論理デバイス（ＣＰＬＤ：complex programmable logic device）、個別のゲートまたはトランジスタ論理、個別のハードウェア・コンポーネント、あるいは本明細書に記載された機能を実行するように設計されたこれらの任意の組合せを指すことができる。さらに、プロセッサは、空間利用を最適化し、またはユーザ機器の性能を向上するために、分子および量子ドット・ベースのトランジスタ、スイッチ、およびゲートなどの、ただしこれらに限定されない、ナノスケール・アーキテクチャを利用することができる。プロセッサは、計算処理ユニットの組合せとして実装されてもよい。本開示では、コンポーネントの動作および機能に関連する「ストア」、「ストレージ」、「データ・ストア」、「データ・ストレージ」、「データベース」、および実質的に任意のその他の情報格納コンポーネントなどの用語は、「メモリ・コンポーネント」、「メモリ」内に具現化された実体、またはメモリを備えているコンポーネントを指すために使用される。本明細書に記載されたメモリまたはメモリ・コンポーネントあるいはその両方が、揮発性メモリまたは不揮発性メモリのいずれかであることができ、あるいは揮発性メモリおよび不揮発性メモリの両方を含むことができるということが、理解されるべきである。不揮発性メモリの例としては、読取り専用メモリ（ＲＯＭ）、プログラマブルＲＯＭ（ＰＲＯＭ）、電気的プログラマブルＲＯＭ（ＥＰＲＯＭ）、電気的消去可能ＲＯＭ（ＥＥＰＲＯＭ）、フラッシュ・メモリ、または不揮発性ランダム・アクセス・メモリ（ＲＡＭ）（例えば、強誘電体ＲＡＭ（ＦｅＲＡＭ）が挙げられ得るが、これらに限定されない。揮発性メモリは、例えば外部キャッシュ・メモリとして機能できる、ＲＡＭを含むことができる。例えばＲＡＭは、シンクロナスＲＡＭ（ＳＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）、シンクロナスＤＲＡＭ（ＳＤＲＡＭ）、ダブル・データ・レートＳＤＲＡＭ（ＤＤＲ  ＳＤＲＡＭ）、拡張ＳＤＲＡＭ（ＥＳＤＲＡＭ）、シンクリンクＤＲＡＭ（ＳＬＤＲＡＭ）、ダイレクト・ラムバスＲＡＭ（ＤＲＲＡＭ）、ダイレクト・ラムバス・ダイナミックＲＡＭ（ＤＲＤＲＡＭ）、およびラムバス・ダイナミックＲＡＭ（ＲＤＲＡＭ：Rambus dynamic RAM）などの、ただしこれらに限定されない、多くの形態で利用可能である。さらに、本明細書において開示されたシステムまたはコンピュータ実装方法のメモリ・コンポーネントは、これらおよび任意のその他の適切な種類のメモリを含むが、これらに限定されない、メモリを含むように意図されている。
【０１０３】
前述した内容は、システムおよびコンピュータ実装方法の単なる例を含んでいる。当然ながら、本発明を説明する目的で、コンポーネントまたはコンピュータ実装方法の考えられるすべての組合せについて説明することは不可能であるが、当業者は、本発明の多くのさらなる組合せおよび並べ替えが可能であるということを認識できる。さらに、「含む」、「有する」、「所有する」などの用語が、発明を実施するための形態、特許請求の範囲、付録、および図面において使用される範囲では、それらの用語は、「備えている」が特許請求における暫定的な用語として使用されるときに解釈されるような、用語「備えている」と同様の方法で、包含的であるように意図されている。
【０１０４】
本発明のさまざまな実施形態の説明は、例示の目的で提示されているが、網羅的であることは意図されておらず、開示された本発明の実施形態に制限されない。説明された実施形態の範囲から逸脱することなく多くの変更および変形が可能であることは、当業者にとって明らかであろう。本明細書で使用された用語は、本発明の実施形態の原理、実際の適用、または市場で見られる技術を超える技術的改良を最も良く説明するため、または他の当業者が本明細書で開示された本発明の実施形態を理解できるようにするために選択されている。
【図１】
2021521504.tif 000003
【図２】
2021521504.tif 000004
【図３】
2021521504.tif 000005
【図４】
2021521504.tif 000006
【図５】
2021521504.tif 000007
【図６】
2021521504.tif 000008
【図７】
2021521504.tif 000009
【図８】
2021521504.tif 000010
【図９】
2021521504.tif 000011
【図１０】
2021521504.tif 000012
【図１１】
2021521504.tif 000013
【図１２】
2021521504.tif 000014
【図１３】
2021521504.tif 000015
【図１４】
2021521504.tif 000016
【図１５】
2021521504.tif 000017
【図１６】
2021521504.tif 000018
【図１７】
2021521504.tif 000019
【図１８】
2021521504.tif 000020
【図１９】
2021521504.tif 000021
【図２０】
2021521504.tif 000022
【図２１】
2021521504.tif 000023
【手続補正書】
【提出日】令和3年4月13日(2021.4.13)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
システムであって、
量子回路の機械可読の仕様を含んでいる入力量子回路を、テンソル・スライシングのために識別された量子ビットの少なくとも２つのグループに基づいて部分回路に分割する分割コンポーネントであって、前記部分回路が、テンソル・スライシングに使用される量子ビットの関連付けられたセットを含んでいる、前記分割コンポーネントと、
前記部分回路に基づく各段内の前記入力量子回路を、１つの部分回路につき１つの段ずつ、シミュレートされた量子状態テンソルにシミュレートするシミュレーション・コンポーネントであって、部分回路に関連付けられた量子ビットのセットが、前記入力量子回路に対して前記シミュレートされた量子状態テンソルを量子状態テンソル・スライスに分割するために使用され、前記部分回路内の量子ゲートが、前記量子状態テンソル・スライスを更新された量子状態テンソル・スライスに更新するために使用される、前記シミュレーション・コンポーネントと、
前記シミュレートされた量子状態テンソルの前記更新された量子状態テンソル・スライスを、微小スライスとして二次ストレージに格納する読取り／書込みコンポーネントとを備えている、システム。
【請求項２】
前記読取り／書込みコンポーネントが、前記二次ストレージの少なくとも２つのディスク・セクタにわたるサイズを有する前記微小スライスを書き込み、前記さらに更新された量子状態テンソル・スライスを前記二次ストレージに格納する、請求項１に記載のシステム。
【請求項３】
前記読取り／書込みコンポーネントが、前記更新された量子状態テンソル・スライスを前記二次ストレージから取り出し、前記シミュレーション・コンポーネントが、別の部分回路を他の部分回路テンソルに処理し、前記二次ストレージから取り出された前記更新された量子状態テンソル・スライスを使用して、前記他の部分回路テンソルをさらに更新された量子状態テンソル・スライスに更新する、請求項１に記載のシステム。
【請求項４】
前記分割コンポーネントが、前記入力量子回路を、第１の量子ビット分割グループ、第２の量子ビット分割グループ、第３の量子ビット分割グループ、および第４の量子ビット分割グループを含んでいる、前記部分回路に対応する量子ビット分割グループに分割し、前記シミュレーション・コンポーネントが、前記第３の量子ビット分割グループの量子ゲートを前記第１の量子ビット分割グループおよび第２の量子ビット分割グループの前記テンソル・スライスに適用して、前記更新された量子状態テンソルを取得し、前記読取り／書込みコンポーネントが、前記更新された量子状態テンソル・スライスを前記二次ストレージからメモリに読み取り、前記シミュレーション・コンポーネントが、前記第４の量子ビット分割グループの量子ゲートを前記更新された量子状態テンソル・スライスに適用して、さらに更新された量子状態テンソルを取得する、請求項１に記載のシステム。
【請求項５】
プロセッサに動作可能なように結合されたデバイスによって、量子回路の機械可読の仕様を含んでいる入力量子回路を処理することを含んでいるコンピュータ実装方法であって、前記処理することが、
テンソル・スライシングのために識別された量子ビットの少なくとも２つのグループに基づいて、前記入力量子回路を部分回路のグループに分割することであって、前記部分回路のグループが、テンソル・スライシングに使用される量子ビットの関連付けられたセットを含んでいる、前記分割することと、
前記入力量子回路を、前記部分回路のグループに基づく各段内で、１つの部分回路につき１つの段ずつ、シミュレートされた量子状態テンソルにシミュレートすることであって、部分回路に関連付けられた量子ビットのセットが、前記入力量子回路に対して前記シミュレートされた量子状態テンソルを量子状態テンソル・スライスに分割するために使用され、前記部分回路内の量子ゲートが、前記量子状態テンソル・スライスを更新された量子状態テンソル・スライスに更新するために使用される、前記シミュレートすることと、
前記シミュレートされた量子状態テンソルの前記更新された量子状態テンソル・スライスを、微小スライスとして二次ストレージに格納することとを含んでいる、コンピュータ実装方法。
【請求項６】
前記シミュレートされた量子状態テンソルの前記更新された量子状態テンソル・スライスを微小スライスとして二次ストレージに前記格納することが、前記微小スライスを前記二次ストレージの少なくとも２つのディスク・セクタに格納することを含んでいる、請求項５に記載のコンピュータ実装方法。
【請求項７】
前記デバイスによって、別の部分回路を他の部分回路テンソルに処理することと、前更新された量子状態テンソル・スライスを前記二次ストレージから取り出すことと、二次ストレージから取り出された前記更新された量子状態テンソル・スライスを使用して前記他の部分回路テンソルをさらに更新された量子状態テンソル・スライスに更新することとをさらに含んでいる、請求項５に記載のコンピュータ実装方法。
【請求項８】
前記デバイスによって、前記さらに更新された量子状態テンソル・スライスを前記二次ストレージに格納することをさらに含んでいる、請求項７に記載のコンピュータ実装方法。
【請求項９】
前記入力量子回路を前記部分回路のグループに前記分割することが、前記入力量子回路を第１の部分回路分割グループ、第２の部分回路分割グループ、および第３の部分回路分割グループに分割することを含んでおり、前記更新された量子状態テンソル・スライスを前記格納することが、前記第３の部分回路分割グループのゲートを前記第１の部分回路分割グループおよび前記第２の部分回路分割グループに対応するテンソル・スライスに適用して前記更新された量子状態テンソル・スライスを取得することを含んでいる、請求項５に記載のコンピュータ実装方法。
【請求項１０】
前記入力量子回路を前記部分回路のグループに前記分割することが、前記入力量子回路を第４の部分回路分割グループに分割することをさらに含んでおり、前記更新された量子状態テンソル・スライスを前記二次ストレージから取り出すことをさらに含んでおり、前記二次ストレージから取り出された前記更新された量子状態テンソル・スライスを使用して、他の部分回路テンソルをさらに更新された量子状態テンソル・スライスに更新することが、前記第４の部分回路分割グループのゲートを適用することを含んでいる、請求項９に記載のコンピュータ実装方法。
【請求項１１】
プロセッサに動作可能なように結合されたデバイスによって、量子回路の機械可読の仕様を含んでいる入力量子回路をシミュレートすることを含んでいるコンピュータ実装方法であって、前記シミュレートすることが、
テンソル・スライシングのために識別された量子ビットの少なくとも２つのグループに基づいて、前記入力量子回路をメタ部分回路に分割することであって、前記メタ部分回路のうちの少なくとも１つが、単一のプロセッサのメモリを超える、前記分割することと、
メタ部分回路を単一のプロセッサの前記メモリ内に収まる下位部分回路にさらに分割することと、
前記下位部分回路に対してテンソルを計算することと、
テンソル・スライシングによって、前記テンソルをテンソル・スライスに縮小させることとを含んでいる、コンピュータ実装方法。
【請求項１２】
前記デバイスによって、別の部分回路のゲートを前記テンソル・スライスに適用して、量子状態データを表す更新されたテンソル・スライスを取得することと、前記更新されたテンソル・スライスを二次ストレージに格納することとをさらに含んでいる、請求項１１に記載のコンピュータ実装方法。
【請求項１３】
前記デバイスによって、前記更新されたテンソル・スライスを二次ストレージから取り出すことと、さらに他の部分回路のゲートを前記更新されたテンソル・スライスに適用して、さらに更新されたテンソル・スライスを取得することとをさらに含んでいる、請求項１２に記載のコンピュータ実装方法。
【請求項１４】
二次ストレージが、１つまたは複数のディスク・デバイスを備えており、メタ・スライスを微小スライスに構造化することをさらに含んでおり、前記微小スライスのサイズが、前記二次ストレージの少なくとも２つのディスク・セクタにわたり、前記更新されたテンソル・スライスを前記二次ストレージに前記格納することが、前記微小スライスを格納することを含んでいる、請求項１１に記載のコンピュータ実装方法。
【請求項１５】
量子回路の機械可読の仕様を含んでいる入力量子回路を含む量子回路をシミュレートするためのコンピュータ・プログラムであって、前記プロセッサに、請求項５ないし１４のいずれかに記載の方法を実行させるためのコンピュータ・プログラム。
【国際調査報告】
2021521504.tif 000024
2021521504.tif 000025