你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Azure Quantum 中的目标概况类型

本文讨论 Azure Quantum 中量子计算提供程序中可用的不同类型的 target 配置文件类型。 目前,由于该领域处于早期开发阶段,量子设备对在其上运行的程序有一定的限制和要求。

量子处理单元 (QPU) :不同的配置文件及其限制

量子处理单元 (QPU) 是一个物理处理器或模拟处理器,其中包含许多互连的量子比特,操作这些量子比特可计算量子算法。 它是量子计算机或量子模拟器的核心组件。

量子设备仍是新兴技术,并非所有量子设备都可以运行所有 Q# 代码。 因此,在为不同的 targets开发程序时,需要牢记一些限制。 目前,Azure Quantum 和 QDK 管理三个不同的 QPU 配置文件:

  • Full:此配置文件可以在模拟器的内存限制或物理量子计算机的量子比特数限制内运行任何 Q# 程序。
  • No Control Flow:此配置文件可以运行任何不需要使用量子比特测量结果的 Q# 程序来控制程序流。 在针对此类 QPU 的 Q# 程序 target内,类型的 Result 值不支持相等比较。
  • Basic Measurement Feedback:此配置文件使用量子比特测量的结果来控制程序流的能力有限。 在针对此类 QPU 设置的 Q# 程序中 target,可以将 类型的 Result 值作为操作语句内 if 条件的一部分进行比较,从而允许进行中间线路测量。 对应的条件块可能不包含 returnset 语句。

创建并运行用于 Full 配置文件的应用程序 targets

Full profile targets 可以运行任何 Q# 程序,这意味着可以编写不受功能限制的程序。 Azure Quantum 尚未提供任何 target 此配置文件。

创建并运行用于 No Control Flow 配置文件的应用程序 targets

No Control Flow profile targets 可以运行各种 Q# 应用程序,其约束是它们不能使用量子比特度量的结果来控制程序流。 更具体地说,Result 类型的值不支持等式比较。

例如,此操作 不能 在 上运行 No Control Flowtarget:

    operation SetQubitState(desired : Result, q : Qubit) : Result {
        if (desired != M(q)) {
            X(q);
        }
    }

尝试对 运行此操作会失败, No Control Flowtarget 因为它会评估两个结果之间的比较 (desired != M(q)) ,以使用 if 语句控制计算流。 这将适用于任何类型的 条件分支,例如 elifelse 语句。

注意

目前,即使不使用结果来控制程序流,也无法提交对已在 中 No Control Flowtargets测量的量子比特应用操作的量子程序。 也就是说, No Control Flowtargets 不允许进行中间线路测量。

例如,以下代码 不能 在 上运行 No Control Flowtarget:

operation MeasureQubit(q : Qubit) : Result { 
   return M(q); 
}

operation SampleMeasuredQubit(q : Qubit) : Result {
    H(MeasureQubit(q));
    return M(MeasureQubit(q));
}

目前,这些 No Control Flowtargets 选项可用于 Azure Quantum:

创建并运行用于 Basic Measurement Feedback 配置文件的应用程序 targets

Basic Measurement Feedback profile targets 可以运行各种 Q# 应用程序,其约束是,只能比较类型 Result 值作为操作语句中的 if 条件的一部分。 此配置文件类型假设对配置文件进行了 No Control Flow 改进,但仍受到一些限制。

Basic Measurement Feedback profile targets 允许基于测量的条件运算和 中间电路测量,这意味着量子比特可以在量子程序的最终语句以外的某个点选择性地测量,并且测量的输出可用于其他操作。 中间电路测量在整个量子程序的任何点实现多个测量。 测量量子比特的量子位的量子信息 (零或一) 折叠为经典状态,但非测量量子比特保留其量子态。

在 Q# 中测量量子比特时,返回类型的 Result 值。 如果要在条件语句中使用此结果,则必须直接在条件语句中进行比较。 对应的条件块不能包含 returnset 语句。

例如,允许在 中 Basic Measurement Feedbacktarget使用以下 Q# 代码:

operation MeasureQubit(q : Qubit) : Result { 
    return M(q); 
}

operation SetToZero(q : Qubit) : Unit {
     if MeasureQubit(q) == One { X(q); )
}

但是, 不允许 使用移动了布尔计算的相同代码:

operation BeOne(q : Qubit) : Bool {
     return M(q) == One;
}

operation SetToZeroUsingBeOne(q : Qubit) : Unit {
     if BeOne(q) { X(q); }
}

SetQubitState 只要语句中不包含任何 returnset 语句,就可以在 Basic Measurement Feedbacktarget 中使用 中的if操作No Control Flow。 这将适用于任何类型的 条件分支,例如 elifelse 语句。 例如,不能在 中Basic Measurement Feedbacktarget使用以下操作:

    operation SetQubitState(desired : Result, q : Qubit) : Result {
    if desired != M(q) {
        X(q);
        return M(q);
    }
}

目前,这些 Basic Measurement Feedbacktargets 选项可用于 Azure Quantum: