Sdílet prostřednictvím


Optimalizace spouštění velkých programů pomocí Nástroje pro odhad prostředků

V tomto článku se dozvíte, jak optimalizovat dobu provádění při spouštění velkých Q# programů pomocí nástroje pro odhad prostředků Azure Quantum.

Informace o tom, jak spustit nástroj pro odhad prostředků, najdete v tématu Různé způsoby spuštění nástroje pro odhad prostředků.

Požadavky

Pokud chcete v editoru VS Code používat Python, potřebujete také následující:

  • Nainstalujte nejnovější verzi Pythonu a rozšíření Jupyter pro VS Code.

  • Nejnovější balíček Azure Quantum qsharp .

    python -m pip install --upgrade qsharp 
    

Zpracování velkých Q# programů

Když odešlete úlohu odhadu zdrojů do nástroje pro odhad prostředků, vyhodnotí se kvantový program zcela za účelem extrakce odhadů prostředků. Pokud chcete odhadnout prostředky Q# operace, která je vyvolána mnohokrát, například ve smyčce s mnoha iteracemi, může provádění úlohy odhadu prostředků trvat dlouhou dobu. Jedním zezpůsobůch Tato technika se nazývá ruční ukládání do mezipaměti.

Ruční ukládání do mezipaměti

Estimátor target prostředků podporuje dvě Q# funkce pro ruční ukládání do mezipaměti: BeginEstimateCaching(name: String, variant: Int): Bool a EndEstimateCaching(): Unit. BeginEstimateCaching funkce přebírá jako vstupy name jedinečný název fragmentu kódu, pro který chcete ukládat náklady do mezipaměti, a celé číslo variant , které rozlišuje různé varianty nákladů pro stejný fragment.

Poznámka:

Dvě zvláštní operace BeginEstimateCaching a EndEstimateCaching jsou vnitřními operacemi pro estimátor prostředků. Nejsou podporovány jiným spuštěním targets.

Řekněme například, že máte Q# operaci, která se volá ExpensiveOperation mnohokrát v iteraci. Ukládáním do mezipaměti můžete zkrátit dobu odhadu:

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

Při ExpensiveOperation opakovaném BeginEstimateCaching použití se volá pokaždé. Při BeginEstimateCaching prvním zavolání se vrátí true a zahájí akumulace dat nákladů. To způsobí, že kód bude pokračovat v provádění nákladného fragmentu kódu. Při EndEstimateCaching zavolání se data nákladů ukládají pro budoucí použití a začlení se do celkových nákladů programu.

Při ExpensiveOperation druhém zavolání (a následně), estimátor prostředků najde uložená (uložená) data nákladů v mezipaměti, zahrne je do celkových nákladů programu a vrátí false. To způsobí, že se nákladný fragment kódu přeskočí, a proto nástroj Pro odhad prostředků spustí program rychleji. EndEstimateCaching musí být umístěna na konci podmínky a oblasti uzavřené do BeginEstimateCaching-EndEstimateCaching můžou být vnořené.

SingleVariant() označuje, že data nákladů shromážděná při prvním spuštění je možné znovu použít ve všech následných spuštěních fragmentu kódu. Nemusí to být vždy případ. Pokud má váš kód například jiné náklady na liché a sudé hodnoty proměnné "c", můžete zadat variant hodnotu:

operation ExpensiveOperation(c: Int, b : Bool): Unit {
    if BeginEstimateCaching("MyNamespace.ExpensiveOperation", c % 2) {
        // Some code
        EndEstimateCaching();
    }
}

V tomto případě se mezipaměť liší pro liché a sudé hodnoty c. Jinými slovy, data shromážděná pro sudé hodnoty c se znovu používají pouze pro sudé hodnoty ca totéž platí pro liché hodnoty c.

Poznámka:

Pokud při práci s nástrojem pro odhad prostředků narazíte na nějaký problém, podívejte se na stránku Řešení potíží nebo se obraťte AzureQuantumInfo@microsoft.comna kontakt .