cuTensorNet 数据类型

cutensornetHandle_t

typedef void *cutensornetHandle_t

持有 cuTensorNet 库上下文的不透明结构。

此句柄持有 cuTensorNet 库上下文(设备属性、系统信息等)。句柄必须分别使用 cutensornetCreate()cutensornetDestroy() 函数进行初始化和销毁。

cutensornetLoggerCallback_t

typedef void (*cutensornetLoggerCallback_t)(int32_t logLevel, const char *functionName, const char *message)

用于日志记录 API 的回调函数指针类型。使用 cutensornetLoggerSetCallback() 设置回调函数。

参数
  • logLevel[in] 日志级别

  • functionName[in] 记录此消息的 API 的名称

  • message[in] 日志消息


cutensornetLoggerCallbackData_t

typedef void (*cutensornetLoggerCallbackData_t)(int32_t logLevel, const char *functionName, const char *message, void *userData)

用于日志记录 API 的回调函数指针类型。使用 cutensornetLoggerSetCallbackData() 设置回调函数和用户数据。

参数
  • logLevel[in] 日志级别

  • functionName[in] 记录此消息的 API 的名称

  • message[in] 日志消息

  • userData[in] 供回调函数使用的用户数据


cutensornetStatus_t

enum cutensornetStatus_t

cuTensorNet 状态类型返回值

此类型用于函数状态返回值。所有 cuTensorNet 库函数都返回其状态,状态值可以为以下值。

enumerator CUTENSORNET_STATUS_SUCCESS = 0

操作成功完成。

enumerator CUTENSORNET_STATUS_NOT_INITIALIZED = 1

cuTensorNet 库未初始化。

enumerator CUTENSORNET_STATUS_ALLOC_FAILED = 3

cuTensorNet 库内部资源分配失败。

enumerator CUTENSORNET_STATUS_INVALID_VALUE = 7

向函数传递了不支持的值或参数(指示用户错误)。

enumerator CUTENSORNET_STATUS_ARCH_MISMATCH = 8

设备未就绪,或目标架构不受支持。

enumerator CUTENSORNET_STATUS_MAPPING_ERROR = 11

访问 GPU 内存空间失败,这通常是由于纹理绑定失败引起的。

enumerator CUTENSORNET_STATUS_EXECUTION_FAILED = 13

GPU 程序执行失败。这通常是由 GPU 上内核启动失败引起的,而内核启动失败可能有多种原因。

enumerator CUTENSORNET_STATUS_INTERNAL_ERROR = 14

发生了 cuTensorNet 内部错误。

enumerator CUTENSORNET_STATUS_NOT_SUPPORTED = 15

请求的操作不受支持。

enumerator CUTENSORNET_STATUS_LICENSE_ERROR = 16

请求的功能需要某些许可证,并且在尝试检查当前许可时检测到错误。

enumerator CUTENSORNET_STATUS_CUBLAS_ERROR = 17

调用 CUBLAS 未成功。

enumerator CUTENSORNET_STATUS_CUDA_ERROR = 18

发生了一些未知的 CUDA 错误。

enumerator CUTENSORNET_STATUS_INSUFFICIENT_WORKSPACE = 19

提供的工作区不足。

enumerator CUTENSORNET_STATUS_INSUFFICIENT_DRIVER = 20

驱动程序版本不足。

enumerator CUTENSORNET_STATUS_IO_ERROR = 21

文件 I/O 相关错误。

enumerator CUTENSORNET_STATUS_CUTENSOR_VERSION_MISMATCH = 22

动态链接的 cuTENSOR 库不兼容。

enumerator CUTENSORNET_STATUS_NO_DEVICE_ALLOCATOR = 23

请求从内存池中获取设备内存,但未设置内存池。

enumerator CUTENSORNET_STATUS_ALL_HYPER_SAMPLES_FAILED = 24

所有超参数样本均失败,一个或多个错误发生,请通过导出 CUTENSORNET_LOG_LEVEL= > 1 启用日志以查看详细信息。

enumerator CUTENSORNET_STATUS_CUSOLVER_ERROR = 25

调用 cuSOLVER 未成功。

enumerator CUTENSORNET_STATUS_DEVICE_ALLOCATOR_ERROR = 26

设备内存池操作失败。

enumerator CUTENSORNET_STATUS_DISTRIBUTED_FAILURE = 27

分布式通信服务失败。

enumerator CUTENSORNET_STATUS_INTERRUPTED = 28

操作被用户中断,无法恢复或完成。


cutensornetComputeType_t

enum cutensornetComputeType_t

编码 cuTensorNet 的计算类型(详细信息请参阅“用户指南 - 精度保证”)。

enumerator CUTENSORNET_COMPUTE_16F = (1U << 0U)

浮点型:5 位指数和 10 位尾数(又称半精度)

enumerator CUTENSORNET_COMPUTE_16BF = (1U << 10U)

浮点型:8 位指数和 7 位尾数(又称 bfloat)

enumerator CUTENSORNET_COMPUTE_TF32 = (1U << 12U)

浮点型:8 位指数和 10 位尾数(又称 tensor-float-32)

enumerator CUTENSORNET_COMPUTE_3XTF32 = (1U << 13U)

浮点型:比 TF32 更精确,但比 float 精度低

enumerator CUTENSORNET_COMPUTE_32F = (1U << 2U)

浮点型:8 位指数和 23 位尾数(又称 float)

enumerator CUTENSORNET_COMPUTE_64F = (1U << 4U)

浮点型:11 位指数和 52 位尾数(又称 double)

enumerator CUTENSORNET_COMPUTE_8U = (1U << 6U)

8 位无符号整数

enumerator CUTENSORNET_COMPUTE_8I = (1U << 8U)

8 位有符号整数

enumerator CUTENSORNET_COMPUTE_32U = (1U << 7U)

32 位无符号整数

enumerator CUTENSORNET_COMPUTE_32I = (1U << 9U)

32 位有符号整数


cutensornetContractionOptimizerConfigAttributes_t

