你当前正在访问 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。 换句话说,为偶数值收集的数据仅用于偶数值cc,同样适用于奇数值c

注意

如果在使用资源估算器时遇到任何问题,请查看 “故障排除”页或联系 AzureQuantumInfo@microsoft.com