共用方式為


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

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

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

必要條件

如果您想要在 VS Code 中使用 Python,您也需要下列專案:

  • 安裝適用於 VS Code 的最新版本 Python 和 Jupyter 擴充功能。

  • 最新的 qdk Python 套件。

    python -m pip install --upgrade qdk
    

使用 Q# 程式手動快取

當您將資源估計工作提交至資源估算器時,會完全評估量子程式以擷取資源估計值。 如果您想要估計多次叫用的 Q# 作業的資源,例如,在多次迭代的迴圈中,執行資源估計作業可能需要很長的時間。 減少長時間運行時間的其中一種方法是執行作業一次、計算和快取其成本,並在後續呼叫上使用數據。 此技術方法稱為手動快取。

資源估算器target支援兩個函式來進行手動快取:Q# 和 BeginEstimateCaching(name: String, variant: Int): BoolBeginEstimateCaching 函式會接受兩個輸入:一個是 name,用來代表您想將成本快取的代碼段的唯一名稱,另一個是整數 variant,用於區分同一片段的不同成本變化。

注意

這兩個特殊作業 BeginEstimateCachingEndEstimateCaching 是資源估算器的內部作業。 其他執行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。