enum cutensornetContractionOptimizerConfigAttributes_t

此枚举列出了可以修改的 cutensornetContractionOptimizerConfig_t 的所有属性。

enumerator CUTENSORNET_CONTRACTION_OPTIMIZER_CONFIG_GRAPH_NUM_PARTITIONS = 0

int32_t: 网络在 num_partitions 上递归分割,直到每个分区的尺寸小于或等于截止值。 num_partitions 的允许范围为 [2, 30]。 当禁用超参数优化器时,默认值为 8。

enumerator CUTENSORNET_CONTRACTION_OPTIMIZER_CONFIG_GRAPH_CUTOFF_SIZE = 1

int32_t: 网络在 num_partitions 上递归分割,直到每个分区的尺寸小于或等于此截止值。 cutoff_size 的允许范围为 [4, 50]。 当禁用超参数优化器时,默认值为 8。

enumerator CUTENSORNET_CONTRACTION_OPTIMIZER_CONFIG_GRAPH_ALGORITHM = 2

cutensornetGraphAlgo_t: 用于图划分的图算法。选项包括 CUTENSORNET_GRAPH_ALGO_KWAY(默认)或 CUTENSORNET_GRAPH_ALGO_RB。

enumerator CUTENSORNET_CONTRACTION_OPTIMIZER_CONFIG_GRAPH_IMBALANCE_FACTOR = 3

int32_t: 指定分区之间允许的最大尺寸不平衡。允许范围 [30, 2000]。 当禁用超参数优化器时,默认值为 200。

enumerator CUTENSORNET_CONTRACTION_OPTIMIZER_CONFIG_GRAPH_NUM_ITERATIONS = 4

int32_t: 指定图划分器非粗化过程的每个阶段中细化算法的迭代次数。允许范围 [1, 500]。 当禁用超参数优化器时,默认值为 60。

enumerator CUTENSORNET_CONTRACTION_OPTIMIZER_CONFIG_GRAPH_NUM_CUTS = 5

int32_t: 指定图划分器将计算的不同划分的数量。最终划分是实现最佳边割或通信量的划分。允许范围 [1, 40]。 当禁用超参数优化器时,默认值为 10。

enumerator CUTENSORNET_CONTRACTION_OPTIMIZER_CONFIG_RECONFIG_NUM_ITERATIONS = 10

int32_t: 指定要选择进行重新配置的子树数量。值为 0 时禁用重新配置。默认值为 500。 重新配置中花费的时间通常占路径查找器运行时间的大部分,与此成正比。

enumerator CUTENSORNET_CONTRACTION_OPTIMIZER_CONFIG_RECONFIG_NUM_LEAVES = 11

int32_t: 指定每次重新配置迭代中为优化选择的子树中的最大叶节点数。默认值为 8。 重新配置中花费的时间通常占路径查找器运行时间的大部分,与此成正比。

enumerator CUTENSORNET_CONTRACTION_OPTIMIZER_CONFIG_SLICER_DISABLE_SLICING = 20

int32_t: 如果设置为 1,则禁用切片,无论可用内存如何。

enumerator CUTENSORNET_CONTRACTION_OPTIMIZER_CONFIG_SLICER_MEMORY_MODEL = 21

cutensornetMemoryModel_t: 用于确定工作空间大小的内存模型。 CUTENSORNET_MEMORY_MODEL_HEURISTIC 使用简单的内存模型,不需要外部调用。 CUTENSORNET_MEMORY_MODEL_CUTENSOR (默认)使用 cuTENSOR 更精确地评估 cuTENSOR 进行收缩所需的内存量。

enumerator CUTENSORNET_CONTRACTION_OPTIMIZER_CONFIG_SLICER_MEMORY_FACTOR = 22

int32_t: 首次切片查找迭代的内存限制,以工作空间大小的百分比表示。允许范围 [1, 100]。当内存模型使用 CUTENSORNET_MEMORY_MODEL_CUTENSOR 时,默认值为 80,当使用 CUTENSORNET_MEMORY_MODEL_HEURISTIC 时,默认值为 100。

enumerator CUTENSORNET_CONTRACTION_OPTIMIZER_CONFIG_SLICER_MIN_SLICES = 23

int32_t: 在第一轮切片中要生成的最小切片数。默认为 1。

enumerator CUTENSORNET_CONTRACTION_OPTIMIZER_CONFIG_SLICER_SLICE_FACTOR = 24

int32_t: 在每一轮切片中增加切片总数的因子。默认为 32,必须至少为 2。

enumerator CUTENSORNET_CONTRACTION_OPTIMIZER_CONFIG_HYPER_NUM_SAMPLES = 30

int32_t: 超参数优化器随机样本数。默认为 0(禁用)。

enumerator CUTENSORNET_CONTRACTION_OPTIMIZER_CONFIG_HYPER_NUM_THREADS = 31

int32_t: 并行超参数优化器线程数。默认为内核数 / 2。 当用户提供时,它将受到内核数的限制。

enumerator CUTENSORNET_CONTRACTION_OPTIMIZER_CONFIG_SIMPLIFICATION_DISABLE_DR = 40

int32_t: 如果设置为 1,则禁用延迟秩简化。

enumerator CUTENSORNET_CONTRACTION_OPTIMIZER_CONFIG_SEED = 60

int32_t: 内部使用的随机种子,以便重现相同的路径。

enumerator CUTENSORNET_CONTRACTION_OPTIMIZER_CONFIG_COST_FUNCTION_OBJECTIVE = 61

cutensornetOptimizerCost_t: 用于查找最佳收缩路径的目标函数。 CUTENSORNET_OPTIMIZER_COST_FLOPS (默认)查找使 FLOP 计数最小化的路径。 CUTENSORNET_OPTIMIZER_COST_TIME (实验性)查找使估计时间最小化的路径。估计时间基于算术强度计算得出。 CUTENSORNET_OPTIMIZER_COST_TIME_TUNED (实验性)查找使估计时间最小化的路径。估计时间基于为每个架构测量的成对收缩的性能启发式方法计算得出。

