Compartilhar via


Operação StartCountingOperation

Nome totalmente qualificado: Std.Diagnostics.StartCountingOperation

operation StartCountingOperation<'In, 'Out>(callable : ('In => 'Out)) : Unit

Resumo

Inicia a contagem do número de vezes que a operação determinada é chamada. Falhará se a operação já estiver sendo contada.

Descrição

Essa operação permite que você conte o número de vezes que uma determinada operação é chamada. Se a operação fornecida já estiver sendo contada, chamar StartCountingOperation novamente disparará uma falha de runtime. A contagem baseia-se na especialização específica da operação invocada, portanto, X e Adjoint X são contados separadamente. Da mesma forma, Controlled X, CNOTe CX são operações independentes que são contadas separadamente, assim como Controlled X e Controlled Adjoint X.

Entrada

Callable

A operação a ser contada.

Observações

A contagem de chamadas de operação requer cuidados específicos em qual operação é passada como entrada. Por exemplo, StartCountingOperation(H) contará apenas o número de vezes que H é chamado, enquanto StartCountingOperation(Adjoint H) contará apenas o número de vezes Adjoint H é chamado, mesmo que H seja auto-adjacente. Isso ocorre devido à forma como a execução trata a invocação dessas operações como distintas por sua especialização. Da mesma forma, StartCountingOperation(Controlled X) contará apenas o número de vezes que Controlled X é chamado, enquanto StartCountingOperation(CNOT) contará apenas o número de vezes CNOT é chamado.

Ao contar lambdas, o símbolo ao qual o lambda é associado é usado para identificar a operação e é contado como uma operação separada. Por exemplo

let myOp = q => H(q);
StartCountingOperation(myOp);

Contará especificamente chamadas para myOp e não H. Por outro lado, o código a seguir contará chamadas para H a si mesmo:

let myOp = H;
StartCountingOperation(myOp);

Isso ocorre porque esse código não define um lambda e, em vez disso, apenas cria uma associação para H diretamente.