cuquantum.contract_path

cuquantum.contract_path(subscripts, *operands, options=None, optimize=None)[源代码]

通过允许创建中间张量来评估“最佳”收缩顺序。

爱因斯坦求和表达式支持显式和隐式形式。除了下标格式外,交错格式也受支持,作为指定操作数及其模式标签的一种方式。有关操作数类型和示例的更多详细信息,请参阅 Network

参数
  • subscripts – 模式标签(下标),定义爱因斯坦求和表达式为逗号分隔的字符序列。表达式中允许使用 Unicode 字符,从而扩展了可以使用爱因斯坦求和约定指定的张量网络的大小。

  • operands – 张量(类 ndarray 对象)序列。当前支持的类型为 numpy.ndarray, cupy.ndarray, 和 torch.Tensor

  • qualifiers – 将张量限定符指定为 numpy.ndarray,其 tensor_qualifiers_dtype 对象的长度等于操作数的数量。

  • options – 将张量网络的选项指定为 NetworkOptions 对象。或者,也可以提供包含 NetworkOptions 构造函数的参数的 dict。如果未指定,则该值将设置为默认构造的 NetworkOptions 对象。

  • optimize – 此参数将路径优化选项指定为 OptimizerOptions 对象。或者,也可以提供包含 OptimizerOptions 构造函数的参数的字典。如果未指定,则该值将设置为默认构造的 OptimizerOptions 对象。

返回值

一个 2 元组 (path, opt_info)

  • path : 操作数序号对的序列,表示 numpy.einsum_path() 格式的最佳收缩顺序。

  • opt_info : OptimizerInfo 类型的对象,其中包含有关最佳收缩顺序的信息。

返回类型

tuple

注意

建议用户自行维护库句柄,以减少上下文初始化时间

from cuquantum import cutensornet as cutn
from cuquantum import contract, NetworkOptions

handle = cutn.create()
network_opts = NetworkOptions(handle=handle, ...)
path, info = contract_path(..., options=network_opts, ...)
# ... the same handle can be reused for further calls ...
# when it's done, remember to destroy the handle
cutn.destroy(handle)

注意

用户可以使用此 API 计算路径,而无需设备内存分配。实现此目的的一种方法是通过虚拟 cupy.ndarray 操作数,例如,不使用虚拟数组的路径查找