cuquantum.cutensornet.contract_slices

cuquantum.cutensornet.contract_slices(intptr_t handle, intptr_t plan, raw_data_in, intptr_t raw_data_out, int32_t accumulate_output, intptr_t work_desc, intptr_t slice_group, intptr_t stream)[源代码]

执行张量网络的实际收缩。

参数
  • handle (intptr_t) – 持有 cuTensorNet 库上下文的不透明句柄。

  • plan (intptr_t) – 编码张量网络收缩的执行(参见 create_contraction_plan()contraction_autotune())。一些内部元数据可能会在收缩时更新。

  • raw_data_in (object) –

    N 个指针的数组(N 是在 create_network_descriptor() 中指定的输入张量的数量):raw_data_in[i] 指向与第 i 个输入张量关联的数据(在设备内存中)。它可以是

    • 一个 int,作为指向数组的指针地址,或者

    • 一个 int 的 Python 序列(作为指针地址)。

  • raw_data_out (intptr_t) – 指向输出张量的原始数据(在设备内存中)。

  • accumulate_output (int32_t) – 如果为 0,则将收缩结果写入 raw_data_out;否则将结果累加到 raw_data_out 中。

  • work_desc (intptr_t) – 描述工作区的不透明结构。提供的 CUTENSORNET_WORKSPACE_SCRATCH 工作区必须是 valid (工作区指针必须是设备可访问的,请参见 cutensornetMemspace_t,并且工作区大小必须大于或等于计划创建时提供的最小值和值)。请参见 create_contraction_plan()workspace_get_memory_size()workspace_set_memory()CUTENSORNET_WORKSPACE_CACHE 工作区必须是设备可访问的,请参见 cutensornetMemspace_t;它可以是任何大小,越大越好,最大可达使用 workspace_get_memory_size() 查询的大小。如果设置了设备内存处理程序,则 work_desc 可以设置为 null,或者 work_desc 中任一工作区类型的内存指针可以设置为 null,并且工作区大小可以设置为负值(在这种情况下,将使用“推荐”大小,请参见 CUTENSORNET_WORKSIZE_PREF_RECOMMENDED)或 valid 大小。对于 CUTENSORNET_WORKSPACE_SCRATCH 类型的工作区,具有指定大小的内存缓冲区将从用户的内存池中提取,并在完成后释放回内存池。对于 CUTENSORNET_WORKSPACE_CACHE 类型的工作区,具有指定大小的内存缓冲区将从用户的内存池中提取,并在 work_desc 被销毁后释放回内存池,如果 work_desc != NULL,否则,一旦 plan 被销毁,或者在后续的 contract_slices() 调用中提供了具有不同内存地址/大小的替代 work_desc

  • slice_group (intptr_t) – 指定要收缩的切片的不透明对象(参见 create_slice_group_from_id_range()cutensornetCreateSliceGroupFromIDs())。如果 设置为 null, 则将收缩所有切片。

  • stream (intptr_t) – 执行计算的 CUDA 流。