Share via


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

在本文中,您將瞭解如何使用 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

下一步