Share via


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

In dit artikel leert u hoe u de uitvoeringstijd kunt optimaliseren 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 
    

Omgaan met grote Q# programma's

Wanneer u een resourceschattingstaak naar de Resource Estimator verzendt, wordt het kwantumprogramma volledig geƫvalueerd om de resourceschattingen te extraheren. Als u een schatting wilt maken van de resources van een Q# bewerking die vaak wordt aangeroepen, bijvoorbeeld in een lus met veel iteraties, kan de uitvoering van de resourceschattingstaak lang duren. Een manier om lange uitvoeringstijden te verminderen, is door de bewerking eenmaal uit te voeren, de kosten ervan te berekenen en in de cache op te slaan, en de gegevens te gebruiken bij volgende aanroepen. Deze techniek wordt handmatig opslaan in cache genoemd.

De resource-estimator target ondersteunt twee Q# functies voor het handmatig opslaan in cache: BeginEstimateCaching(name: String, variant: Int): Bool en EndEstimateCaching(): Unit. BeginEstimateCaching functie gebruikt als invoer een name die de unieke naam is van het codefragment waarvoor u de 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 met de naam ExpensiveOperation die vaak wordt aangeroepen in een iteratie. U kunt caching gebruiken om de schattingstijd te verkorten:

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 voor de eerste keer wordt aangeroepen, retourneert true en begint de accumulatie 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 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, waardoor de Resource Estimator het programma sneller uitvoert. EndEstimateCaching moet aan het einde van de voorwaarde worden geplaatst en gebieden die zijn ingesloten in BeginEstimateCaching-EndEstimateCaching kunnen worden genest.

SingleVariant() geeft aan dat de kostengegevens die bij de eerste uitvoering zijn verzameld, opnieuw kunnen worden gebruikt in alle volgende uitvoeringen van het codefragment. Dit is mogelijk niet altijd het geval. Als uw code bijvoorbeeld verschillende kosten heeft voor oneven en even 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 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 u een probleem ondervindt tijdens het werken met de resource-estimator, gaat u naar de pagina Probleemoplossing of neemt u contact op met AzureQuantumInfo@microsoft.com.

Volgende stappen