Simulador de vestígios quânticos: contador de profundidadeQuantum trace simulator: depth counter

O contador de profundidade faz parte do simulador de traços quânticosdo Kit de Desenvolvimento Quântico.The depth counter is a part of the Quantum Development Kit Quantum trace simulator. Pode usá-lo para recolher contagens que representam o limite inferior da profundidade de cada operação invocada num programa quântico.You can use it to gather counts that represent the lower bound of the depth of every operation invoked in a quantum program.

Valores de profundidadeDepth values

Por predefinição, todas as operações têm uma profundidade de 0, exceto a T operação, que tem uma profundidade de 1 .By default, all operations have a depth of 0 except the T operation, which has a depth of 1 . Isto significa que, por defeito, apenas a T profundidade das operações é calculada (o que é muitas vezes desejável).This means that by default, only the T depth of operations is computed (which is often desirable). O contador de profundidade agrega e recolhe estatísticas sobre todas as bordas do gráfico de chamada da operação.The depth counter aggregates and collects statistics over all the edges of the operation's call graph.

Todas as Microsoft.Quantum.Intrinsic namespace operações são expressas em termos de rotações de um único qubit, T operation operações, operações CNOT operation e medições de observações pauli multi-qubit.All Microsoft.Quantum.Intrinsic namespace operations are expressed in terms of single-qubit rotations, T operation operations, single-qubit Clifford operations, CNOT operation operations, and measurements of multi-qubit Pauli observables. Os utilizadores podem definir a profundidade para cada uma das operações primitivas através do gateTimes campo de QCTraceSimulatorConfiguration .Users can set the depth for each of the primitive operations via the gateTimes field of QCTraceSimulatorConfiguration.

Invocando o contador de profundidadeInvoking the depth counter

Para executar o simulador de traços quânticos com o contador de profundidade, você deve criar um QCTraceSimulatorConfiguration exemplo, definir a sua UseDepthCounter propriedade para verdade , e, em seguida, criar um novo exemplo com como QCTraceSimulator o QCTraceSimulatorConfiguration parâmetro.To run the quantum trace simulator with the depth counter, you must create a QCTraceSimulatorConfiguration instance, set its UseDepthCounter property to true , and then create a new QCTraceSimulator instance with QCTraceSimulatorConfiguration as the parameter.

var config = new QCTraceSimulatorConfiguration();
config.UseDepthCounter = true;
var sim = new QCTraceSimulator(config);

Usando o contador de profundidade num programa de anfitrião C#Using the depth counter in a C# host program

O exemplo C# que segue nesta secção calcula a T profundidade da CCNOT operação, com base no seguinte Q# código de amostra:The C# example that follows in this section computes the T depth of the CCNOT operation, based on the following Q# sample code:

open Microsoft.Quantum.Intrinsic;

operation ApplySampleWithCCNOT() : Unit {
    using (qubits = Qubit[3]) {
        CCNOT(qubits[0], qubits[1], qubits[2]);
        T(qubits[0]);
    }
}

Para verificar se CCNOT tem T profundidade 5 e ApplySampleWithCCNOT tem profundidade T 6, utilize o seguinte código C#:To check that CCNOT has T depth 5 and ApplySampleWithCCNOT has T depth 6 , use the following C# code:

using Microsoft.Quantum.Simulation.Simulators.QCTraceSimulators;
using System.Diagnostics;
var config = new QCTraceSimulatorConfiguration();
config.UseDepthCounter = true;
var sim = new QCTraceSimulator(config);
var res = ApplySampleWithCCNOT.Run(sim).Result;

double tDepth = sim.GetMetric<Intrinsic.CCNOT, ApplySampleWithCCNOT>(DepthCounter.Metrics.Depth);
double tDepthAll = sim.GetMetric<ApplySampleWithCCNOT>(DepthCounter.Metrics.Depth);

A primeira parte do programa ApplySampleWithCCNOT é.The first part of the program runs ApplySampleWithCCNOT. A segunda parte utiliza o GetMetric método para recuperar a profundidade de e T CCNOT ApplySampleWithCCNOT .The second part uses the GetMetric method to retrieve the T depth of CCNOT and ApplySampleWithCCNOT.

Finalmente, pode descodutar todas as estatísticas recolhidas pelo contador de profundidade no formato CSV utilizando o seguinte:Finally, you can output all the statistics collected by the depth counter in CSV format using the following:

string csvSummary = sim.ToCSV()[MetricsCountersNames.depthCounter];

Ver tambémSee also