Come ottimizzare l'esecuzione di programmi di grandi dimensioni con Lo strumento di stima delle risorse
Questo articolo illustra come ottimizzare il tempo di esecuzione durante l'esecuzione di programmi di grandi dimensioni Q# con Lo strumento di stima delle risorse di Azure Quantum.
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 o aprire VS Code sul Web.
- La versione più recente dell'estensione Azure Quantum Development Kit. Per informazioni dettagliate sull'installazione, vedere Installazione di QDK in VS Code.
Se si vuole usare Python in VS Code, sono necessari anche gli elementi seguenti:
Installare la versione più recente delle estensioni Python e Jupyter per VS Code.
Pacchetto Azure Quantum
qsharp
più recente.python -m pip install --upgrade qsharp
Come gestire programmi di grandi dimensioni Q#
Quando si invia un processo di stima delle risorse allo strumento di stima delle risorse, il programma quantistico viene valutato completamente per estrarre le stime delle risorse. Se si desidera stimare le risorse di un'operazione Q# richiamata più volte, ad esempio in un ciclo con molte iterazioni, l'esecuzione del processo di stima delle risorse potrebbe richiedere molto tempo. Un modo per ridurre i tempi di esecuzione lunghi consiste nell'eseguire l'operazione una sola volta, calcolare e memorizzarne nella cache i costi e usare i dati nelle chiamate successive. Questa tecnica è detta memorizzazione nella cache manuale.
Memorizzazione nella cache manuale
Resource Estimator target supporta due Q# funzioni per eseguire la memorizzazione nella cache manuale: BeginEstimateCaching(name: String, variant: Int): Bool
e EndEstimateCaching(): Unit
. BeginEstimateCaching
la funzione accetta come input un che name
è il nome univoco del frammento di codice per il quale si desidera memorizzare nella cache i costi e un numero intero variant
che distingue diverse varianti di costo per lo stesso frammento.
Nota
Le due operazioni BeginEstimateCaching
speciali e EndEstimateCaching
sono operazioni intrinseche per lo strumento di stima delle risorse. Non sono supportati da altre esecuzioni targets.
Si supponga, ad esempio, di avere un'operazione Q# denominata ExpensiveOperation
più volte in un'iterazione. È possibile usare la memorizzazione nella cache per ridurre il tempo di stima:
operation ExpensiveOperation(c: Int, b : Bool): Unit {
if BeginEstimateCaching("MyNamespace.ExpensiveOperation", SingleVariant()) {
// Code block to be cached
EndEstimateCaching();
}
}
Quando ExpensiveOperation
viene usato ripetutamente, BeginEstimateCaching
viene chiamato ogni volta. Quando BeginEstimateCaching
viene chiamato per la prima volta, restituisce true
e inizia l'accumulo di dati sui costi. 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 l'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 di costo archiviati (memorizzati nella cache), lo incorpora nel costo complessivo del programma e restituisce false
. In questo modo, il frammento di codice dispendioso viene ignorato, quindi l'utilità di stima delle risorse esegue il programma più velocemente. EndEstimateCaching
deve essere posizionato alla fine della condizione e le aree racchiuse in BeginEstimateCaching-EndEstimateCaching
possono essere annidate.
SingleVariant()
indica che i dati sui costi raccolti nella prima esecuzione possono essere riutilizzati in tutte le esecuzioni successive del frammento di codice. Questo potrebbe non essere sempre il caso. Ad esempio, se il codice ha un costo diverso 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 verifica un problema durante l'uso dello strumento di stima delle risorse, consultare la pagina Risoluzione dei problemi o contattare AzureQuantumInfo@microsoft.com.