Como otimizar a execução de programas grandes com o Avaliador de Recursos
Neste artigo, você aprenderá a otimizar o tempo de execução ao executar programas grandes Q# com o Avaliador de Recursos do Azure Quantum.
Para obter informações sobre como executar o Avaliador de Recursos, consulte Diferentes maneiras de executar o Avaliador de Recursos.
Pré-requisitos
- A versão mais recente do Visual Studio Code ou abra o VS Code na Web.
- A versão mais recente da extensão do Kit de desenvolvimento do Azure Quantum. Para obter detalhes de instalação, consulte Instalando o QDK no VS Code.
Se você quiser usar o Python no VS Code, também precisará do seguinte:
Instale a versão mais recente das extensões Python e Jupyter para VS Code.
O pacote mais recente do Azure Quantum
qsharp
.python -m pip install --upgrade qsharp
Como lidar com programas grandes Q#
Quando você envia um trabalho de estimativa de recursos para o Avaliador de Recursos, o programa quântico é avaliado completamente para extrair as estimativas de recursos. Se você quiser estimar os recursos de uma Q# operação que é invocada muitas vezes, por exemplo, em um loop com muitas iterações, a execução do trabalho de estimativa de recursos pode levar muito tempo. Uma maneira de reduzir os longos tempos de execução é executar a operação uma vez, calcular e armazenar em cache seus custos e usar os dados em chamadas subsequentes. Essa técnica é chamada de cache manual.
Cache manual
O Avaliador target de Recursos oferece suporte a duas Q# funções para executar o cache manual: BeginEstimateCaching(name: String, variant: Int): Bool
e EndEstimateCaching(): Unit
. BeginEstimateCaching
usa como entradas a name
, que é o nome exclusivo do fragmento de código para o qual você deseja armazenar os custos em cache, e um inteiro variant
que distingue diferentes variantes de custo para o mesmo fragmento.
Observação
As duas operações BeginEstimateCaching
especiais e EndEstimateCaching
são operações intrínsecas para o Avaliador de Recursos. Eles não são suportados por outra execução targets.
Por exemplo, digamos que você tenha uma Q# operação chamada ExpensiveOperation
que é chamada muitas vezes em uma iteração. Você pode usar o cache para reduzir seu tempo de estimativa:
operation ExpensiveOperation(c: Int, b : Bool): Unit {
if BeginEstimateCaching("MyNamespace.ExpensiveOperation", SingleVariant()) {
// Code block to be cached
EndEstimateCaching();
}
}
Quando ExpensiveOperation
é usado repetidamente, BeginEstimateCaching
é chamado a cada vez. Quando BeginEstimateCaching
é chamado pela primeira vez, ele retorna true
e começa a acumular dados de custo. Isso faz com que o código prossiga com a execução do fragmento de código caro. Quando EndEstimateCaching
é chamado, os dados de custo são armazenados para uso futuro e incorporados ao custo geral do programa.
Quando ExpensiveOperation
é chamado pela segunda vez (e subsequentemente), o Avaliador de Recursos localiza os dados de custo armazenados (em cache), incorpora-os ao custo geral do programa e retorna false
. Isso faz com que fragmentos de código caros sejam ignorados, portanto, o Avaliador de Recursos executa o programa mais rapidamente. EndEstimateCaching
deve ser colocado no final da condição e as regiões delimitadas BeginEstimateCaching-EndEstimateCaching
podem ser aninhadas.
SingleVariant()
indica que os dados de custo coletados na primeira execução podem ser reutilizados em todas as execuções subsequentes do fragmento de código. Isso pode nem sempre ser o caso. Por exemplo, se o código tiver um custo diferente para valores pares e ímpares de uma variável 'c', você poderá fornecer um variant
valor:
operation ExpensiveOperation(c: Int, b : Bool): Unit {
if BeginEstimateCaching("MyNamespace.ExpensiveOperation", c % 2) {
// Some code
EndEstimateCaching();
}
}
Nesse caso, o cache é diferente para valores pares e ímpares de c
. Em outras palavras, os dados coletados para valores pares de c
são reutilizados apenas para valores pares de c
, e o mesmo se aplica a valores ímpares de c
.
Observação
Se você tiver algum problema ao trabalhar com o Avaliador de recursos, verifique a página Solução de problemas ou entre em contato com AzureQuantumInfo@microsoft.com.