你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
量子设备仍然是一项新兴技术,不幸的是,并非所有设备都可以运行每个 Q# 程序。 因此,在开发量子程序时,需要记住一些限制。 配置文件 target 类型定义使用 Q# 程序使用的量子设备 target 的功能。 Quantum 开发工具包(QDK)具有一组不同的 target 配置文件类型,它们共同支持 Azure Quantum 中可用的当前量子设备的所有功能。
本文讨论 Azure Quantum 中的不同类型的 target 配置文件及其限制以及如何在 QDK 中配置它们。
目标配置文件及其限制
目前,Azure Quantum 和 QDK 管理不同的 target 配置文件,具体取决于其运行 量子中间表示形式(QIR)程序的能力。
- Unrestricted: 此配置文件可以在模拟器的内存限制内或物理量子计算机的量子比特数限制内运行任何程序,因此也可以运行任何 Q# 程序。
-
Base: 此配置文件可以运行任何不需要使用量子位度量结果来控制程序流的 Q# 程序。 在面向此类 QPU 的 Q# 程序中,类型
Result值不支持相等比较。 -
Adaptive RI: 此配置文件在使用量子比特测量结果控制程序流方面的能力有限。 在面向此类 QPU 的 Q# 程序中,可以将类型
Result值作为作中语句中if条件的一部分进行比较,从而允许进行中线测量。 -
- Adaptive RIF: 此配置文件的功能与 Adaptive RI 配置文件相同,但也支持浮点运算。
创建用于 Unrestrictedtarget 配置文件的程序并运行它们
Unrestricted target 配置文件可以运行所有 Q# 程序,因此无需考虑功能限制即可编写 Q# 代码。 Azure Quantum 不提供任何支持此配置的实际设备 targets 。 但是,可以在 Unrestricted QDK 提供的模拟器上运行具有此配置文件的 Q# 程序。
配置 Unrestrictedtarget 配置文件
如果未手动设置配置文件 QIRtarget ,编译器会自动为你设置 target 配置文件。 编译器选择限制性最高的配置文件,该配置文件仍允许程序在所选的 Azure Quantum 设备上 target 运行。
若要手动将 QIRtarget 配置文件设置为 “不受限制”,请选择以下选项之一:
如果设置了 Q# 项目,请将以下命令添加到项目的
qsharp.json文件中:{ "targetProfile": "unrestricted" }如果您在一个不属于 Q# 项目的文件
.qs中工作,请直接在 Q# 代码中设置target配置文件。 为此,请在程序中的入口点操作之前包括@EntryPoint(Unrestricted),即使该操作是默认值Main。在 Python 中调用
qsharp.init方法来设置 target 配置文件。qsharp.init(target_profile=qsharp.TargetProfile.Unrestricted)
创建用于 Basetarget 配置文件的程序并运行它们
Base
target 配置文件可以运行各种 Q# 应用程序,其约束是无法使用量子位度量的结果来控制程序流。 更具体地说,类型的 Result 值不支持相等比较。
例如,您不能在FlipQubitOnZeroBase上运行以下target操作:
@EntryPoint(Base)
operation FlipQubitOnZero() : Unit {
use q = Qubit();
if M(q) == Zero {
X(q);
}
}
FlipQubitOnZero在 Basetarget 上运行此代码时操作会失败,因为 target 设备无法在量子算法运行期间使用量子比特测量结果来执行条件逻辑。 如果您计划在 Basetarget 设备上运行算法,请确保您的代码中不包含任何依赖测量量子比特来评估逻辑条件的条件分支 if 代码块。
配置 Basetarget 配置文件
若要手动将QIRtarget配置文件设置为Base,请选择以下选项之一:
如果设置了 Q# 项目,请将以下命令添加到项目的
qsharp.json文件中:{ "targetProfile": "base" }如果您在一个不属于 Q# 项目的文件
.qs中工作,请直接在 Q# 代码中设置target配置文件。 为此,请在程序中的入口点操作之前包括@EntryPoint(Base),即使该操作是默认值Main。在 Python 中调用
qsharp.init方法来设置 target 配置文件。qsharp.init(target_profile=qsharp.TargetProfile.Base)
支持targetsBasetarget的配置文件
目前,Azure Quantum 提供对以下内容 Basetargets的访问权限:
| Provider | 模拟器 | QPU |
|---|---|---|
| IonQ | ionq.simulator |
ionq.qpu.* |
| 里盖蒂 | rigetti.sim.* |
rigetti.qpu.* |
若要详细了解 Azure Quantum 中的这些提供程序,请参阅 IonQ 提供程序 和 Rigetti 提供程序。
创建用于 Adaptive RItarget 配置文件的程序并运行它们
Adaptive RI target 配置文件可以运行比 Base 配置文件更广泛的 Q# 应用程序,但仍存在一些限制。 与Basetarget配置类型不同,Adaptive RItargets支持中间电路测量。
使用中间电路度量,可以在量子程序的任何点有选择地测量量子比特,而不仅仅是终点。 然后,可以将度量结果用于程序中的其他操作,例如使用 if 块进行条件分支。 测量中电路的量子比特崩溃到经典状态(零或一个),但非测量量子比特仍处于其量子状态。
在 Q# 中度量量子位时,将返回类型 Result 值。 如果要在条件语句中使用此结果,则必须直接在条件语句中进行比较。 对应的条件块不能包含 return 或 set 语句。
例如,以下 Q# 代码在 Adaptive RItarget 中是允许的:
@EntryPoint(Adaptive_RI)
operation MeasureQubit(q : Qubit) : Result {
return M(q);
}
operation SetToZero(q : Qubit) : Unit {
if MeasureQubit(q) == One { X(q); }
}
配置 Adaptive RItarget 配置文件
若要手动将QIRtarget配置文件设置为Adaptive RI,请选择以下选项之一:
如果设置了 Q# 项目,请将以下命令添加到项目的
qsharp.json文件中:{ "targetProfile": "adaptive_ri" }如果您在一个不属于 Q# 项目的文件
.qs中工作,请直接在 Q# 代码中设置target配置文件。 为此,请在程序中的入口点操作之前包括@EntryPoint(Adaptive_RI),即使该操作是默认值Main。在 Python 中调用
qsharp.init方法来设置 target 配置文件。qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RI)
支持targetsAdaptive RItarget的配置文件
目前,Quantinuum 是 Azure Quantum 中唯一具有 Adaptive RItargets的提供商。
-
仿真:
quantinuum.sim.h2-1e和quantinuum.sim.h2-2e -
QPU:
quantinuum.qpu.h2-1和quantinuum.qpu.h2-2
有关 Azure Quantum 中 Quantinuum 产品/服务的详细信息,请参阅 Quantinuum 模拟器。
创建用于 Adaptive RIFtarget 配置文件的程序并运行它们
Adaptive RIF target 配置文件拥有 Adaptive RI 配置文件的所有功能,并且也支持包含浮点计算的 Q# 程序。
例如,以下 Q# 代码在 Adaptive RIFtarget 中是允许的:
@EntryPoint(Adaptive_RIF)
operation DynamicFloat() : Double {
use q = Qubit();
H(q);
mutable f = 0.0;
if M(q) == One {
f = 0.5;
}
Reset(q);
return f;
}
配置 Adaptive RIFtarget 配置文件
若要手动将QIRtarget配置文件设置为Adaptive RIF,请选择以下选项之一:
如果设置了 Q# 项目,请将以下命令添加到项目的
qsharp.json文件中:{ "targetProfile": "adaptive_rif" }如果您在一个不属于 Q# 项目的文件
.qs中工作,请直接在 Q# 代码中设置target配置文件。 为此,请在程序中的入口点操作之前包括@EntryPoint(Adaptive_RIF),即使该操作是默认值Main。在 Python 中调用
qsharp.init方法来设置 target 配置文件。qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RIF)
支持targetsAdaptive RItarget的配置文件
目前,Azure Quantum 没有 Adaptive RIFtargets。 但是,可以在 QDK 中的本地模拟器上运行程序 Adaptive RIFtargets 。