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
- Die neueste Version von Visual Studio Code oder öffnen Sie VS Code im Web.
- Die neueste Version der Azure Quantum Development Kit-Erweiterung . Installationsdetails finden Sie unter Installieren des modernen QDK in VS Code.
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 c
wiederverwendet, 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
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für