Поделиться через


Операция StartCountingOperation

Полное имя: Std.Diagnostics.StartCountingOperation

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

Сводка

Начинает подсчет количества вызовов данной операции. Завершается ошибкой, если операция уже подсчитывается.

Описание

Эта операция позволяет подсчитать количество вызовов данной операции. Если данная операция уже учитывается, вызов StartCountingOperation снова вызовет сбой среды выполнения. Подсчет основывается на конкретной специализации вызываемой операции, поэтому X и Adjoint X учитываются отдельно. Аналогичным образом Controlled X, CNOTи CX являются независимыми операциями, которые учитываются отдельно, как Controlled X и Controlled Adjoint X.

Ввод

Вызываемые

Операция, считываемая.

Замечания

Подсчет вызовов операций требует определенной помощи в том, что операция передается в качестве входных данных. Например, StartCountingOperation(H) подсчитывает только количество вызовов H, в то время как StartCountingOperation(Adjoint H) подсчитывает только количество вызовов Adjoint H, даже если H является самостоятельным. Это связано с тем, как выполнение обрабатывает вызов этих операций как отличный от их специализации. Таким же образом, StartCountingOperation(Controlled X) подсчитывает только количество вызовов Controlled X, в то время как StartCountingOperation(CNOT) будет подсчитывать только количество вызовов CNOT.

При подсчете лямбда-символ, к которым привязана лямбда-символ, используется для идентификации операции и считается отдельной операцией. Например

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

Будет подсчитывать в частности вызовы myOp, а не H. В отличие от этого, следующий код будет подсчитывать вызовы H себя:

let myOp = H;
StartCountingOperation(myOp);

Это связано с тем, что этот код не определяет лямбда-код и вместо этого просто создает привязку для H напрямую.