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

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 ce 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.