Freigeben über


Optimieren der Ausführung großer Programme mit dem Resource Estimator

In diesem Artikel erfahren Sie, wie Sie die Ausführungszeit beim Ausführen großer Q# Programme mit dem Azure Quantum Resource Estimator optimieren.

Informationen zum Ausführen des Resource Estimators finden Sie unter Verschiedene Möglichkeiten zum Ausführen des Resource Estimators.

Voraussetzungen

Wenn Sie Python in VS Code verwenden möchten, benötigen Sie außerdem Folgendes:

  • Installieren Sie die neueste Version von Python und Jupyter-Erweiterungen für VS Code.

  • Das neueste Azure Quantum-Paket qsharp .

    python -m pip install --upgrade qsharp 
    

Behandeln großer Q# Programme

Wenn Sie einen Ressourcenschätzungsauftrag an den Resource Estimator übermitteln, wird das Quantenprogramm vollständig ausgewertet, um die Ressourcenschätzungen zu extrahieren. Wenn Sie die Ressourcen eines Q# Vorgangs schätzen möchten, der häufig aufgerufen wird, z. B. in einer Schleife mit vielen Iterationen, kann die Ausführung des Ressourcenschätzungsauftrags lange dauern. Eine Möglichkeit, lange Ausführungszeiten zu verkürzen, besteht darin, den Vorgang einmal auszuführen, seine Kosten zu berechnen und zwischenzuspeichern und die Daten für nachfolgende Aufrufe zu verwenden. Diese Technik wird als manuelles Zwischenspeichern bezeichnet.

Der Resource Estimator target unterstützt zwei Q# Funktionen zum Ausführen der manuellen Zwischenspeicherung: BeginEstimateCaching(name: String, variant: Int): Bool und EndEstimateCaching(): Unit. BeginEstimateCaching -Funktion übernimmt als Eingaben einen name , der der eindeutige Name des Codefragments ist, für das Sie Kosten zwischenspeichern möchten, und eine ganze Zahl variant , die verschiedene Varianten von Kosten für dasselbe Fragment unterscheidet.

Hinweis

Die beiden speziellen Vorgänge BeginEstimateCaching und EndEstimateCaching sind systeminterne Vorgänge für den Resource Estimator. Sie werden von anderen Ausführungen targetsnicht unterstützt.

Angenommen, Sie haben einen Q# Vorgang namens ExpensiveOperation , der in einer Iteration mehrmals aufgerufen wird. Sie können die Zwischenspeicherung verwenden, um die Schätzzeit zu verkürzen:

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

Wenn ExpensiveOperation wiederholt verwendet wird, BeginEstimateCaching wird jedes Mal aufgerufen. Wenn BeginEstimateCaching sie zum ersten Mal aufgerufen wird, wird es zurückgegeben true und beginnt mit der Akkumulation von Kostendaten. Dies führt dazu, dass Code mit der Ausführung des teuren Codefragments fortfährt. Wenn EndEstimateCaching aufgerufen wird, werden die Kostendaten für die zukünftige Verwendung gespeichert und in die Gesamtkosten des Programms einbezogen.

Beim ExpensiveOperation zweiten Aufruf (und anschließend) findet der Resource Estimator die gespeicherten (zwischengespeicherten) Kostendaten, bindet sie in die Gesamtkosten des Programms ein und gibt zurück false. Dies führt dazu, dass teure Codefragmente übersprungen werden, sodass der Resource Estimator das Programm schneller ausführt. EndEstimateCaching sollte am Ende der Bedingung platziert werden, und in BeginEstimateCaching-EndEstimateCaching eingeschlossene Regionen können geschachtelt werden.

SingleVariant() gibt an, dass die bei der ersten Ausführung gesammelten Kostendaten in allen nachfolgenden Ausführungen des Codefragments wiederverwendet werden können. Dies ist möglicherweise nicht immer der Fall. Wenn Ihr Code beispielsweise unterschiedliche Kosten für ungerade und gerade Werte einer Variablen "c" aufweist, können Sie einen variant Wert angeben:

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

In diesem Fall unterscheidet sich der Cache für ungerade und gerade Werte von c. Mit anderen Worten: Daten, die für gerade Werte von c gesammelt werden, werden nur für gerade Werte von cwiederverwendet, und das gleiche gilt für ungerade Werte von c.

Hinweis

Wenn beim Arbeiten mit dem Resource Estimator ein Problem aufgetreten ist, lesen Sie die Seite Problembehandlung, oder wenden Sie sich an AzureQuantumInfo@microsoft.com.

Nächste Schritte