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
类型的对象,其中包含有关最佳收缩顺序的信息。
- 返回类型
注意
建议用户自行维护库句柄,以减少上下文初始化时间
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
操作数,例如,不使用虚拟数组的路径查找。