enumerator CUTENSORNET_CONTRACTION_OPTIMIZER_CONFIG_CACHE_REUSE_NRUNS = 62

int32_t: 利用缓存重用的运行次数

enumerator CUTENSORNET_CONTRACTION_OPTIMIZER_CONFIG_SMART_OPTION = 63

cutensornetSmartOption_t: 启用或禁用智能选项。


cutensornetContractionOptimizerInfoAttributes_t

enum cutensornetContractionOptimizerInfoAttributes_t

此枚举列出了 cutensornetContractionOptimizerInfo_t 的所有可访问属性。

enumerator CUTENSORNET_CONTRACTION_OPTIMIZER_INFO_PATH = 0

cutensornetContractionPath_t: 指向收缩路径的指针。

enumerator CUTENSORNET_CONTRACTION_OPTIMIZER_INFO_NUM_SLICES = 10

int64_t: 切片总数。

enumerator CUTENSORNET_CONTRACTION_OPTIMIZER_INFO_NUM_SLICED_MODES = 11

int32_t: 切片模式总数。(只读)

enumerator CUTENSORNET_CONTRACTION_OPTIMIZER_INFO_SLICED_MODE = 12

已弃用 int32_t* slicedModes:slicedModes[i],其中 i < numSlicedModes,指的是第 i 个切片模式的模式标签(参见关于 cutensornetCreateNetworkDescriptor()modesIn)。(只读)

enumerator CUTENSORNET_CONTRACTION_OPTIMIZER_INFO_SLICED_EXTENT = 13

已弃用 int64_t* slicedExtents:slicedExtents[i],其中 i < numSlicedModes,指的是第 i 个切片模式的切片范围(参见关于 cutensornetCreateNetworkDescriptor()extentsIn)。(只读)

enumerator CUTENSORNET_CONTRACTION_OPTIMIZER_INFO_SLICING_CONFIG = 14

cutensornetSlicingConfig_t*:指向与给定路径一起使用的切片配置设置(切片数、切片模式和切片范围)的指针。

enumerator CUTENSORNET_CONTRACTION_OPTIMIZER_INFO_SLICING_OVERHEAD = 15

double: 由于切片产生的开销。

enumerator CUTENSORNET_CONTRACTION_OPTIMIZER_INFO_PHASE1_FLOP_COUNT = 20

double: 路径查找阶段 1 之后(即,在切片和重新配置之前)给定网络的 FLOP 计数。

enumerator CUTENSORNET_CONTRACTION_OPTIMIZER_INFO_FLOP_COUNT = 21

double: 切片后给定网络的 FLOP 计数。

enumerator CUTENSORNET_CONTRACTION_OPTIMIZER_INFO_EFFECTIVE_FLOPS_EST = 22

double: 实验性功能。根据成本函数,返回所有切片单次pass的总 FLOP 等效值。当成本函数为 FLOP 时,返回传统的 FLOP。当选择基于时间的成本函数时,effectiveFlopsEstimation = RuntimeEstimation * ops_peak。

enumerator CUTENSORNET_CONTRACTION_OPTIMIZER_INFO_RUNTIME_EST = 23

double: 实验性功能。根据基于时间的成本函数目标,返回所有切片单次pass的运行时估计值,单位为 [s]。

enumerator CUTENSORNET_CONTRACTION_OPTIMIZER_INFO_LARGEST_TENSOR = 24

double: 最大中间张量中的元素数量。

enumerator CUTENSORNET_CONTRACTION_OPTIMIZER_INFO_INTERMEDIATE_MODES = 30

int32_t* intermediateModes:\([\text{intermediateModes}[\sum_{n=0}^{i-1}\text{numIntermediateModes}[n]], \text{intermediateModes}[\sum_{n=0}^{i}\text{numIntermediateModes}[n]])\) 中的模式是中间张量 i 的模式(因此存储 intermediateModes 的总字节数为 \(\text{sizeof}(\text{int32_t})*\left(\sum_n \text{numIntermediateModes}[n]\right)\))。

enumerator CUTENSORNET_CONTRACTION_OPTIMIZER_INFO_NUM_INTERMEDIATE_MODES = 31

int32_t* numIntermediateModes:numIntermediateModes[i],其中 i < numInputs - 1,是中间张量 i 的模式数量(参见关于 cutensornetCreateNetworkDescriptor()numInputs)。


cutensornetContractionAutotunePreferenceAttributes_t

enum cutensornetContractionAutotunePreferenceAttributes_t

此枚举列出了 cutensornetContractionAutotunePreference_t 的所有可访问属性。

enumerator CUTENSORNET_CONTRACTION_AUTOTUNE_MAX_ITERATIONS

int32_t: 每次成对收缩的自动调优迭代的最大次数(默认值:3)。

enumerator CUTENSORNET_CONTRACTION_AUTOTUNE_INTERMEDIATE_MODES

int32_t: 0=OFF,1=ON,2=AUTO(默认)。如果设置为 1,cutensorContractionAutotune() 会通过多次执行网络的一个切片来自动调优中间模式顺序,以确定如何使用 cuTENSOR 获得最佳性能。如果设置为 2,则根据网络特性启发式地选择是否自动调优中间模式顺序。


cutensornetGraphAlgo_t

enum cutensornetGraphAlgo_t

此枚举列出了可以设置的图算法。

enumerator CUTENSORNET_GRAPH_ALGO_RB
enumerator CUTENSORNET_GRAPH_ALGO_KWAY

cutensornetMemoryModel_t

enum cutensornetMemoryModel_t

此枚举列出了用于确定工作区大小的内存模型。

enumerator CUTENSORNET_MEMORY_MODEL_HEURISTIC
enumerator CUTENSORNET_MEMORY_MODEL_CUTENSOR

cutensornetOptimizerCost_t

enum cutensornetOptimizerCost_t

此枚举列出了要优化的各种成本函数。

enumerator CUTENSORNET_OPTIMIZER_COST_FLOPS

