宽度计数器
Width Counter
计算每个操作分配和借用的量子位数。 所有来自Microsoft.Quantum.Primitive
命名空间的操作都是以单量子位旋转,T门,单量子位Clifford门,CNOT门以及多量子位Pauli可观测量的量度来表示的。 一些原始操作可以分配额外的量子位。 例如,乘法控制的X
门或受控的T
门。 让我们计算实现一个乘法控制的X
门所分配的额外量子比特的数量:
Q#
open Microsoft.Quantum.Primitive;
operation MultiControlledXDriver( numberOfQubits : Int ) : () {
body {
using( qubits = Qubit[numberOfQubits] ) {
(Controlled X)(qubits[ 1 .. numberOfQubits - 1] ,qubits[0]);
}
}
}
在C#程序中使用宽度计数器
乘以受控的X
作用于总共5个量子位将分配2个辅助量子位,其输入宽度将为5.为了检查这种情况,我们可以使用以下C#程序:
C#
var config = new QCTraceSimulatorConfiguration();
config.useWidthCounter = true;
var sim = new QCTraceSimulator(config);
int totalNumberOfQubits = 5;
var res = MultiControlledXDriver.Run(sim, totalNumberOfQubits).Result;
double allocatedQubits =
sim.GetMetric<Primitive.X, MultiControlledXDriver>(
WidthCounter.Metrics.ExtraWidth,
functor: OperationFunctor.Controlled);
double inputWidth =
sim.GetMetric<Primitive.X, MultiControlledXDriver>(
WidthCounter.Metrics.InputWidth,
functor: OperationFunctor.Controlled);
该程序的第一部分执行MultiControlledXDriver
。 在第二部分中,我们使用方法QCTraceSimulator.GetMetric
来获得分配的量子位数以及受控X
作为输入接收的量子位数。
最后,要以CSV格式输出由宽度计数器收集的所有统计信息,我们可以使用以下内容:
C#
string csvSummary = sim.ToCSV()[MetricCalculatorsNames.widthCounter];