Resource Estimator を使用して大規模なプログラムの実行を最適化する方法

この記事では、Azure Quantum Resource Estimator を使用して大規模なQ#プログラムを実行するときの実行時間を最適化する方法について説明します。

リソース推定器を実行する方法については、「Resource Estimator を実行するさまざまな方法」を参照してください。

前提条件

VS Code で Python を使用する場合は、次のものが必要です。

  • 最新バージョンの Python と VS Code 用 の Jupyter 拡張機能をインストールします。

  • 最新の Azure Quantum qsharp パッケージ。

    python -m pip install --upgrade qsharp 
    

大規模な Q# プログラムを処理する方法

リソース推定ジョブをリソース推定器に送信すると、量子プログラムが完全に評価され、リソースの見積もりが抽出されます。 繰り返しが多いループなど、何度も呼び出される操作の Q# リソースを推定する場合、リソース推定ジョブの実行に時間がかかる場合があります。 長い実行時間を短縮する 1 つの方法は、操作を 1 回実行し、そのコストを計算してキャッシュし、後続の呼び出しでデータを使用することです。 この手法は、手動キャッシュと呼ばれます。

Resource Estimator target では、手動キャッシュを実行するための 2 つのQ#関数と EndEstimateCaching(): UnitがサポートされていますBeginEstimateCaching(name: String, variant: Int): BoolBeginEstimateCaching 関数は、コストを name キャッシュするコード フラグメントの一意の名前である を入力として受け取り、同じフラグメントに対して異なるバリエーションのコストを区別する整数 variant を受け取ります。

注意

2 つの特殊な操作 BeginEstimateCachingEndEstimateCaching は、リソース推定器の組み込み操作です。 これらは、他の実行 targetsではサポートされていません。

たとえば、反復で何度も呼び出される というExpensiveOperation操作があるとQ#します。 キャッシュを使用して、推定時間を短縮できます。

operation ExpensiveOperation(c: Int, b : Bool): Unit {
    if BeginEstimateCaching("MyNamespace.ExpensiveOperation", SingleVariant()) {
        // Code block to be cached
        EndEstimateCaching();
    }
}

が繰り返し使用される場合 ExpensiveOperationBeginEstimateCaching は毎回 呼び出されます。 が初めて呼び出されると BeginEstimateCaching 、コスト データの true 蓄積が返されて開始されます。 これにより、コードはコストの高いコード フラグメントの実行を続行します。 が呼び出されると EndEstimateCaching 、コスト データは将来の使用のために格納され、プログラムの全体的なコストに組み込まれます。

が 2 回目 (その後) 呼び出されると ExpensiveOperation 、Resource Estimator は格納されている (キャッシュされた) コスト データを検索し、プログラムの全体的なコストに組み込んで を返します false。 これにより、高価なコード フラグメントがスキップされるため、Resource Estimator はプログラムをより高速に実行します。 EndEstimateCaching は条件の最後に配置する必要があり、 で BeginEstimateCaching-EndEstimateCaching 囲まれた領域は入れ子にすることができます。

SingleVariant() は、最初の実行で収集されたコスト データを、コード フラグメントの後続のすべての実行で再利用できることを示します。 これは必ずしも当てはまるとは限りません。 たとえば、変数 'c' の奇数と偶数の値に対してコードのコストが異なる場合は、値を variant 指定できます。

operation ExpensiveOperation(c: Int, b : Bool): Unit {
    if BeginEstimateCaching("MyNamespace.ExpensiveOperation", c % 2) {
        // Some code
        EndEstimateCaching();
    }
}

この場合、キャッシュは の奇数と偶数の c値に対して異なります。 言い換えると、 の偶数の値 c に対して収集されたデータは、 の偶数値 cにのみ再利用され、 の奇数値 cにも同じことが適用されます。

注意

リソース推定ツールの使用中に問題が発生した場合は、[トラブルシューティング] ページをチェックするか、 にお問い合わせくださいAzureQuantumInfo@microsoft.com

次の手順