你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
量子计算仍然是一项新兴技术。 并非所有量子硬件都可以运行所有量子程序。 例如,只有某些硬件能够执行电路中途测量,而运行基于量子比特测量结果进行条件分支的程序则需要这种能力。
提交要运行 Azure Quantum的程序时,程序将转换为量子中间表示形式(QIR) 格式。 QIR 不依赖于程序运行的编程语言或量子硬件类型。 Microsoft Quantum 开发工具包 (QDK) 支持针对不同硬件功能的多个 QIR 目标配置文件。
有关QIR的更多信息,请参阅量子中间表示。
目标配置文件概述
Azure Quantum 和 QDK 支持多个 QIR 目标配置文件。 你选择的目标配置文件的类型决定了程序可以使用的以下哪种编程构造。
- 基于量子比特度量结果的
if语句的条件分支 - 对从量子比特度量结果计算的浮点数的算术运算
- 基于量子比特测量结果的固定循环和无界循环
下表列出了 QIR 中所有 QDK 目标配置文件,以及这些目标配置文件所支持的编程构造,按限制程度从高到低排列。
| QIR 目标配置文件 | 条件分支 | 浮点操作 | 循环 |
|---|---|---|---|
| Base | ❌ | ❌ | ❌ |
| Adaptive RI | ✅ | ❌ | ❌ |
| Adaptive RIF | ✅ | ✅ | ❌ |
| Adaptive | ✅ | ✅ | ✅ |
| Unrestricted | ✅ | ✅ | ✅ |
在 QDK 中设置目标配置文件
若要在 QDK 模拟器或 Azure Quantum 目标上运行程序,需要设置 QIR 目标配置文件。 如果未手动设置目标配置文件,则 QDK 尝试自动为所选目标设置相应的配置文件。
提交要通过 Azure Quantum 服务运行的程序时,QDK 会尝试为所选执行目标自动选择合适的配置文件。
Base QIR 配置文件
基本 QIR 目标配置文件是限制性最强的。 对于不使用分支和循环等经典编程结构的较简单程序,请使用基础配置文件。 如果你的量子硬件目标无法执行电路中测量,那么你可能需要使用基本配置文件。
以下 Azure Quantum 目标可以运行使用基本 QIR 配置文件的程序。
| Provider | 模拟器 | QPU |
|---|---|---|
| IonQ | ionq.simulator |
ionq.qpu.* |
| 里盖蒂 | rigetti.sim.* |
rigetti.qpu.* |
若要了解有关这些 Azure Quantum 提供商的详细信息,请参阅 IonQ 提供程序 和 Rigetti 提供程序。
设置基本配置
要在 Visual Studio Code (VS Code) 的 QIR 扩展中设置基本 QDK 目标配置文件,请选择以下选项之一。
如果设置了 Q# 项目,请将以下命令添加到项目
qsharp.json的文件。{ "targetProfile": "base" }如果你正在处理一个不属于 Q# 项目的
.qs文件,请直接在 Q# 代码中设置目标配置特征。 为此,请在程序中入口点操作所在行的前一行添加@EntryPoint(Base)。@EntryPoint(Base) operation Main() : Unit { ... }
若要在 Python 包中QDK设置基本目标配置文件,请运行以下代码。
from qdk import init, TargetProfile
init(target_profile=TargetProfile.Base)
使用基本配置文件的 Q# 程序的限制
基础目标配置文件可以运行多种 Q# 程序。 主要约束是 Q# 程序无法与 Result 度量操作中的类型值执行逻辑比较。
例如,不能对基本目标运行以下 FlipQubitOnZero 操作,因为程序包含 if 使用度量结果的语句。
@EntryPoint(Base)
operation FlipQubitOnZero() : Unit {
use q = Qubit();
if M(q) == Zero {
X(q);
}
}
Adaptive RI QIR 配置文件
自适应 RI 目标配置文件可以运行比基本配置文件更广泛的程序,但仍存在一些限制。
Adaptive RI 目标支持在条件 if 语句中使用电路中测量的程序。 如果你的量子硬件可以执行电路中测量,并且你的程序使用基于测量结果的 if 语句,那么你可能需要使用自适应 RI 配置文件。
例如,以下 Q# 程序可以在自适应 RI 目标上运行。
@EntryPoint(Adaptive_RI)
operation MeasureQubit(q : Qubit) : Result {
return M(q);
}
operation SetToZero(q : Qubit) : Unit {
if MeasureQubit(q) == One { X(q); }
}
以下 Azure Quantum 目标可以运行使用自适应 RI 目标配置文件的程序。
| Provider | 模拟器 | QPU |
|---|---|---|
| Quantinuum | quantinuum.sim.h2-1e |
quantinuum.qpu.h2-1 |
| Quantinuum | quantinuum.sim.h2-2e |
quantinuum.qpu.h2-2 |
有关 Azure Quantum 中 Quantinuum 的详细信息,请参阅 Quantinuum 提供程序。
设置自适应 RI 配置文件
要在 VS Code 的 QIR 扩展中设置自适应 RI QDK 目标配置文件,请选择以下选项之一。
如果设置了 Q# 项目,请将以下命令添加到项目的
qsharp.json文件中:{ "targetProfile": "adaptive_ri" }如果你正在处理一个不属于 Q# 项目的
.qs文件,请直接在 Q# 代码中设置目标配置特征。 为此,请在程序中入口点操作所在行的前一行添加@EntryPoint(Adaptive_RI)。@EntryPoint(Adaptive_RI) operation Main() : Unit { ... }
若要在Python包中QDK设置自适应 RI 目标配置文件,请运行以下代码。
from qdk import init, TargetProfile
init(target_profile=TargetProfile.Adaptive_RI)
Adaptive RIF QIR 配置文件
自适应 RIF 目标配置文件的功能与自适应 RI 配置文件相同,但也支持包含浮点算术运算的程序。 如果量子硬件可以执行电路中途测量,并且程序使用 if 语句以及根据测量结果计算出的浮点数,那么你可能需要使用自适应 RIF 配置模式。
例如,以下 Q# 程序可以在自适应 RIF 目标上运行。
@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;
}
Azure Quantum 目前没有自适应 RIF 目标,但你可以在本地 QDK 模拟器上运行自适应 RIF 目标的程序。 有关 QDK 中模拟器的更多信息,请参阅QDK中的量子模拟器概述。
设置自适应 RIF 配置文件
若要在适用于 VS Code 的 QIR 扩展中设置自适应 RIF QDK 目标配置,请选择以下选项之一。
如果设置了 Q# 项目,请将以下命令添加到项目的
qsharp.json文件中:{ "targetProfile": "adaptive_rif" }如果你正在处理一个不属于 Q# 项目的
.qs文件,请直接在 Q# 代码中设置目标配置特征。 为此,请在程序中入口点操作所在行的前一行添加@EntryPoint(Adaptive_RIF)。@EntryPoint(Adaptive_RIF) operation Main() : Unit { ... }
若要在 Python 包中QDK设置自适应 RIF 目标配置文件,请运行以下代码。
from qdk import init, TargetProfile
init(target_profile=TargetProfile.Adaptive_RIF)
Adaptive QIR 配置文件
自适应目标配置文件的功能与自适应 RIF 配置文件相同,但也支持基于度量结果使用循环的程序。 Adaptive 程序可以使用具有一组迭代数的循环,以及重复到成功(RUS)循环。
Azure Quantum 目前没有自适应目标,但你可以在本地 QDK 模拟器上运行自适应目标的程序。 有关 QDK 中模拟器的更多信息,请参阅QDK中的量子模拟器概述。
设置自适应配置文件
要在 VS Code 的 QIR 扩展中设置自适应 QDK 目标配置文件,请选择以下选项之一。
如果设置了 Q# 项目,请将以下命令添加到项目的
qsharp.json文件中:{ "targetProfile": "adaptive" }如果你正在处理一个不属于 Q# 项目的
.qs文件,请直接在 Q# 代码中设置目标配置特征。 为此,请在程序中入口点操作所在行的前一行添加@EntryPoint(Adaptive)。@EntryPoint(Adaptive) operation Main() : Unit { ... }
若要在 Python 包中QDK设置自适应目标配置文件,请运行以下代码。
from qdk import init, TargetProfile
init(target_profile=TargetProfile.Adaptive)
Unrestricted QIR 配置文件
不受限制的目标配置文件可以运行所有量子程序。 当前没有任何量子目标支持非受限的 QIR,但你可以使用非受限配置文件在 QDK 模拟器上运行复杂程序,用于量子开发。
设置无限制配置文件
要在 VS Code 的 QIR 扩展中设置无限制 QDK 目标配置文件,请选择以下选项之一。
如果设置了 Q# 项目,请将以下命令添加到项目的
qsharp.json文件中:{ "targetProfile": "unrestricted" }如果你正在处理一个不属于 Q# 项目的
.qs文件,请直接在 Q# 代码中设置目标配置特征。 为此,请在程序中入口点操作所在行的前一行添加@EntryPoint(Unrestricted)。@EntryPoint(Unrestricted) operation Main() : Unit { ... }
若要在 Python 包中QDK设置不受限制的目标配置文件,请运行以下代码。
from qdk import init, TargetProfile
init(target_profile=TargetProfile.Unrestricted)