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
- Nejnovější verze editoru Visual Studio Code nebo otevření editoru VS Code na webu
- Nejnovější verze rozšíření Azure Quantum Development Kit. Podrobnosti o instalaci najdete v tématu Instalace sady QDK ve VS Code.
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 c
a 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 .