Come ottimizzare l'esecuzione di programmi di grandi dimensioni con Resource Estimator
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 moderno 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 di 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 a Resource Estimator, 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.
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 name
oggetto che è 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 molte ExpensiveOperation
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 dei costi archiviati (memorizzati nella cache), lo incorpora nel costo complessivo del programma e restituisce false
. In questo modo, il frammento di codice dispendioso viene ignorato, pertanto 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 i 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 durante l'utilizzo di Resource Estimator, consultare la pagina Risoluzione dei problemi o contattare AzureQuantumInfo@microsoft.com.
Passaggi successivi
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per