共用方式為


如何使用資源估算器優化執行大型程式

在本文中,您將瞭解如何使用 Azure Quantum Resource Estimator 執行大型Q#程式時優化運行時間。

如需如何執行資源估算器的詳細資訊,請參閱 執行資源估算器的不同方式。

必要條件

如果您想要在 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): BoolEndEstimateCaching(): UnitBeginEstimateCaching 函式會接受輸入 , name 這是您要快取成本之代碼段的唯一名稱,以及針對相同片段區分不同成本變異的整數 variant

注意

這兩個特殊作業 BeginEstimateCachingEndEstimateCaching 是資源估算器的內部作業。 其他執行 targets不支持它們。

例如,假設您在 Q# 反覆專案中呼叫了多次呼叫 ExpensiveOperation 的作業。 您可以使用快取來減少其估計時間:

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

重複使用 時 ExpensiveOperationBeginEstimateCaching 每次都會呼叫 。 第一次呼叫 時 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