Delen via


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

In dit artikel leert u hoe u de uitvoeringstijd optimaliseert bij het uitvoeren van grote Q# programma's met de Azure Quantum Resource Estimator.

Zie Verschillende manieren om de resource-estimator uit te voeren voor informatie over het uitvoeren van de resource-estimator.

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-pakket qsharp .

    python -m pip install --upgrade qsharp 
    

Grote programma's verwerken Q#

Wanneer u een resourceramingstaak indient bij de resource-estimator, wordt het kwantumprogramma volledig geëvalueerd om de resourceramingen te extraheren. Als u de resources van een Q# bewerking wilt schatten die vaak wordt aangeroepen, bijvoorbeeld in een lus met veel iteraties, kan het lang duren voordat de resourceramingstaak wordt uitgevoerd. 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 handmatig opslaan in cache genoemd.

Handmatig opslaan in cache

De resource-estimator target ondersteunt twee Q# functies voor het uitvoeren van handmatige caching: BeginEstimateCaching(name: String, variant: Int): Bool en EndEstimateCaching(): Unit. BeginEstimateCaching de functie gebruikt als invoer, die name 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 targets.

Stel dat u een Q# bewerking hebt die vaak wordt aangeroepen ExpensiveOperation 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, BeginEstimateCaching wordt elke keer aangeroepen. Wanneer BeginEstimateCaching wordt aangeroepen voor de eerste keer, retourneert true en begint de accumulatie van kostengegevens. Dit zorgt ervoor dat code doorgaat met het uitvoeren van het dure codefragment. Wanneer EndEstimateCaching deze worden aangeroepen, worden de kostengegevens opgeslagen voor toekomstig gebruik en worden ze opgenomen in de totale kosten van het programma.

Wanneer ExpensiveOperation de tweede keer wordt aangeroepen (en vervolgens), vindt de resource-estimator de opgeslagen (in de cache opgeslagen) 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 de gebieden waarin BeginEstimateCaching-EndEstimateCaching zich bevinden, kunnen worden genest.

SingleVariant() geeft aan dat de kostengegevens die tijdens de eerste uitvoering worden verzameld, 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 zelfs waarden van een variabele 'c', kunt u een variant waarde opgeven:

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

In dit geval is de cache anders 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, bekijkt u de pagina Probleemoplossing of neemt u contact op AzureQuantumInfo@microsoft.com.