传统 FLOP(默认)

enumerator CUTENSORNET_OPTIMIZER_COST_TIME = 31

基于算术强度的运行时估计(实验性功能)。仅适用于 Volta 及更高版本的架构。

enumerator CUTENSORNET_OPTIMIZER_COST_TIME_TUNED = 37

基于为每个架构测量的成对收缩的性能启发式的运行时估计(实验性功能)。仅适用于 Volta 及更高版本的架构。


cutensornetSmartOption_t

enum cutensornetSmartOption_t

此枚举列出了各种智能优化选项。

enumerator CUTENSORNET_SMART_OPTION_DISABLED = 0

未启用任何智能选项。

enumerator CUTENSORNET_SMART_OPTION_ENABLED = 1

启用 contractionOptimizer 的自动配置 (SMART) 选项(默认行为)。这包括但不限于限制路径查找器经过的时间,避免无意义的配置,以及动态调整配置。


cutensornetNetworkDescriptor_t

typedef void *cutensornetNetworkDescriptor_t

不透明结构,用于保存 cuTensorNet 的网络描述符。


cutensornetNetworkAttributes_t

enum cutensornetNetworkAttributes_t

此枚举列出了 cutensornetNetworkDescriptor_t 的所有可访问属性。

enumerator CUTENSORNET_NETWORK_INPUT_TENSORS_NUM_CONSTANT = 0

int32_t: 常量输入张量的数量(只读)。

enumerator CUTENSORNET_NETWORK_INPUT_TENSORS_CONSTANT = 1

cutensornetTensorIDList_t:用于保存常量输入张量的数量和索引的结构体。设置此属性将覆盖先前对 CUTENSORNET_NETWORK_INPUT_TENSORS_CONSTANT 的设置。

enumerator CUTENSORNET_NETWORK_INPUT_TENSORS_NUM_CONJUGATED = 10

int32_t: 共轭输入张量的数量(只读)。

enumerator CUTENSORNET_NETWORK_INPUT_TENSORS_CONJUGATED = 11

cutensornetTensorIDList_t:用于保存共轭输入张量的数量和索引的结构体。将共轭张量的数量设置为 -1 将选择所有张量。设置此属性将覆盖先前对 CUTENSORNET_NETWORK_INPUT_TENSORS_CONJUGATED 的设置。

enumerator CUTENSORNET_NETWORK_INPUT_TENSORS_NUM_REQUIRE_GRAD = 20

int32_t: 需要梯度计算的输入张量的数量(只读)。

enumerator CUTENSORNET_NETWORK_INPUT_TENSORS_REQUIRE_GRAD = 21

cutensornetTensorIDList_t:用于保存需要梯度计算的输入张量的数量和索引的结构体。将需要梯度计算的张量数量设置为 -1 将选择所有张量。设置此属性将覆盖先前对 CUTENSORNET_NETWORK_INPUT_TENSORS_REQUIRE_GRAD 的设置。


cutensornetContractionPlan_t

typedef void *cutensornetContractionPlan_t

不透明结构,用于保存 cuTensorNet 的收缩计划。


cutensornetNodePair_t

struct cutensornetNodePair_t

一对 int32_t 值(通常指代网络内部的张量 ID)。

公共成员

int32_t first

第一个张量

int32_t second

第二个张量


cutensornetContractionPath_t

struct cutensornetContractionPath_t

保存有关收缩路径的信息。

提供的路径可与 numpy.einsum_path 返回的路径互换使用。

公共成员

int32_t numContractions

张量收缩的总数。

cutensornetNodePair_t *data

大小为 numContractions 的数组。与 data[i].firstdata[i].second 相对应的张量将被收缩。


cutensornetContractionOptimizerConfig_t

typedef void *cutensornetContractionOptimizerConfig_t

不透明结构,用于保存 cuTensorNet 的路径查找器配置。


cutensornetContractionOptimizerInfo_t

typedef void *cutensornetContractionOptimizerInfo_t

不透明结构,用于保存关于优化路径和切片的信息(参见 cutensornetContractionOptimizerInfoAttributes_t)。


cutensornetContractionAutotunePreference_t

typedef void *cutensornetContractionAutotunePreference_t

不透明结构,用于保存关于自动调优阶段的信息。


cutensornetSliceGroup_t

typedef void *cutensornetSliceGroup_t

不透明结构,用于捕获一组切片。


cutensornetDeviceMemHandler_t

struct cutensornetDeviceMemHandler_t

设备内存处理程序结构体,用于保存关于用户提供的、流有序设备内存池(mempool)的信息。

公共成员

void *ctx

指向用户拥有的 mempool/上下文对象的指针。

int (*device_alloc)(void *ctx, void **ptr, size_t size, cudaStream_t stream)

指向用户提供的例程的函数指针,用于在 stream 上分配大小为 size 的设备内存。

分配的内存应可被当前设备访问(或更准确地说,可被绑定到库句柄的当前 CUDA 上下文访问)。

此接口支持任何流有序内存分配器 ctx。成功后,分配的内存可以立即在给定流上使用,供在此调用之后在同一流上排队/排序的任何操作使用。

调用者有责任确保建立正确的流顺序。

分配的内存应至少为 256 字节对齐。

参数
  • ctx[in] 指向用户拥有的 mempool 对象的指针。

  • ptr[out] 成功后,指向已分配缓冲区的指针。

  • size[in] 要分配的内存量(以字节为单位)。

  • stream[in] CUDA 流,内存在此流上分配(并建立流顺序)。

返回

调用的错误状态。成功时返回 0,否则返回任何非零整数。如果此函数是 C++ 函数,则不得抛出异常。

int (*device_free)(void *ctx, void *ptr, size_t size, cudaStream_t stream)

指向用户提供的例程的函数指针,用于在 stream 上释放大小为 size 的设备内存。

此接口支持任何流有序内存分配器。成功后,在此调用之后排序的任何后续访问(指向指针 ptr 的内存)都是未定义的行为。

调用者有责任确保建立正确的流顺序。

