如何使用資源估算器優化執行大型程式
在本文中,您將瞭解如何使用 Azure Quantum Resource Estimator 執行大型Q#程式時優化運行時間。
如需如何執行資源估算器的詳細資訊,請參閱 執行資源估算器的不同方式。
必要條件
- 最新版的 Visual Studio Code 或開啟 Web上的 VS Code。
- 最新版的 Azure Quantum 開發套件延伸模組。 如需安裝詳細數據,請參閱 在 VS Code 上安裝 QDK。
如果您想要在 VS Code 中使用 Python,您也需要下列專案:
安裝最新版的 Python 和適用於 VS Code 的 Jupyter 擴充功能。
最新的 Azure Quantum
qsharp
套件。python -m pip install --upgrade qsharp
如何處理大型 Q# 程式
當您將資源估計工作提交至資源估算器時,會完全評估量子程式以擷取資源估計值。 如果您想要估計多次叫用之作業的資源 Q# ,例如,在具有許多反覆項目的迴圈中,執行資源估計作業可能需要很長的時間。 減少長時間運行時間的其中一種方法是執行作業一次、計算和快取其成本,並在後續呼叫上使用數據。 這項技術稱為手動快取。
手動快取
資源估算器 target 支援兩 Q# 個函式來執行手動快取: BeginEstimateCaching(name: String, variant: Int): Bool
和 EndEstimateCaching(): Unit
。 BeginEstimateCaching
函式會接受輸入 , name
這是您要快取成本之代碼段的唯一名稱,以及針對相同片段區分不同成本變異的整數 variant
。
注意
這兩個特殊作業 BeginEstimateCaching
和 EndEstimateCaching
是資源估算器的內部作業。 其他執行 targets不支持它們。
例如,假設您在 Q# 反覆專案中呼叫了多次呼叫 ExpensiveOperation
的作業。 您可以使用快取來減少其估計時間:
operation ExpensiveOperation(c: Int, b : Bool): Unit {
if BeginEstimateCaching("MyNamespace.ExpensiveOperation", SingleVariant()) {
// Code block to be cached
EndEstimateCaching();
}
}
重複使用 時 ExpensiveOperation
, BeginEstimateCaching
每次都會呼叫 。 第一次呼叫 時 BeginEstimateCaching
,它會傳回 true
並開始累積成本數據。 這會導致程式代碼繼續執行昂貴的代碼段。 呼叫 時 EndEstimateCaching
,成本數據會儲存以供日後使用,並併入程序的整體成本。
第二次呼叫 時 ExpensiveOperation
,資源估算器會尋找已儲存的(快取)成本數據,並將其併入程序的整體成本,並傳 false
回 。 這會導致略過昂貴的代碼段,因此資源估算器會更快速地執行程式。 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。