Jak zoptymalizować uruchamianie dużych programów za pomocą narzędzia do szacowania zasobów
Z tego artykułu dowiesz się, jak zoptymalizować czas wykonywania podczas uruchamiania dużych Q# programów za pomocą narzędzia do szacowania zasobów usługi Azure Quantum.
Aby uzyskać informacje o sposobie uruchamiania narzędzia do szacowania zasobów, zobacz Różne sposoby uruchamiania narzędzia do szacowania zasobów.
Wymagania wstępne
- Najnowsza wersja programu Visual Studio Code lub otwórz program VS Code w sieci Web.
- Najnowsza wersja rozszerzenia zestawu Azure Quantum Development Kit. Aby uzyskać szczegółowe informacje na temat instalacji, zobacz Instalowanie zestawu QDK w programie VS Code.
Jeśli chcesz użyć języka Python w programie VS Code, potrzebne są również następujące elementy:
Zainstaluj najnowszą wersję języka Python i rozszerzeń Jupyter dla programu VS Code.
Najnowszy pakiet usługi Azure Quantum
qsharp
.python -m pip install --upgrade qsharp
Jak obsługiwać duże Q# programy
Po przesłaniu zadania szacowania zasobów do narzędzia do szacowania zasobów program kwantowy jest obliczany całkowicie w celu wyodrębnienia oszacowań zasobów. Jeśli chcesz oszacować zasoby Q# operacji wywoływanej wiele razy, na przykład w pętli z wieloma iteracjami, wykonanie zadania szacowania zasobów może zająć dużo czasu. Jednym ze sposobów zmniejszenia długiego czasu wykonywania jest uruchomienie operacji raz, obliczenie i buforowanie kosztów oraz użycie danych w kolejnych wywołaniach. Ta technika jest nazywana buforowaniem ręcznym.
Ręczne buforowanie
Narzędzie do szacowania target zasobów obsługuje dwie Q# funkcje do ręcznego buforowania: BeginEstimateCaching(name: String, variant: Int): Bool
i EndEstimateCaching(): Unit
. BeginEstimateCaching
funkcja przyjmuje jako dane wejściowe, czyli unikatową name
nazwę fragmentu kodu, dla którego chcesz buforować koszty, oraz liczbę całkowitą variant
, która rozróżnia różne warianty kosztów dla tego samego fragmentu.
Uwaga
Te dwie specjalne operacje BeginEstimateCaching
i EndEstimateCaching
są operacjami wewnętrznymi narzędzia do szacowania zasobów. Nie są one obsługiwane przez inne wykonanie targets.
Załóżmy na przykład, że masz operację Q# o nazwie ExpensiveOperation
, która jest wywoływana wiele razy w iteracji. Możesz użyć buforowania, aby skrócić czas szacowania:
operation ExpensiveOperation(c: Int, b : Bool): Unit {
if BeginEstimateCaching("MyNamespace.ExpensiveOperation", SingleVariant()) {
// Code block to be cached
EndEstimateCaching();
}
}
Gdy ExpensiveOperation
jest używany wielokrotnie, BeginEstimateCaching
jest wywoływany za każdym razem. Gdy BeginEstimateCaching
jest wywoływany po raz pierwszy, zwraca true
i rozpoczyna akumulację danych kosztów. Spowoduje to kontynuowanie wykonywania kosztownego fragmentu kodu przez kod. Po EndEstimateCaching
wywołaniu dane kosztów są przechowywane na potrzeby przyszłego użycia i są uwzględniane w ogólnym koszcie programu.
Gdy ExpensiveOperation
jest wywoływany po raz drugi (a następnie), narzędzie do szacowania zasobów znajduje przechowywane (buforowane) dane kosztów, uwzględnia je w ogólnym koszcie programu i zwraca wartość false
. Powoduje to pominięcie kosztownego fragmentu kodu, dlatego narzędzie do szacowania zasobów wykonuje program szybciej. EndEstimateCaching
należy umieścić na końcu warunku, a regiony ujęte w BeginEstimateCaching-EndEstimateCaching
elementy mogą być zagnieżdżone.
SingleVariant()
wskazuje, że dane kosztów zebrane podczas pierwszego wykonania mogą być ponownie używane we wszystkich kolejnych wykonaniach fragmentu kodu. Może to nie zawsze być tak. Jeśli na przykład kod ma inny koszt dla nieparzystnych, a nawet wartości zmiennej "c", możesz podać variant
wartość:
operation ExpensiveOperation(c: Int, b : Bool): Unit {
if BeginEstimateCaching("MyNamespace.ExpensiveOperation", c % 2) {
// Some code
EndEstimateCaching();
}
}
W tym przypadku pamięć podręczna różni się od nieparzystnych, a parzystych c
wartości . Innymi słowy, dane zebrane dla parzysłych c
wartości są ponownie używane tylko dla parzysłych c
wartości , a to samo dotyczy nieparzystwych wartości c
.
Uwaga
Jeśli wystąpi jakikolwiek problem podczas pracy z narzędziem do szacowania zasobów, zapoznaj się ze stroną Rozwiązywanie problemów lub skontaktuj się z .AzureQuantumInfo@microsoft.com