如果参数 ctxsize 与传递给 device_alloc 以分配指针 ptr 指向的内存的参数不同,则行为未定义。

参数 stream 不需要与用于分配 ptr 的流相同,只要正确建立流顺序即可。如果此假设不成立,则行为未定义。

参数
  • ctx[in] 指向用户拥有的 mempool 对象的指针。

  • ptr[in] 指向已分配缓冲区的指针。

  • size[in] 已分配内存的大小。

  • stream[in] CUDA 流,内存在此流上释放(并建立流顺序)。

返回

调用的错误状态。成功时返回 0,否则返回任何非零整数。如果此函数是 C++ 函数,则不得抛出异常。

char name[CUTENSORNET_ALLOCATOR_NAME_LEN]

提供的 mempool 的名称。


CUTENSORNET_ALLOCATOR_NAME_LEN

CUTENSORNET_ALLOCATOR_NAME_LEN

用户提供的 mempool 名称的最大长度。


cutensornetWorkspaceDescriptor_t

typedef void *cutensornetWorkspaceDescriptor_t

不透明结构,用于保存关于用户提供的工作空间的信息。


cutensornetWorksizePref_t

enum cutensornetWorksizePref_t

工作空间偏好枚举。

enumerator CUTENSORNET_WORKSIZE_PREF_MIN = 0

每个 contraction 至少会有一个算法可用。

enumerator CUTENSORNET_WORKSIZE_PREF_RECOMMENDED = 1

每个 contraction 最合适的算法将可用。

enumerator CUTENSORNET_WORKSIZE_PREF_MAX = 2

每个 contraction 所有算法都将可用。


cutensornetMemspace_t

enum cutensornetMemspace_t

用于工作空间分配的内存空间枚举。

enumerator CUTENSORNET_MEMSPACE_DEVICE = 0

设备内存空间。在此内存空间上分配的工作空间内存缓冲区必须是设备可访问的。如果内存缓冲区在设备上原生分配 (cudaMalloc),或在托管内存上分配 (cudaMallocManaged),或在主机上注册 (cudaMallocHost, cudaHostAlloc, 或 cudaHostRegister),或具有完整 CUDA 统一内存支持的系统内存,则内存缓冲区是设备可访问的。

enumerator CUTENSORNET_MEMSPACE_HOST = 1

主机内存空间。在此内存空间上分配的工作空间内存缓冲区必须是 CPU 可访问的。如果内存缓冲区在主机上原生分配(例如 malloc),或在托管内存上分配 (cudaMallocManaged),或在主机上注册 (cudaMallocHostcudaHostAlloc),则内存缓冲区是 CPU 可访问的。


cutensornetWorkspaceKind_t

enum cutensornetWorkspaceKind_t

用于工作空间分配的类型枚举。

enumerator CUTENSORNET_WORKSPACE_SCRATCH = 0

暂存工作空间内存。

enumerator CUTENSORNET_WORKSPACE_CACHE = 1

缓存工作空间内存,必须保持有效,并且在引用操作迭代完成之前不得修改内容。


cutensornetTensorQualifiers_t

struct cutensornetTensorQualifiers_t

保存关于输入张量的限定符/标志。

公共成员

int32_t isConjugate

如果设置为 1,则表示张量应进行复共轭(仅适用于复数数据类型)。

int32_t isConstant

如果设置为 1,则表示张量的数据在不同的网络 contraction 中不会更改。

int32_t requiresGradient

如果设置为 1,则表示张量需要梯度计算。


cutensornetSliceInfoPair_t

struct cutensornetSliceInfoPair_t

一对 int32_t 和 int64_t 值,用于保存切片的模式和模式的预期 extent 大小。

公共成员

int32_t slicedMode

模式。

int64_t slicedExtent

模式的 Extent。


cutensornetSlicingConfig_t

struct cutensornetSlicingConfig_t

保存关于切片的信息。

公共成员

uint32_t numSlicedModes

切片模式的总数。

cutensornetSliceInfoPair_t *data

大小为 numSlicedModes 的数组。


cutensornetTensorDescriptor_t

typedef void *cutensornetTensorDescriptor_t

不透明结构,用于保存 cuTensorNet 的张量描述符。


cutensornetTensorSVDConfig_t

typedef void *cutensornetTensorSVDConfig_t

不透明结构,用于保存 cuTensorNet 的张量 SVD 配置。


cutensornetTensorSVDConfigAttributes_t

enum cutensornetTensorSVDConfigAttributes_t

此枚举列出了 cutensornetTensorSVDConfig_t 的所有可修改属性。

注意

当指定多个截断截止值 (CUTENSORNET_TENSOR_SVD_CONFIG_ABS_CUTOFF, CUTENSORNET_TENSOR_SVD_CONFIG_REL_CUTOFF, CUTENSORNET_TENSOR_SVD_CONFIG_DISCARDED_WEIGHT_CUTOFF) 或输入 cutensornetTensorDescriptor_t 中的最大 extent 时。运行时缩减的 extent 将被确定为所有之中的最小值。

enumerator CUTENSORNET_TENSOR_SVD_CONFIG_ABS_CUTOFF

double: 截断的绝对截止值,默认值为 0。

enumerator CUTENSORNET_TENSOR_SVD_CONFIG_REL_CUTOFF

double: 截断的截止值(相对于最大奇异值),默认值为 0。

enumerator CUTENSORNET_TENSOR_SVD_CONFIG_S_NORMALIZATION

cutensornetTensorSVDNormalization_t: 如何归一化奇异值(在可能的截断之后)。默认为不归一化。

enumerator CUTENSORNET_TENSOR_SVD_CONFIG_S_PARTITION

cutensornetTensorSVDPartition_t: 如何划分奇异值。

enumerator CUTENSORNET_TENSOR_SVD_CONFIG_ALGO

cutensornetTensorSVDAlgo_t: SVD 算法,默认值为 gesvd>。

