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.
Vereisten
- De nieuwste versie van Visual Studio Code of open VS Code op het web.
- De nieuwste versie van de Azure Quantum Development Kit-extensie. Zie QDK installeren in VS Code voor installatiedetails.
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.