Jak zoptymalizować uruchamianie dużych programów za pomocą narzędzia do szacowania zasobów

W tym artykule 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

Jeśli chcesz użyć języka Python w programie VS Code, potrzebne są również następujące elementy:

  • Zainstaluj najnowszą wersję rozszerzeń języka Python i programu 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

Podczas przesyłania 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 iteracji, 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.

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 name unikatową 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

Dwie operacje BeginEstimateCaching specjalne 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. Powoduje to kontynuowanie wykonywania kosztownego fragmentu kodu. 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 można zagnieżdżać.

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 być zawsze przypadek. 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 takim przypadku pamięć podręczna jest inna dla nieparzyszonych, a parzysłych wartości .c Innymi słowy, dane zebrane dla parzysłych c wartości są ponownie używane tylko dla parzysłych wartości , ca 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.comprogramem .

Następne kroki