enumerator CUTENSORNET_TENSOR_SVD_CONFIG_ALGO_PARAMS
enumerator CUTENSORNET_TENSOR_SVD_CONFIG_DISCARDED_WEIGHT_CUTOFF

可选参数,特定于 SVD 算法 cutensornetTensorSVDAlgo_t。当前支持 cutensornetGesvdjParams_t 用于 CUTENSORNET_TENSOR_SVD_ALGO_GESVDJ,以及 cutensornetGesvdrParams_t 用于 CUTENSORNET_TENSOR_SVD_ALGO_GESVDR。

双精度浮点数:最大累积舍弃权重(舍弃奇异值的平方和除以所有奇异值的平方和),默认值为 0。当使用 CUTENSORNET_TENSOR_SVD_ALGO_GESVDR 时,不允许使用此选项。


cutensornetTensorSVDPartition_t

enum cutensornetTensorSVDPartition_t

此枚举列出了奇异值的各种划分方案。

enumerator CUTENSORNET_TENSOR_SVD_PARTITION_NONE

返回定义的 U、S、V(默认)。

enumerator CUTENSORNET_TENSOR_SVD_PARTITION_US

将 S 吸收到 U 上,即 US、nullptr、V。

enumerator CUTENSORNET_TENSOR_SVD_PARTITION_SV

将 S 吸收到 V 上,即 U、nullptr、SV。

enumerator CUTENSORNET_TENSOR_SVD_PARTITION_UV_EQUAL

将 S 均等地吸收到 U 和 V 上,即 US^{1/2}、nullptr、S^{1/2}V。


cutensornetTensorSVDNormalization_t

enum cutensornetTensorSVDNormalization_t

此枚举列出了奇异值的各种归一化方法。

enumerator CUTENSORNET_TENSOR_SVD_NORMALIZATION_NONE

无归一化。

enumerator CUTENSORNET_TENSOR_SVD_NORMALIZATION_L1

归一化截断的奇异值,使 L1 范数变为 1。

enumerator CUTENSORNET_TENSOR_SVD_NORMALIZATION_L2

归一化截断的奇异值,使 L2 范数变为 1。

enumerator CUTENSORNET_TENSOR_SVD_NORMALIZATION_LINF

归一化截断的奇异值,使 L-无穷范数变为 1。


cutensornetTensorSVDAlgo_t

enum cutensornetTensorSVDAlgo_t

此枚举列出了 SVD 的各种算法。

enumerator CUTENSORNET_TENSOR_SVD_ALGO_GESVD

cusolverDnGesvd(默认)。

enumerator CUTENSORNET_TENSOR_SVD_ALGO_GESVDJ

cusolverDnGesvdj.

enumerator CUTENSORNET_TENSOR_SVD_ALGO_GESVDP

cusolverDnXgesvdp.

enumerator CUTENSORNET_TENSOR_SVD_ALGO_GESVDR

cusolverDnXgesvdr.


cutensornetGesvdjParams_t

struct cutensornetGesvdjParams_t

此结构体保存 gesvdj 设置的参数。

公共成员

double tol

控制数值奇异值精度的容差,默认值(将 tol 设置为 0)采用 cuSolver 的默认容差(机器精度)。

int32_t maxSweeps

gesvdj 的最大扫描次数,默认值(将 maxSweep 设置为 0)采用 cuSolver 的默认 gesvdj 最大扫描设置。


cutensornetGesvdrParams_t

struct cutensornetGesvdrParams_t

此结构体保存 gesvdr 设置的参数。

公共成员

int64_t oversampling

过采样的尺寸,默认值(将 oversampling 设置为 0)是截断维度的 4 倍 k 与满秩和 k 之间的差值中的较小者。

int64_t niters

gesvdr 的幂迭代法迭代次数,默认值(将 niters 设置为 0)为 10。


cutensornetGesvdjStatus_t

struct cutensornetGesvdjStatus_t

此结构体保存 gesvdj 执行的信息。

公共成员

double residual

gesvdj 的残差。

int32_t sweeps

gesvdj 执行的扫描次数。


cutensornetGesvdpStatus_t

struct cutensornetGesvdpStatus_t

此结构体保存 gesvdp 执行的信息。

公共成员

double errSigma

gesvdp 中扰动的大小,显示 SVD 的精度。


cutensornetTensorSVDInfo_t

typedef void *cutensornetTensorSVDInfo_t

不透明结构体,用于保存 cuTensorNet 的张量 SVD 信息。


cutensornetTensorSVDInfoAttributes_t

enum cutensornetTensorSVDInfoAttributes_t

此枚举列出了 cutensornetTensorSVDInfo_t 的所有属性。

enumerator CUTENSORNET_TENSOR_SVD_INFO_FULL_EXTENT

int64_t:如果不进行截断,共享模式的预期维度。

enumerator CUTENSORNET_TENSOR_SVD_INFO_REDUCED_EXTENT

int64_t:运行时找到的共享模式的真实维度。

enumerator CUTENSORNET_TENSOR_SVD_INFO_DISCARDED_WEIGHT

双精度浮点数:奇异值截断的舍弃权重。当启用固定维度截断且 svd 算法设置为 CUTENSORNET_TENSOR_SVD_ALGO_GESVDR 时,不会计算此信息。

enumerator CUTENSORNET_TENSOR_SVD_INFO_ALGO

cutensornetTensorSVDAlgo_t:用于计算的 SVD 算法。

enumerator CUTENSORNET_TENSOR_SVD_INFO_ALGO_STATUS

cutensornetGateSplitAlgo_t

enum cutensornetGateSplitAlgo_t

此枚举列出了将门张量应用于两个连接张量的算法。

enumerator CUTENSORNET_GATE_SPLIT_ALGO_DIRECT

直接算法,带有用于门分裂过程的收缩和 SVD。

enumerator CUTENSORNET_GATE_SPLIT_ALGO_REDUCED

简化的算法,带有用于门分裂过程的额外 QR。


cutensornetState_t

typedef void *cutensornetState_t

不透明结构体,用于保存张量网络状态。


