Freigeben über


Optimieren der Ausführung großer Programme mit dem Ressourcenschätzer

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 der Ressourcenstimator finden Sie unter "Verschiedene Möglichkeiten zum Ausführen des Ressourcenstimators".

Voraussetzungen

Wenn Sie Python in VS Code verwenden möchten, benötigen Sie auch Folgendes:

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

  • Das neueste Azure Quantum-Paket qsharp .

    python -m pip install --upgrade qsharp 
    

So behandeln Sie große Q# Programme

Wenn Sie einen Ressourcenschätzungsauftrag an den Ressourcenschätzer ü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 oft aufgerufen wird, z. B. in einer Schleife mit vielen Iterationen, kann die Ausführung des Ressourcenschätzungsauftrags eine lange Zeit dauern. Eine Möglichkeit, lange Ausführungszeiten zu reduzieren, besteht darin, den Vorgang einmal auszuführen, die Kosten zu berechnen und zwischenzuspeichern und die Daten für nachfolgende Aufrufe zu verwenden. Diese Technik wird als manuelles Zwischenspeichern bezeichnet.

Manuelles Zwischenspeichern

Die Ressourcenstimator target unterstützt zwei Q# Funktionen zum Ausführen eines manuellen Zwischenspeicherns: BeginEstimateCaching(name: String, variant: Int): Bool und EndEstimateCaching(): Unit. BeginEstimateCaching die Funktion verwendet als Eingaben, name bei denen es sich um den eindeutigen Namen des Codefragments handelt, für das Sie Kosten zwischenspeichern möchten, und eine ganze Zahl variant , die unterschiedliche Kostenvarianten für dasselbe Fragment unterscheidet.

Hinweis

Die beiden speziellen Vorgänge und EndEstimateCaching sind systeminterne Vorgänge BeginEstimateCaching für die Ressourcenschätzung. Sie werden von anderer Ausführung targetsnicht unterstützt.

Angenommen, Sie haben einen Q# Vorgang aufgerufen, der in einer Iteration mehrmals aufgerufen ExpensiveOperation wird. Sie können zwischenspeichern, um die Geschätzte Zeit zu reduzieren:

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

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

Wenn ExpensiveOperation die zweite Zeit (und anschließend) aufgerufen wird, findet der Ressourcen-Estimator die gespeicherten (zwischengespeicherten) Kostendaten, integriert sie in die Gesamtkosten des Programms und gibt zurück false. Dies bewirkt, dass teure Codefragmente übersprungen werden, daher führt der Ressourcen-Estimator das Programm schneller aus. EndEstimateCaching sollte am Ende der Bedingung platziert werden, und regionen, die eingeschlossen BeginEstimateCaching-EndEstimateCaching sind, können geschachtelt werden.

SingleVariant() gibt an, dass die für die erste 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. Anders ausgedrückt: Daten, die für gerade Werte c gesammelt werden, werden nur für gerade Werte cwiederverwendet, und das gleiche gilt für ungerade Werte von c.

Hinweis

Wenn beim Arbeiten mit der Ressourcenschätzung probleme auftreten, schauen Sie sich die Seite "Problembehandlung" an, oder wenden Sie sich an den Kontakt AzureQuantumInfo@microsoft.com.