你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
如何使用资源估算器优化大型程序的运行
本文介绍如何在使用 Azure Quantum 资源估算器运行大型Q#程序时优化执行时间。
有关如何运行资源估算器的信息,请参阅 运行资源估算器的不同方法。
先决条件
- 最新版本的 Visual Studio Code 或打开 WEB 上的 VS Code。
- 最新版本的 Azure Quantum 开发工具包扩展。 有关安装详细信息,请参阅 在 VS Code 上安装新式 QDK。
如果要在 VS Code 中使用 Python,还需要满足以下条件:
最新的 Azure Quantum
qsharp
包。python -m pip install --upgrade qsharp
如何处理大型 Q# 程序
将资源估算作业提交到资源估算器时,将完全评估量子程序以提取资源估算。 如果要估算多次调用的操作 Q# 的资源(例如,在多次迭代的循环中),则资源估算作业的执行可能需要很长时间。 缩短长时间执行时间的一种方法是运行一次操作,计算和缓存其成本,并在后续调用中使用数据。 此方法称为手动缓存。
资源估算器 target 支持两个 Q# 函数来执行手动缓存: BeginEstimateCaching(name: String, variant: Int): Bool
和 EndEstimateCaching(): Unit
。 BeginEstimateCaching
函数采用 作为输入, name
它是要为其缓存成本的代码片段的唯一名称,以及一个整数 variant
,用于区分同一片段的不同成本变体。
注意
两个特殊操作 BeginEstimateCaching
和 EndEstimateCaching
是资源估算器的内部操作。 其他执行 targets不支持它们。
例如,假设你有一个名为 Q#ExpensiveOperation
的操作,该操作在迭代中多次调用。 可以使用缓存来减少其估计时间:
operation ExpensiveOperation(c: Int, b : Bool): Unit {
if BeginEstimateCaching("MyNamespace.ExpensiveOperation", SingleVariant()) {
// Code block to be cached
EndEstimateCaching();
}
}
重复使用 时 ExpensiveOperation
, BeginEstimateCaching
每次调用 。 首次调用 时 BeginEstimateCaching
,它会返回 true
并开始成本数据的累积。 这会导致代码继续执行昂贵的代码片段。 调用 时 EndEstimateCaching
,将存储成本数据供将来使用,并将其纳入程序的总体成本中。
当第二次 (调用 并随后) 时 ExpensiveOperation
,资源估算器会查找存储 (缓存) 成本数据,将其合并到程序的总体成本中并返回 false
。 这会导致跳过昂贵的代码片段,因此资源估算器可以更快地执行程序。 EndEstimateCaching
应放置在条件的末尾,并且可以嵌套包含在 中的 BeginEstimateCaching-EndEstimateCaching
区域。
SingleVariant()
指示在第一次执行时收集的成本数据可以在代码片段的所有后续执行中重复使用。 这种情况可能并非总是如此。 例如,如果代码对变量“c”的奇数和偶数值具有不同的成本,则可以提供值 variant
:
operation ExpensiveOperation(c: Int, b : Bool): Unit {
if BeginEstimateCaching("MyNamespace.ExpensiveOperation", c % 2) {
// Some code
EndEstimateCaching();
}
}
在这种情况下,对于 的奇数和偶数值, c
缓存是不同的。 换句话说,为 的偶数值 c
收集的数据仅重复使用为 的 c
偶数值,同样适用于 的 c
奇数值。
注意
如果在使用资源估算器时遇到任何问题,检查故障排除页,或联系 AzureQuantumInfo@microsoft.com。
后续步骤
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