Delen via


Het optimaliseren van het uitvoeren van grote programma's met de resource-estimator

In dit artikel leert u hoe u de uitvoeringstijd kunt optimaliseren bij het uitvoeren van een groot programma in Q# met de Azure Quantum Resource Estimator.

Voor informatie over hoe de Resource Estimator moet worden uitgevoerd, zie Verschillende manieren om de Resource Estimator uit te voeren.

Vereisten

Als u Python in VS Code wilt gebruiken, hebt u ook het volgende nodig:

  • Installeer de nieuwste versie van de Python- en Jupyter-extensies voor VS Code.

  • Het nieuwste Azure Quantum qsharp-pakket.

    python -m pip install --upgrade qsharp 
    

Handmatig cachen met programma's van Q#

Wanneer u een taak voor resourceraming indient bij de resource-estimator, wordt het kwantumprogramma volledig geëvalueerd met als doel de resourceramingen te verkrijgen. Als u de bronnen van een Q#-bewerking wilt schatten die vaak wordt aangeroepen, bijvoorbeeld in een lus met veel iteraties, kan het uitvoeren van de bronramingstaak lang duren. Een manier om lange uitvoeringstijden te verminderen, is door de bewerking één keer uit te voeren, de kosten ervan te berekenen en in de cache te plaatsen en de gegevens te gebruiken voor volgende aanroepen. Deze techniek wordt handmatige cachinggenoemd.

De resource-estimator target ondersteunt twee Q# functies voor het uitvoeren van handmatige caching: BeginEstimateCaching(name: String, variant: Int): Bool en EndEstimateCaching(): Unit. BeginEstimateCaching functie gebruikt een name dat de unieke naam is van het codefragment waarvoor u kosten in de cache wilt opslaan, en een geheel getal variant dat verschillende varianten van kosten voor hetzelfde fragment onderscheidt.

Notitie

De twee speciale bewerkingen BeginEstimateCaching en EndEstimateCaching zijn intrinsieke bewerkingen voor de resource-estimator. Ze worden niet ondersteund door andere uitvoeringen.

Stel dat u een Q#-bewerking hebt die ExpensiveOperation wordt genoemd en die vaak wordt aangeroepen in een iteratie. U kunt caching gebruiken om de schattingstijd te verminderen:

operation ExpensiveOperation(c: Int, b : Bool): Unit {
    if BeginEstimateCaching("MyNamespace.ExpensiveOperation", SingleVariant()) {
        // Code block to be cached
        EndEstimateCaching();
    }
}

Wanneer ExpensiveOperation herhaaldelijk wordt gebruikt, wordt BeginEstimateCaching elke keer aangeroepen. Wanneer BeginEstimateCaching voor de eerste keer wordt aangeroepen, retourneert true en begint de verzameling van kostengegevens. Dit zorgt ervoor dat code doorgaat met het uitvoeren van het dure codefragment. Wanneer EndEstimateCaching wordt aangeroepen, worden de kostengegevens opgeslagen voor toekomstig gebruik en worden ze opgenomen in de totale kosten van het programma.

Wanneer ExpensiveOperation de tweede keer (en vervolgens) wordt aangeroepen, vindt de resource-estimator de gecachete kostengegevens, neemt deze op in de totale kosten van het programma en retourneert false. Dit zorgt ervoor dat dure codefragmenten worden overgeslagen, daarom wordt het programma sneller uitgevoerd door de Resource Estimator. EndEstimateCaching moet aan het einde van de voorwaarde worden geplaatst en regio's omsloten door BeginEstimateCaching-EndEstimateCaching kunnen worden genest.

SingleVariant() geeft aan dat de kostengegevens die tijdens de eerste uitvoering verzameld worden, opnieuw kunnen worden gebruikt in alle volgende uitvoeringen van het codefragment. Dit is misschien niet altijd het geval. Als uw code bijvoorbeeld verschillende kosten heeft voor oneven en even waarden van een variabele 'c', kunt u een waarde variant opgeven:

operation ExpensiveOperation(c: Int, b : Bool): Unit {
    if BeginEstimateCaching("MyNamespace.ExpensiveOperation", c % 2) {
        // Some code
        EndEstimateCaching();
    }
}

In dit geval verschilt de cache voor oneven en even waarden van c. Met andere woorden, gegevens die worden verzameld voor even waarden van c, worden alleen hergebruikt voor even waarden van c, en hetzelfde geldt voor oneven waarden van c.

Notitie

Als er een probleem optreedt tijdens het werken met de Resource Estimator, raadpleeg de Troubleshooting-pagina, of neem contact op via AzureQuantumInfo@microsoft.com.