cutensornetStatePurity_t

enum cutensornetStatePurity_t

此枚举捕获张量网络状态的纯度。

enumerator CUTENSORNET_STATE_PURITY_PURE

纯张量网络状态(属于主张量空间)


cutensornetBoundaryCondition_t

enum cutensornetBoundaryCondition_t

此枚举列出了受支持的张量网络分解的受支持边界条件。

enumerator CUTENSORNET_BOUNDARY_CONDITION_OPEN

开放边界条件。


cutensornetStateAttributes_t

enum cutensornetStateAttributes_t

此枚举列出了与 cutensornetState_t 计算相关的所有属性。

enumerator CUTENSORNET_STATE_MPS_CANONICAL_CENTER = 0

已弃用 int32_t:目标 MPS 的规范中心应放置的位点。如果小于 0(默认 -1),则不强制执行规范中心。

enumerator CUTENSORNET_STATE_MPS_SVD_CONFIG_ABS_CUTOFF = 1

已弃用 双精度浮点数:SVD 截断的绝对截止值(默认为 0)。

enumerator CUTENSORNET_STATE_MPS_SVD_CONFIG_REL_CUTOFF = 2

已弃用 双精度浮点数:相对于最大奇异值的 SVD 截断的截止值(默认为 0)。

enumerator CUTENSORNET_STATE_MPS_SVD_CONFIG_S_NORMALIZATION = 3

已弃用 cutensornetTensorSVDNormalization_t:潜在截断后如何归一化奇异值。默认为无归一化。

enumerator CUTENSORNET_STATE_MPS_SVD_CONFIG_ALGO = 4

已弃用 cutensornetTensorSVDAlgo_t:SVD 算法(默认为 gesvd)。

enumerator CUTENSORNET_STATE_MPS_SVD_CONFIG_ALGO_PARAMS = 5
enumerator CUTENSORNET_STATE_MPS_SVD_CONFIG_DISCARDED_WEIGHT_CUTOFF = 6

已弃用 可选参数,特定于 SVD 算法 cutensornetTensorSVDAlgo_t,当前支持 cutensornetGesvdjParams_t 用于 CUTENSORNET_TENSOR_SVD_ALGO_GESVDJ,以及 cutensornetGesvdrParams_t 用于 CUTENSORNET_TENSOR_SVD_ALGO_GESVDR。

已弃用 双精度浮点数:最大累积舍弃权重(舍弃奇异值的平方和除以所有奇异值的平方和),默认为 0。当选择 CUTENSORNET_TENSOR_SVD_ALGO_GESVDR 时,不允许使用此选项。

enumerator CUTENSORNET_STATE_NUM_HYPER_SAMPLES = 7

已弃用 int32_t:张量网络收缩路径查找器使用的超样本数。

enumerator CUTENSORNET_STATE_CONFIG_MPS_CANONICAL_CENTER = 16

int32_t: 目标 MPS 的规范中心应放置的位点。如果小于 0(默认值 -1),则不会强制执行规范中心。

enumerator CUTENSORNET_STATE_CONFIG_MPS_SVD_ABS_CUTOFF = 17

double: SVD 截断的绝对截止值(默认值为 0)。

enumerator CUTENSORNET_STATE_CONFIG_MPS_SVD_REL_CUTOFF = 18

double: 相对于最大奇异值的 SVD 截断的相对截止值(默认值为 0)。

enumerator CUTENSORNET_STATE_CONFIG_MPS_SVD_S_NORMALIZATION = 19

cutensornetTensorSVDNormalization_t: 潜在截断后如何归一化奇异值。默认值是不归一化。

enumerator CUTENSORNET_STATE_CONFIG_MPS_SVD_ALGO = 20

cutensornetTensorSVDAlgo_t: SVD 算法(默认值为 gesvd)。

enumerator CUTENSORNET_STATE_CONFIG_MPS_SVD_ALGO_PARAMS = 21
enumerator CUTENSORNET_STATE_CONFIG_MPS_SVD_DISCARDED_WEIGHT_CUTOFF = 22

可选参数,特定于 SVD 算法 cutensornetTensorSVDAlgo_t 的参数,目前支持用于 CUTENSORNET_TENSOR_SVD_ALGO_GESVDJ 的 cutensornetGesvdjParams_t 和用于 CUTENSORNET_TENSOR_SVD_ALGO_GESVDR 的 cutensornetGesvdrParams_t

double: 最大累积丢弃权重(丢弃的奇异值的平方和除以所有奇异值的平方和),默认为 0。当选择 CUTENSORNET_TENSOR_SVD_ALGO_GESVDR 时,不允许使用此选项。

enumerator CUTENSORNET_STATE_CONFIG_MPS_MPO_APPLICATION = 23

可选参数,用于 MPS-MPO 计算中所有收缩和分解操作的计算设置(包括交换)。默认设置为 CUTENSORNET_STATE_MPO_APPLICATION_INEXACT

enumerator CUTENSORNET_STATE_CONFIG_NUM_HYPER_SAMPLES = 30

int32_t: 张量网络收缩路径查找器使用的超样本数。

enumerator CUTENSORNET_STATE_INFO_FLOPS = 64

double: 与张量网络状态的显式计算相关的总 Flop 计数估计。


cutensornetStateMPOApplication_t

enum cutensornetStateMPOApplication_t

此枚举列出了 MPS-MPO 计算中收缩和分解操作的所有选项。

enumerator CUTENSORNET_STATE_MPO_APPLICATION_INEXACT

MPS-MPO 乘法中的所有交换和分解操作将遵循底层 SVD 配置设置的相同约束,以及由 cutensornetStateFinalizeMPS() 设置的目标范围。

enumerator CUTENSORNET_STATE_MPO_APPLICATION_EXACT

MPS-MPO 乘法中的所有交换和分解操作将以精确的方式执行,并忽略来自底层 SVD 配置和目标范围规范的所有约束。请注意,在当前版本中,此选项仅应用于需要精确 MPS 计算时。


cutensornetNetworkOperator_t

