Condividi tramite


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

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