Resource Estimator を使用して大規模なプログラムの実行を最適化する方法
この記事では、Azure Quantum Resource Estimator を使用して大規模なQ#プログラムを実行するときの実行時間を最適化する方法について説明します。
リソース推定器を実行する方法については、「Resource Estimator を実行するさまざまな方法」を参照してください。
前提条件
- 最新バージョンの Visual Studio Code または Web 上で VS Code を開きます。
- Azure Quantum Development Kit 拡張機能の最新バージョン。 インストールの詳細については、「 VS Code へのモダン QDK のインストール」を参照してください。
VS Code で Python を使用する場合は、次のものが必要です。
最新の 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): Bool
。 BeginEstimateCaching
関数は、コストを name
キャッシュするコード フラグメントの一意の名前である を入力として受け取り、同じフラグメントに対して異なるバリエーションのコストを区別する整数 variant
を受け取ります。
注意
2 つの特殊な操作 BeginEstimateCaching
と EndEstimateCaching
は、リソース推定器の組み込み操作です。 これらは、他の実行 targetsではサポートされていません。
たとえば、反復で何度も呼び出される というExpensiveOperation
操作があるとQ#します。 キャッシュを使用して、推定時間を短縮できます。
operation ExpensiveOperation(c: Int, b : Bool): Unit {
if BeginEstimateCaching("MyNamespace.ExpensiveOperation", SingleVariant()) {
// Code block to be cached
EndEstimateCaching();
}
}
が繰り返し使用される場合 ExpensiveOperation
、 BeginEstimateCaching
は毎回 呼び出されます。 が初めて呼び出されると 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。
次の手順
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示