typedef void *cutensornetNetworkOperator_t

持有张量网络算子对象的不透明结构。


cutensornetStateAccessor_t

typedef void *cutensornetStateAccessor_t

持有张量网络状态幅度(完整输出状态张量的切片)的不透明结构。


cutensornetAccessorAttributes_t

enum cutensornetAccessorAttributes_t

此枚举列出了与张量网络状态幅度的计算相关的属性。

enumerator CUTENSORNET_ACCESSOR_OPT_NUM_HYPER_SAMPLES = 0

已弃用 int32_t:张量网络收缩路径查找器使用的超样本数。

enumerator CUTENSORNET_ACCESSOR_CONFIG_NUM_HYPER_SAMPLES = 1

int32_t: 张量网络收缩路径查找器使用的超样本数。

enumerator CUTENSORNET_ACCESSOR_INFO_FLOPS = 64

double: 与计算指定张量网络状态幅度集相关的总 Flop 计数估计。


cutensornetStateExpectation_t

typedef void *cutensornetStateExpectation_t

持有张量网络状态期望值的不透明结构。


cutensornetExpectationAttributes_t

enum cutensornetExpectationAttributes_t

此枚举列出了与张量网络状态期望值的计算相关的属性。

enumerator CUTENSORNET_EXPECTATION_OPT_NUM_HYPER_SAMPLES = 0

已弃用 int32_t:张量网络收缩路径查找器使用的超样本数。

enumerator CUTENSORNET_EXPECTATION_CONFIG_NUM_HYPER_SAMPLES = 1

int32_t: 张量网络收缩路径查找器使用的超样本数。

enumerator CUTENSORNET_EXPECTATION_INFO_FLOPS = 64

double: 与计算张量网络状态期望值相关的总 Flop 计数估计。


cutensornetStateMarginal_t

typedef void *cutensornetStateMarginal_t

持有张量网络状态边缘分布(又称约化密度矩阵)的不透明结构。


cutensornetMarginalAttributes_t

enum cutensornetMarginalAttributes_t

此枚举列出了与张量网络状态边缘张量的计算相关的属性。

enumerator CUTENSORNET_MARGINAL_OPT_NUM_HYPER_SAMPLES = 0

已弃用 int32_t:张量网络收缩路径查找器使用的超样本数。

enumerator CUTENSORNET_MARGINAL_CONFIG_NUM_HYPER_SAMPLES = 1

int32_t: 张量网络收缩路径查找器使用的超样本数。

enumerator CUTENSORNET_MARGINAL_INFO_FLOPS = 64

double: 与计算张量网络状态边缘张量相关的总 Flop 计数估计。


cutensornetStateSampler_t

typedef void *cutensornetStateSampler_t

持有张量网络状态采样器的不透明结构。


cutensornetSamplerAttributes_t

enum cutensornetSamplerAttributes_t

此枚举列出了与张量网络状态采样相关的属性。

enumerator CUTENSORNET_SAMPLER_OPT_NUM_HYPER_SAMPLES = 0

已弃用 int32_t:张量网络收缩路径查找器使用的超样本数。

enumerator CUTENSORNET_SAMPLER_CONFIG_NUM_HYPER_SAMPLES = 1

int32_t: 张量网络收缩路径查找器使用的超样本数。

enumerator CUTENSORNET_SAMPLER_CONFIG_DETERMINISTIC = 2

int32_t: 正随机种子将确保跨多个应用程序运行的确定性采样结果。

enumerator CUTENSORNET_SAMPLER_INFO_FLOPS = 64

double: 与从张量网络状态生成单个样本相关的总 Flop 计数估计。


cudaDataType_t

此类型是一个枚举,用于指定数据精度。当数据引用本身不携带类型时(例如 void *)使用。

enum cudaDataType_t

enumerator CUDA_R_16F = 2

半精度实数

enumerator CUDA_C_16F = 6

一对半精度数表示的复数

enumerator CUDA_R_16BF = 14

nv_bfloat16 实数

enumerator CUDA_C_16BF = 15

一对 nv_bfloat16 数表示的复数

enumerator CUDA_R_32F = 0

单精度浮点实数

enumerator CUDA_C_32F = 4

一对单精度浮点数表示的复数

enumerator CUDA_R_64F = 1

双精度浮点实数

enumerator CUDA_C_64F = 5

一对双精度浮点数表示的复数

enumerator CUDA_R_4I = 16

4 位有符号整数实数

enumerator CUDA_C_4I = 17

一对 4 位有符号整数表示的复数

enumerator CUDA_R_4U = 18

4 位无符号整数实数

enumerator CUDA_C_4U = 19

一对 4 位无符号整数表示的复数

enumerator CUDA_R_8I = 3

8 位有符号整数实数

enumerator CUDA_C_8I = 7

一对 8 位有符号整数表示的复数

enumerator CUDA_R_8U = 8

8 位无符号整数实数

enumerator CUDA_C_8U = 9

复数,表示为一对无符号 8 位整数

enumerator CUDA_R_16I = 20

实数,表示为有符号 16 位整数

enumerator CUDA_C_16I = 21

复数,表示为一对有符号 16 位整数

enumerator CUDA_R_16U = 22

实数,表示为无符号 16 位整数

enumerator CUDA_C_16U = 23

复数,表示为一对无符号 16 位整数

enumerator CUDA_R_32I = 10

实数,表示为有符号 32 位整数

enumerator CUDA_C_32I = 11

复数,表示为一对有符号 32 位整数

enumerator CUDA_R_32U = 12

实数,表示为无符号 32 位整数

enumerator CUDA_C_32U = 13

复数,表示为一对无符号 32 位整数

enumerator CUDA_R_64I = 24

实数,表示为有符号 64 位整数

enumerator CUDA_C_64I = 25

复数,表示为一对有符号 64 位整数

enumerator CUDA_R_64U = 26

实数,表示为无符号 64 位整数

enumerator CUDA_C_64U = 27

复数,表示为一对无符号 64 位整数