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

如何使用资源估算器优化大型程序的运行

本文介绍如何在使用 Azure Quantum 资源估算器运行大型Q#程序时优化执行时间。

有关如何运行资源估算器的信息,请参阅 运行资源估算器的不同方法

先决条件

如果要在 VS Code 中使用 Python,还需要满足以下条件:

  • 安装最新版本的 Python 和适用于 VS Code 的 Jupyter 扩展。

  • 最新的 Azure Quantum qsharp 包。

    python -m pip install --upgrade qsharp 
    

如何处理大型 Q# 程序

将资源估算作业提交到资源估算器时,将完全评估量子程序以提取资源估算。 如果要估算多次调用的操作 Q# 的资源(例如,在多次迭代的循环中),则资源估算作业的执行可能需要很长时间。 缩短长时间执行时间的一种方法是运行一次操作,计算和缓存其成本,并在后续调用中使用数据。 此方法称为手动缓存。

资源估算器 target 支持两个 Q# 函数来执行手动缓存: BeginEstimateCaching(name: String, variant: Int): BoolEndEstimateCaching(): UnitBeginEstimateCaching 函数采用 作为输入, name 它是要为其缓存成本的代码片段的唯一名称,以及一个整数 variant ,用于区分同一片段的不同成本变体。

注意

两个特殊操作 BeginEstimateCachingEndEstimateCaching 是资源估算器的内部操作。 其他执行 targets不支持它们。

例如,假设你有一个名为 Q#ExpensiveOperation 的操作,该操作在迭代中多次调用。 可以使用缓存来减少其估计时间:

operation ExpensiveOperation(c: Int, b : Bool): Unit {
    if BeginEstimateCaching("MyNamespace.ExpensiveOperation", SingleVariant()) {
        // Code block to be cached
        EndEstimateCaching();
    }
}

重复使用 时 ExpensiveOperationBeginEstimateCaching 每次调用 。 首次调用 时 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

后续步骤