Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo articolo illustra come usare lo strumento di stima delle risorse Di Microsoft Quantum per ottimizzare i tempi di esecuzione per programmi di grandi dimensioni Q# .
Per informazioni su come eseguire lo strumento di stima delle risorse, vedere Diversi modi per eseguire lo strumento di stima delle risorse.
Prerequisiti
- La versione più recente di Visual Studio Code (VS Code) o aprire VS Code per il Web.
- La versione più recente dell'estensione Microsoft Quantum Development Kit (QDK). Per informazioni dettagliate sull'installazione, vedere Configurare QDK.
Se si vuole usare Python in VS Code, è anche necessario eseguire le operazioni seguenti:
Installare le versioni più recenti delle estensioni Python e Jupyter in VS Code.
Installare la versione più recente della
qdklibreria Python.python -m pip install --upgrade qdk
Cache manuale con programmi Q#
Quando si invia un processo di stima delle risorse allo strumento di stima delle risorse, lo strumento di stima delle risorse valuta l'intero programma quantistico per calcolare le stime. Se il Q# programma chiama la stessa operazione molte volte, ad esempio in un ciclo con molte iterazioni, il tempo di esecuzione del processo di stima delle risorse potrebbe essere molto lungo. Per ridurre l'esecuzione prolungata di questi tipi di programmi, è possibile eseguire l'operazione una sola volta per calcolare e memorizzarne i costi nella cache e quindi usare i dati memorizzati nella cache nelle chiamate successive all'operazione. Questa tecnica è detta memorizzazione nella cache manuale.
Lo strumento di stima target delle risorse supporta due Q# funzioni per eseguire la memorizzazione nella cache manuale: BeginEstimateCaching e EndEstimateCaching. La BeginEstimateCaching funzione accetta gli input seguenti:
| Parametro di input | TIPO | Descrzione |
|---|---|---|
name |
Stringa | Nome univoco per la parte di codice per cui si desidera memorizzare nella cache i costi |
variant |
int | Indica la variante del costo per la stessa parte di codice |
Nota
Le due operazioni BeginEstimateCaching speciali e EndEstimateCaching sono operazioni intrinseche per lo strumento di stima delle risorse. Se il Q# programma contiene una di queste operazioni, il programma non può essere eseguito in un altro simulatore o hardware targets.
Supponiamo, ad esempio, di avere un'operazione Q# chiamata ExpensiveOperation molte volte nel programma. Memorizzare nella cache la stima dei costi da eseguire ExpensiveOperation per ridurre il tempo di esecuzione totale della stima delle risorse:
operation ExpensiveOperation(c: Int, b : Bool): Unit {
if BeginEstimateCaching("MyNamespace.ExpensiveOperation", SingleVariant()) {
// Code block to be cached
EndEstimateCaching();
}
}
La BeginEstimateCaching funzione viene chiamata ogni volta che il programma chiama ExpensiveOperation. Quando BeginEstimateCaching viene chiamato per la prima volta, restituisce true e inizia ad accumulare i dati sui costi per ExpensiveOperation. In questo modo il codice procede con l'esecuzione del frammento di codice costoso. Quando EndEstimateCaching viene chiamato, i dati sui costi vengono archiviati per uso futuro e vengono incorporati nel costo complessivo del programma.
Quando ExpensiveOperation viene chiamato la seconda volta (e successivamente), lo strumento di stima delle risorse trova i dati dei costi archiviati (memorizzati nella cache), lo incorpora nel costo complessivo del programma e restituisce false. In questo modo, lo strumento di stima delle risorse ignora le esecuzioni successive del frammento di codice costoso. Affinché la memorizzazione nella cache funzioni correttamente, posizionare EndEstimateCaching alla fine della condizione e annidare le regioni racchiuse tra BeginEstimateCaching e EndEstimateCaching.
L'argomento SingleVariant() indica che i dati sui costi raccolti nella prima esecuzione di ExpensiveOperation possono essere riutilizzati in tutte le esecuzioni successive del frammento di codice. Questo potrebbe non essere sempre il caso. Ad esempio, se il codice presenta costi diversi per valori dispari e pari di una variabile c, è possibile specificare un variant valore:
operation ExpensiveOperation(c: Int, b : Bool): Unit {
if BeginEstimateCaching("MyNamespace.ExpensiveOperation", c % 2) {
// Some code
EndEstimateCaching();
}
}
In questo caso, la cache è diversa per valori dispari e pari di c. In altre parole, i dati raccolti per i valori pari di c vengono riutilizzati solo per i valori pari di c, e lo stesso vale per i valori dispari di c.
Nota
Se si verificano problemi quando si usa lo strumento di stima delle risorse, vedere la pagina Risoluzione dei problemi o contattare AzureQuantumInfo@microsoft.com.