cudnn_cnn 库#

数据类型参考#

这些是 cudnn_cnn 库中的数据类型参考。

结构体类型#

这些是 cudnn_cnn 库中的结构体类型。

cudnnConvolutionBwdDataAlgoPerf_t#

此枚举类型已弃用,目前仅由已弃用的 API 使用。考虑使用已弃用 API 的替代品,这些 API 使用此枚举类型。

cudnnConvolutionBwdDataAlgoPerf_t 是一个结构体,包含 cudnnFindConvolutionBackwardDataAlgorithm() 返回的性能结果或 cudnnGetConvolutionBackwardDataAlgorithm_v7() 返回的启发式结果。

数据成员

cudnnConvolutionBwdDataAlgo_t algo

运行该算法以获得相关的性能指标。

cudnnStatus_t status

如果在 cudnnConvolutionBackwardData() 的工作区分配或计时期间发生任何错误,此状态将表示该错误。否则,此状态将是 cudnnConvolutionBackwardData() 的返回状态。

  • 如果在工作区分配期间发生任何错误或提供的工作区不足,则为 CUDNN_STATUS_ALLOC_FAILED

  • 如果在计时计算或工作区释放期间发生任何错误,则为 CUDNN_STATUS_INTERNAL_ERROR

  • 否则,这将是 cudnnConvolutionBackwardData() 的返回状态。

float time

cudnnConvolutionBackwardData() 的执行时间(以毫秒为单位)。

size_t memory

工作区大小(以字节为单位)。

cudnnDeterminism_t determinism

算法的确定性。

cudnnMathType_t mathType

提供给算法的数学类型。

int reserved[3]

为未来属性保留的空间。

cudnnConvolutionBwdFilterAlgoPerf_t#

此枚举类型已弃用,目前仅由已弃用的 API 使用。考虑使用已弃用 API 的替代品,这些 API 使用此枚举类型。

cudnnConvolutionBwdFilterAlgoPerf_t 是一个结构体,包含 cudnnFindConvolutionBackwardFilterAlgorithm() 返回的性能结果或 cudnnGetConvolutionBackwardFilterAlgorithm_v7() 返回的启发式结果。

数据成员

cudnnConvolutionBwdFilterAlgo_t algo

运行该算法以获得相关的性能指标。

cudnnStatus_t status

如果在 cudnnConvolutionBackwardFilter() 的工作区分配或计时期间发生任何错误,此状态将表示该错误。否则,此状态将是 cudnnConvolutionBackwardFilter() 的返回状态。

  • 如果在工作区分配期间发生任何错误或提供的工作区不足,则为 CUDNN_STATUS_ALLOC_FAILED

  • 如果在计时计算或工作区释放期间发生任何错误,则为 CUDNN_STATUS_INTERNAL_ERROR

  • 否则,这将是 cudnnConvolutionBackwardFilter() 的返回状态。

float time

cudnnConvolutionBackwardFilter() 的执行时间(以毫秒为单位)。

size_t memory

工作区大小(以字节为单位)。

cudnnDeterminism_t determinism

算法的确定性。

cudnnMathType_t mathType

提供给算法的数学类型。

int reserved[3]

为未来属性保留的空间。

cudnnConvolutionFwdAlgoPerf_t#

此枚举类型已弃用,目前仅由已弃用的 API 使用。考虑使用已弃用 API 的替代品,这些 API 使用此枚举类型。

cudnnConvolutionFwdAlgoPerf_t 是一个结构体,包含 cudnnFindConvolutionForwardAlgorithm() 返回的性能结果或 cudnnGetConvolutionForwardAlgorithm_v7() 返回的启发式结果。

数据成员

cudnnConvolutionFwdAlgo_t algo

运行该算法以获得相关的性能指标。

cudnnStatus_t status

如果在 cudnnConvolutionForward() 的工作区分配或计时期间发生任何错误,此状态将表示该错误。否则,此状态将是 cudnnConvolutionForward() 的返回状态。

  • 如果在工作区分配期间发生任何错误或提供的工作区不足,则为 CUDNN_STATUS_ALLOC_FAILED

  • 如果在计时计算或工作区释放期间发生任何错误,则为 CUDNN_STATUS_INTERNAL_ERROR

  • 否则,这将是 cudnnConvolutionForward() 的返回状态。

float time

cudnnConvolutionForward() 的执行时间(以毫秒为单位)。

size_t memory

工作区大小(以字节为单位)。

cudnnDeterminism_t determinism

算法的确定性。

cudnnMathType_t mathType

提供给算法的数学类型。

int reserved[3]

为未来属性保留的空间。

指向不透明结构体类型的指针#

这些是 cudnn_cnn 库中指向不透明结构体类型的指针。

cudnnConvolutionDescriptor_t#

此枚举类型已弃用,目前仅由已弃用的 API 使用。考虑使用已弃用 API 的替代品,这些 API 使用此枚举类型。

cudnnConvolutionDescriptor_t 是一个指向不透明结构的指针,该结构保存卷积操作的描述。cudnnCreateConvolutionDescriptor() 用于创建一个实例,cudnnSetConvolutionNdDescriptor()cudnnSetConvolution2dDescriptor() 必须用于初始化此实例。

cudnnFusedOpsConstParamPack_t#

此枚举类型已弃用,目前仅由已弃用的 API 使用。考虑使用已弃用 API 的替代品,这些 API 使用此枚举类型。

cudnnFusedOpsConstParamPack_t 是一个指向不透明结构的指针,该结构保存 cudnnFusedOps 常量参数的描述。使用函数 cudnnCreateFusedOpsConstParamPack() 创建此结构的一个实例,并使用函数 cudnnDestroyFusedOpsConstParamPack() 销毁先前创建的描述符。

cudnnFusedOpsPlan_t#

此枚举类型已弃用,目前仅由已弃用的 API 使用。考虑使用已弃用 API 的替代品,这些 API 使用此枚举类型。

cudnnFusedOpsPlan_t 是一个指向不透明结构的指针,该结构保存 cudnnFusedOpsPlan 的描述。此描述符包含计划信息,包括问题类型和大小、应运行的内核以及内部工作区分区。使用函数 cudnnCreateFusedOpsPlan() 创建此结构的一个实例,并使用函数 cudnnDestroyFusedOpsPlan() 销毁先前创建的描述符。

cudnnFusedOpsVariantParamPack_t#

此枚举类型已弃用,目前仅由已弃用的 API 使用。考虑使用已弃用 API 的替代品,这些 API 使用此枚举类型。

cudnnFusedOpsVariantParamPack_t 是一个指向不透明结构的指针,该结构保存 cudnnFusedOps 变体参数的描述。使用函数 cudnnCreateFusedOpsVariantParamPack() 创建此结构的一个实例,并使用函数 cudnnDestroyFusedOpsVariantParamPack() 销毁先前创建的描述符。

枚举类型#

这些是 cudnn_cnn 库中的枚举类型。

cudnnFusedOps_t#

此枚举类型已弃用,目前仅由已弃用的 API 使用。考虑使用已弃用 API 的替代品,这些 API 使用此枚举类型。

cudnnFusedOps_t 类型是一个枚举类型,用于选择要在融合操作中执行的特定计算序列。

成员和描述

CUDNN_FUSED_SCALE_BIAS_ACTIVATION_CONV_BNSTATS = 0

在每个通道的基础上,它按以下顺序执行这些操作:scaleadd biasactivationconvolution,并生成 batchNorm 统计信息。

cudnnFusedOps_t
CUDNN_FUSED_SCALE_BIAS_ACTIVATION_WGRAD = 1

在每个通道的基础上,它按以下顺序执行这些操作:scaleadd biasactivation、卷积反向权重,并生成 batchNorm 统计信息。

cudnnFusedOps_t
CUDNN_FUSED_BN_FINALIZE_STATISTICS_TRAINING = 2

ySumySqSum、学习到的 scalebias 计算等效的 scalebias。 可选地,更新运行统计信息并生成保存的统计信息。

CUDNN_FUSED_BN_FINALIZE_STATISTICS_INFERENCE = 3

从学习到的运行统计信息和学习到的 scalebias 计算等效的 scalebias

CUDNN_FUSED_CONV_SCALE_BIAS_ADD_ACTIVATION = 4

在每个通道的基础上,按以下顺序执行这些操作:convolutionscaleadd bias、与另一个张量逐元素相加,以及 activation

CUDNN_FUSED_SCALE_BIAS_ADD_ACTIVATION_GEN_BITMASK = 5

在每个通道的基础上,按以下顺序执行这些操作:对一个张量执行 scalebias,对第二个张量执行 scalebias,将这两个张量逐元素相加,并在结果张量上执行 activation 并生成激活位掩码。

CUDNN_FUSED_DACTIVATION_FORK_DBATCHNORM = 6

在每个通道的基础上,按以下顺序执行这些操作:反向激活,分支(意味着,为残差分支写出梯度),以及反向批归一化。

cudnnFusedOpsConstParamLabel_t#

此枚举类型已弃用,目前仅由已弃用的 API 使用。考虑使用已弃用 API 的替代品,这些 API 使用此枚举类型。

cudnnFusedOpsConstParamLabel_t 是一个枚举类型,用于选择 cudnnFusedOps 描述符的类型。 有关更多信息,请参阅 cudnnSetFusedOpsConstParamPackAttribute()

typedef enum {
    CUDNN_PARAM_XDESC                          = 0,
    CUDNN_PARAM_XDATA_PLACEHOLDER              = 1,
    CUDNN_PARAM_BN_MODE                        = 2,
    CUDNN_PARAM_BN_EQSCALEBIAS_DESC            = 3,
    CUDNN_PARAM_BN_EQSCALE_PLACEHOLDER         = 4,
    CUDNN_PARAM_BN_EQBIAS_PLACEHOLDER          = 5,
    CUDNN_PARAM_ACTIVATION_DESC                = 6,
    CUDNN_PARAM_CONV_DESC                      = 7,
    CUDNN_PARAM_WDESC                          = 8,
    CUDNN_PARAM_WDATA_PLACEHOLDER              = 9,
    CUDNN_PARAM_DWDESC                         = 10,
    CUDNN_PARAM_DWDATA_PLACEHOLDER             = 11,
    CUDNN_PARAM_YDESC                          = 12,
    CUDNN_PARAM_YDATA_PLACEHOLDER              = 13,
    CUDNN_PARAM_DYDESC                         = 14,
    CUDNN_PARAM_DYDATA_PLACEHOLDER             = 15,
    CUDNN_PARAM_YSTATS_DESC                    = 16,
    CUDNN_PARAM_YSUM_PLACEHOLDER               = 17,
    CUDNN_PARAM_YSQSUM_PLACEHOLDER             = 18,
    CUDNN_PARAM_BN_SCALEBIAS_MEANVAR_DESC      = 19,
    CUDNN_PARAM_BN_SCALE_PLACEHOLDER           = 20,
    CUDNN_PARAM_BN_BIAS_PLACEHOLDER            = 21,
    CUDNN_PARAM_BN_SAVED_MEAN_PLACEHOLDER      = 22,
    CUDNN_PARAM_BN_SAVED_INVSTD_PLACEHOLDER    = 23,
    CUDNN_PARAM_BN_RUNNING_MEAN_PLACEHOLDER    = 24,
    CUDNN_PARAM_BN_RUNNING_VAR_PLACEHOLDER     = 25,
    CUDNN_PARAM_ZDESC                          = 26,
    CUDNN_PARAM_ZDATA_PLACEHOLDER              = 27,
    CUDNN_PARAM_BN_Z_EQSCALEBIAS_DESC          = 28,
    CUDNN_PARAM_BN_Z_EQSCALE_PLACEHOLDER       = 29,
    CUDNN_PARAM_BN_Z_EQBIAS_PLACEHOLDER        = 30,
    CUDNN_PARAM_ACTIVATION_BITMASK_DESC        = 31,
    CUDNN_PARAM_ACTIVATION_BITMASK_PLACEHOLDER = 32,
    CUDNN_PARAM_DXDESC                         = 33,
    CUDNN_PARAM_DXDATA_PLACEHOLDER             = 34,
    CUDNN_PARAM_DZDESC                         = 35,
    CUDNN_PARAM_DZDATA_PLACEHOLDER             = 36,
    CUDNN_PARAM_BN_DSCALE_PLACEHOLDER          = 37,
    CUDNN_PARAM_BN_DBIAS_PLACEHOLDER           = 38,
    } cudnnFusedOpsConstParamLabel_t;
cudnnFusedOpsConstParamLabel_t 中表格的图例#

使用的缩写形式

代表

Setter

cudnnSetFusedOpsConstParamPackAttribute()

Getter

cudnnGetFusedOpsConstParamPackAttribute()

X_PointerPlaceHolder_t

cudnnFusedOpsPointerPlaceHolder_t

属性键列中的 X_ 前缀

代表枚举器名称中的 CUDNN_PARAM_

对于 cudnnFusedOpsVariantParamLabel_t 中的属性 CUDNN_FUSED_SCALE_BIAS_ACTIVATION_CONV_BNSTATS#

属性键

在 Setter 中传递的预期描述符类型

描述

创建后的默认值

X_XDESC

在 setter 中,*param 应该是 xDesc,一个指向先前初始化的 cudnnTensorDescriptor_t 的指针。

张量描述符,描述 x(输入)张量的大小、布局和数据类型。

NULL

X_XDATA_PLACEHOLDER

在 setter 中,*param 应该是指向先前初始化的 X_PointerPlaceHolder_t* 的指针。

描述 VariantParamPack 中的 xData 指针是否为 NULL,如果不是,则用户承诺指针对齐 *

CUDNN_PTR_NULL

X_BN_MODE

在 setter 中,*param 应该是指向先前初始化的 cudnnBatchNormMode_t* 的指针。

描述 scale、bias 和统计信息的操作模式。 从 cuDNN 7.6.0 开始,仅支持 CUDNN_BATCHNORM_SPATIALCUDNN_BATCHNORM_SPATIAL_PERSISTENT,这意味着 scale、bias 和统计信息都是每个通道的。

CUDNN_BATCHNORM_PER_ACTIVATION

X_BN_EQSCALEBIAS_DESC

在 setter 中,*param 应该是指向先前初始化的 cudnnTensorDescriptor_t 的指针。

张量描述符,描述 batchNorm 等效 scale 和 bias 张量的大小、布局和数据类型。 形状必须与 CUDNN_PARAM_BN_MODE 中指定的模式匹配。 如果设置为 NULL,则 scale 和 bias 操作都将变为 NOP。

NULL

X_BN_EQSCALE_PLACEHOLDER

在 setter 中,*param 应该是指向先前初始化的 X_PointerPlaceHolder_t* 的指针。

描述 VariantParamPack 中的 batchNorm 等效 scale 指针是否为 NULL,如果不是,则用户承诺指针对齐 *。 如果设置为 CUDNN_PTR_NULL,则 scale 操作变为 NOP。

CUDNN_PTR_NULL

X_BN_EQBIAS_PLACEHOLDER

在 setter 中,*param 应该是指向先前初始化的 X_PointerPlaceHolder_t* 的指针。

描述 VariantParamPack 中的 batchNorm 等效 bias 指针是否为 NULL,如果不是,则用户承诺指针对齐 *。 如果设置为 CUDNN_PTR_NULL,则 bias 操作变为 NOP。

CUDNN_PTR_NULL

X_ACTIVATION_DESC

在 setter 中,*param 应该是指向先前初始化的 cudnnActivationDescriptor_t* 的指针。

描述激活操作。 从 7.6.0 开始,仅支持 CUDNN_ACTIVATION_RELUCUDNN_ACTIVATION_IDENTITY 的激活模式。 如果设置为 NULL 或激活模式设置为 CUDNN_ACTIVATION_IDENTITY,则 op 序列中的激活变为 NOP。

NULL

X_CONV_DESC

在 setter 中,*param 应该是指向先前初始化的 cudnnConvolutionDescriptor_t* 的指针。

描述卷积操作。

NULL

X_WDESC

在 setter 中,*param 应该是指向先前初始化的 cudnnFilterDescriptor_t* 的指针。

Filter 描述符,描述 w(filter)张量的大小、布局和数据类型。

NULL

X_WDATA_PLACEHOLDER

在 setter 中,*param 应该是指向先前初始化的 X_PointerPlaceHolder_t* 的指针。

描述 VariantParamPack 中的 w (filter)张量指针是否为 NULL,如果不是,则用户承诺指针对齐 *

CUDNN_PTR_NULL

X_YDESC

在 setter 中,*param 应该是指向先前初始化的 cudnnTensorDescriptor_t* 的指针。

张量描述符,描述 y(输出)张量的大小、布局和数据类型。

NULL

X_YDATA_PLACEHOLDER

在 setter 中,*param 应该是指向先前初始化的 X_PointerPlaceHolder_t* 的指针。

描述 VariantParamPack 中的 y (输出)张量指针是否为 NULL,如果不是,则用户承诺指针对齐 *

CUDNN_PTR_NULL

X_YSTATS_DESC

在 setter 中,*param 应该是指向先前初始化的 cudnnTensorDescriptor_t* 的指针。

张量描述符,描述 y 的总和以及 y 平方张量的总和的大小、布局和数据类型。 形状需要与 CUDNN_PARAM_BN_MODE 中指定的模式匹配。 如果设置为 NULL,则 y 统计信息生成操作将变为 NOP。

NULL

X_YSUM_PLACEHOLDER

在 setter 中,*param 应该是指向先前初始化的 X_PointerPlaceHolder_t* 的指针。

描述 VariantParamPacky 指针的总和是否为 NULL,如果不是,则用户承诺指针对齐 *。 如果设置为 CUDNN_PTR_NULL,则 y 统计信息生成操作将变为 NOP。

CUDNN_PTR_NULL

X_YSQSUM_PLACEHOLDER

在 setter 中,*param 应该是指向先前初始化的 X_PointerPlaceHolder_t* 的指针。

描述 VariantParamPacky 平方指针的总和是否为 NULL,如果不是,则用户承诺指针对齐 *。 如果设置为 CUDNN_PTR_NULL,则 y 统计信息生成操作将变为 NOP。

CUDNN_PTR_NULL

注意

  • 如果 ConstParamPack 中的相应指针占位符设置为 CUDNN_PTR_NULL,则 VariantParamPack 中的设备指针也需要为 NULL

  • 如果 ConstParamPack 中的相应指针占位符设置为 CUDNN_PTR_ELEM_ALIGNEDCUDNN_PTR_16B_ALIGNED,则 VariantParamPack 中的设备指针可能不为 NULL,并且需要分别至少元素对齐或 16 字节对齐。

从 cuDNN 7.6.0 开始,如果满足表中的以下条件,则将触发完全融合的快速路径。 否则,将触发较慢的部分融合路径。

cudnnFusedOpsConstParamLabel_t 的完全融合快速路径(前向)的条件#

参数

条件

设备计算能力

需要是 7.07.27.5 之一。

  • CUDNN_PARAM_XDESC

  • CUDNN_PARAM_XDATA_PLACEHOLDER

  • 张量是 4 维的

  • 数据类型为 CUDNN_DATA_HALF

  • 布局是完全 packed 的 NHWC

  • 对齐方式为 CUDNN_PTR_16B_ALIGNED

  • 张量 C 维度是 8 的倍数。

  • CUDNN_PARAM_BN_EQSCALEBIAS_DESC

  • CUDNN_PARAM_BN_EQSCALE_PLACEHOLDER

  • CUDNN_PARAM_BN_EQBIAS_PLACEHOLDER

  • 如果 scale 和 bias 操作之一未转换为 NOP
    • 张量是形状为 1xCx1x1 的 4 维张量

    • 数据类型为 CUDNN_DATA_HALF

    • 布局是完全 packed 的

    • 对齐方式为 CUDNN_PTR_16B_ALIGNED

  • CUDNN_PARAM_CONV_DESC

  • CUDNN_PARAM_WDESC

  • CUDNN_PARAM_WDATA_PLACEHOLDER

  • 卷积描述符 mode 需要为 CUDNN_CROSS_CORRELATION

  • 卷积描述符 dataType 需要为 CUDNN_DATA_FLOAT

  • 卷积描述符 dilationA 为 (1,1)。

  • 卷积描述符组计数需要为 1

  • 卷积描述符 mathType 需要为 CUDNN_TENSOR_OP_MATHCUDNN_TENSOR_OP_MATH_ALLOW_CONVERSION

  • Filter 采用 NHWC 布局

  • Filter 数据类型为 CUDNN_DATA_HALF

  • Filter K 维度是 32 的倍数

  • Filter 大小 RxS 为 1x1 或 3x3

  • 如果 filter 大小 RxS 为 1x1,则卷积描述符 padA 需要为 (0,0),filterStrideA 需要为 (1,1)。

  • Filter 对齐方式为 CUDNN_PTR_16B_ALIGNED

  • CUDNN_PARAM_YDESC

  • CUDNN_PARAM_YDATA_PLACEHOLDER

  • 张量是 4 维的

  • 数据类型为 CUDNN_DATA_HALF

  • 布局是完全 packed 的 NHWC

  • 对齐方式为 CUDNN_PTR_16B_ALIGNED

  • CUDNN_PARAM_YSTATS_DESC

  • CUDNN_PARAM_YSUM_PLACEHOLDER

  • CUDNN_PARAM_YSQSUM_PLACEHOLDER

  • 如果生成统计信息操作未转换为 NOP
    • 张量是形状为 1xKx1x1 的 4 维张量

    • 数据类型为 CUDNN_DATA_FLOAT

    • 布局是完全 packed 的

    • 对齐方式为 CUDNN_PTR_16B_ALIGNED

对于 cudnnFusedOpsConstParamLabel_t 中的属性 CUDNN_FUSED_SCALE_BIAS_ACTIVATION_WGRAD#

属性键

在 Setter 中传递的预期描述符类型

描述

创建后的默认值

X_XDESC

在 setter 中,*param 应该是 xDesc,一个指向先前初始化的 cudnnTensorDescriptor_t 的指针。

张量描述符,描述 x(输入)张量的大小、布局和数据类型。

NULL

X_XDATA_PLACEHOLDER

在 setter 中,*param 应该是指向先前初始化的 X_PointerPlaceHolder_t* 的指针。

描述 VariantParamPack 中的 xData 指针是否为 NULL,如果不是,则用户承诺指针对齐 *

CUDNN_PTR_NULL

X_BN_MODE

在 setter 中,*param 应该是指向先前初始化的 cudnnBatchNormMode_t* 的指针。

描述 scale、bias 和统计信息的操作模式。 从 cuDNN 7.6.0 开始,仅支持 CUDNN_BATCHNORM_SPATIALCUDNN_BATCHNORM_SPATIAL_PERSISTENT,这意味着 scale、bias 和统计信息都是每个通道的。

CUDNN_BATCHNORM_PER_ACTIVATION

X_BN_EQSCALEBIAS_DESC

在 setter 中,*param 应该是指向先前初始化的 cudnnTensorDescriptor_t 的指针。

张量描述符,描述 batchNorm 等效 scale 和 bias 张量的大小、布局和数据类型。 形状必须与 CUDNN_PARAM_BN_MODE 中指定的模式匹配。 如果设置为 NULL,则 scale 和 bias 操作都将变为 NOP。

NULL

X_BN_EQSCALE_PLACEHOLDER

在 setter 中,*param 应该是指向先前初始化的 X_PointerPlaceHolder_t* 的指针。

描述 VariantParamPack 中的 batchNorm 等效 scale 指针是否为 NULL,如果不是,则用户承诺指针对齐 *。 如果设置为 CUDNN_PTR_NULL,则 scale 操作变为 NOP。

CUDNN_PTR_NULL

X_BN_EQBIAS_PLACEHOLDER

在 setter 中,*param 应该是指向先前初始化的 X_PointerPlaceHolder_t* 的指针。

描述 VariantParamPack 中的 batchNorm 等效 bias 指针是否为 NULL,如果不是,则用户承诺指针对齐 *。 如果设置为 CUDNN_PTR_NULL,则 bias 操作变为 NOP。

CUDNN_PTR_NULL

X_ACTIVATION_DESC

在 setter 中,*param 应该是指向先前初始化的 cudnnActivationDescriptor_t* 的指针。

描述激活操作。 从 7.6.0 开始,仅支持 CUDNN_ACTIVATION_RELUCUDNN_ACTIVATION_IDENTITY 的激活模式。 如果设置为 NULL 或激活模式设置为 CUDNN_ACTIVATION_IDENTITY,则 op 序列中的激活变为 NOP。

NULL

X_CONV_DESC

在 setter 中,*param 应该是指向先前初始化的 cudnnConvolutionDescriptor_t* 的指针。

描述卷积操作。

NULL

X_DWDESC

在 setter 中,*param 应该是指向先前初始化的 cudnnFilterDescriptor_t* 的指针。

Filter 描述符,描述 dw(filter 梯度输出)张量的大小、布局和数据类型。

NULL

X_DWDATA_PLACEHOLDER

在 setter 中,*param 应该是指向先前初始化的 X_PointerPlaceHolder_t* 的指针。

描述 VariantParamPack 中的 dw (filter 梯度输出)张量指针是否为 NULL,如果不是,则用户承诺指针对齐 *

CUDNN_PTR_NULL

X_DYDESC

在 setter 中,*param 应该是指向先前初始化的 cudnnTensorDescriptor_t* 的指针。

张量描述符,描述 dy(梯度输入)张量的大小、布局和数据类型。

NULL

X_DYDATA_PLACEHOLDER

在 setter 中,*param 应该是指向先前初始化的 X_PointerPlaceHolder_t* 的指针。

描述 VariantParamPack 中的 dy (梯度输入)张量指针是否为 NULL,如果不是,则用户承诺指针对齐 *

CUDNN_PTR_NULL

注意

  • 如果 ConstParamPack 中的相应指针占位符设置为 CUDNN_PTR_NULL,则 VariantParamPack 中的设备指针也需要为 NULL

  • 如果 ConstParamPack 中的相应指针占位符设置为 CUDNN_PTR_ELEM_ALIGNEDCUDNN_PTR_16B_ALIGNED,则 VariantParamPack 中的设备指针可能不为 NULL,并且需要分别至少元素对齐或 16 字节对齐。

从 cuDNN 7.6.0 开始,如果满足表中的以下条件,则将触发完全融合的快速路径。 否则,将触发较慢的部分融合路径。

cudnnFusedOpsConstParamLabel_t 的完全融合快速路径(反向)的条件#

参数

条件

设备计算能力

需要是 7.07.27.5 之一。

  • CUDNN_PARAM_XDESC

  • CUDNN_PARAM_XDATA_PLACEHOLDER

  • 张量是 4 维的

  • 数据类型为 CUDNN_DATA_HALF

  • 布局是完全 packed 的 NHWC

  • 对齐方式为 CUDNN_PTR_16B_ALIGNED

  • 张量 C 维度是 8 的倍数。

  • CUDNN_PARAM_BN_EQSCALEBIAS_DESC

  • CUDNN_PARAM_BN_EQSCALE_PLACEHOLDER

  • CUDNN_PARAM_BN_EQBIAS_PLACEHOLDER

  • 如果 scale 和 bias 操作之一未转换为 NOP
    • 张量是形状为 1xCx1x1 的 4 维张量

    • 数据类型为 CUDNN_DATA_HALF

    • 布局是完全 packed 的

    • 对齐方式为 CUDNN_PTR_16B_ALIGNED

  • CUDNN_PARAM_CONV_DESC

  • CUDNN_PARAM_DWDESC

  • CUDNN_PARAM_DWDATA_PLACEHOLDER

  • 卷积描述符 mode 需要为 CUDNN_CROSS_CORRELATION

  • 卷积描述符 dataType 需要为 CUDNN_DATA_FLOAT

  • 卷积描述符 dilationA 为 (1,1)。

  • 卷积描述符组计数需要为 1

  • 卷积描述符 mathType 需要为 CUDNN_TENSOR_OP_MATHCUDNN_TENSOR_OP_MATH_ALLOW_CONVERSION

  • Filter 梯度采用 NHWC 布局

  • Filter 梯度数据类型为 CUDNN_DATA_HALF

  • Filter 梯度 K 维度是 32 的倍数。

  • Filter 梯度大小 RxS 为 1x1 或 3x3

  • 如果 filter 梯度大小 RxS 为 1x1,则卷积描述符 padA 需要为 (0,0),filterStrideA 需要为 (1,1)。

  • Filter 梯度对齐方式为 CUDNN_PTR_16B_ALIGNED

  • CUDNN_PARAM_DYDESC

  • CUDNN_PARAM_DYDATA_PLACEHOLDER

  • 张量是 4 维的

  • 数据类型为 CUDNN_DATA_HALF

  • 布局是完全 packed 的 NHWC

  • 对齐方式为 CUDNN_PTR_16B_ALIGNED

对于 cudnnFusedOpsConstParamLabel_t 中的属性 CUDNN_FUSED_BN_FINALIZE_STATISTICS_TRAINING#

属性键

在 Setter 中传递的预期描述符类型

描述

创建后的默认值

X_BN_MODE

在 setter 中,*param 应该是指向先前初始化的 cudnnBatchNormMode_t* 的指针。

描述 scale、bias 和统计信息的操作模式。 从 cuDNN 7.6.0 开始,仅支持 CUDNN_BATCHNORM_SPATIALCUDNN_BATCHNORM_SPATIAL_PERSISTENT,这意味着 scale、bias 和统计信息都是每个通道的。

CUDNN_BATCHNORM_PER_ACTIVATION

X_YSTATS_DESC

在 setter 中,*param 应该是指向先前初始化的 cudnnTensorDescriptor_t 的指针。

张量描述符,描述 y 的总和以及 y 平方张量的总和的大小、布局和数据类型。 形状需要与 CUDNN_PARAM_BN_MODE 中指定的模式匹配。

NULL

X_YSUM_PLACEHOLDER

在 setter 中,*param 应该是指向先前初始化的 X_PointerPlaceHolder_t* 的指针。

描述 VariantParamPacky 指针的总和是否为 NULL,如果不是,则用户承诺指针对齐 *

CUDNN_PTR_NULL

X_YSQSUM_PLACEHOLDER

在 setter 中,*param 应该是指向先前初始化的 X_PointerPlaceHolder_t* 的指针。

描述 VariantParamPacky 平方指针的总和是否为 NULL,如果不是,则用户承诺指针对齐 *

CUDNN_PTR_NULL

X_BN_SCALEBIAS_MEANVAR_DESC

在 setter 中,*param 应该是指向先前初始化的 cudnnTensorDescriptor_t 的指针。

一个通用的张量描述符,描述 batchNorm 训练的 scale、bias 和统计信息张量的大小、布局和数据类型。 形状需要与 CUDNN_PARAM_BN_MODE 中指定的模式匹配(类似于 cudnnBatchNormalization* API 中的 bnScaleBiasMeanVarDesc 字段)。

NULL

X_BN_SCALE_PLACEHOLDER

在 setter 中,*param 应该是指向先前初始化的 X_PointerPlaceHolder_t* 的指针。

描述 VariantParamPack 中的 batchNorm 训练的 scale 指针是否为 NULL,如果不是,则用户承诺指针对齐 *。 如果不需要 BN_EQSCALE 的输出,则不需要此项,并且可以为 NULL

CUDNN_PTR_NULL

X_BN_BIAS_PLACEHOLDER

在 setter 中,*param 应该是指向先前初始化的 X_PointerPlaceHolder_t* 的指针。

描述 VariantParamPack 中的 batchNorm 训练的 bias 指针是否为 NULL,如果不是,则用户承诺指针对齐 *。 如果既不需要 BN_EQSCALE 也不需要 BN_EQBIAS 的输出,则不需要此项,并且可以为 NULL

CUDNN_PTR_NULL

X_BN_SAVED_MEAN_PLACEHOLDER

在 setter 中,*param 应该是指向先前初始化的 X_PointerPlaceHolder_t* 的指针。

描述 VariantParamPack 中的 batchNorm 保存的 mean 指针是否为 NULL,如果不是,则用户承诺指针对齐 *。 如果设置为 CUDNN_PTR_NULL,则此输出的计算将变为 NOP。

CUDNN_PTR_NULL

X_BN_SAVED_INVSTD_PLACEHOLDER

在 setter 中,*param 应该是指向先前初始化的 X_PointerPlaceHolder_t* 的指针。

描述 VariantParamPack 中保存的 batchNorm 反标准差指针是否为 NULL;如果不是,则表示用户承诺的指针对齐方式为 *。如果设置为 CUDNN_PTR_NULL,则此输出的计算将变为无操作 (NOP)。

CUDNN_PTR_NULL

X_BN_RUNNING_MEAN_PLACEHOLDER

在 setter 中,*param 应该是指向先前初始化的 X_PointerPlaceHolder_t* 的指针。

描述 VariantParamPack 中保存的 batchNorm 运行均值指针是否为 NULL;如果不是,则表示用户承诺的指针对齐方式为 *。如果设置为 CUDNN_PTR_NULL,则此输出的计算将变为无操作 (NOP)。

CUDNN_PTR_NULL

X_BN_RUNNING_VAR_PLACEHOLDER

在 setter 中,*param 应该是指向先前初始化的 X_PointerPlaceHolder_t* 的指针。

描述 VariantParamPack 中保存的 batchNorm 运行方差指针是否为 NULL;如果不是,则表示用户承诺的指针对齐方式为 *。如果设置为 CUDNN_PTR_NULL,则此输出的计算将变为无操作 (NOP)。

CUDNN_PTR_NULL

X_BN_EQSCALEBIAS_DESC

在 setter 中,*param 应该是指向先前初始化的 cudnnTensorDescriptor_t 的指针。

描述 batchNorm 等效缩放和偏差张量的大小、布局和数据类型的张量描述符。形状需要与 CUDNN_PARAM_BN_MODE 中指定的模式匹配。如果不需要 BN_EQSCALEBN_EQBIAS 的任何输出,则不需要此项,可以为 NULL

NULL

X_BN_EQSCALE_PLACEHOLDER

在 setter 中,*param 应该是指向先前初始化的 X_PointerPlaceHolder_t* 的指针。

描述 VariantParamPack 中保存的 batchNorm 等效缩放指针是否为 NULL;如果不是,则表示用户承诺的指针对齐方式为 *。如果设置为 CUDNN_PTR_NULL,则此输出的计算将变为无操作 (NOP)。

CUDNN_PTR_NULL

X_BN_EQBIAS_PLACEHOLDER

在 setter 中,*param 应该是指向先前初始化的 X_PointerPlaceHolder_t* 的指针。

描述 VariantParamPack 中保存的 batchNorm 等效偏差指针是否为 NULL;如果不是,则表示用户承诺的指针对齐方式为 *。如果设置为 CUDNN_PTR_NULL,则此输出的计算将变为无操作 (NOP)。

CUDNN_PTR_NULL

对于 cudnnFusedOpsConstParamLabel_t 中的属性 CUDNN_FUSED_BN_FINALIZE_STATISTICS_INFERENCE#

属性键

在 Setter 中传递的预期描述符类型

描述

创建后的默认值

X_BN_MODE

在 setter 中,*param 应该是指向先前初始化的 cudnnBatchNormMode_t* 的指针。

描述缩放、偏差和统计信息的操作模式。截至 cuDNN 7.6.0,仅支持 CUDNN_BATCHNORM_SPATIALCUDNN_BATCHNORM_SPATIAL_PERSISTENT,这意味着缩放、偏差和统计信息都是按通道进行的。

CUDNN_BATCHNORM_PER_ACTIVATION

X_BN_SCALEBIAS_MEANVAR_DESC

在 setter 中,*param 应该是指向先前初始化的 cudnnTensorDescriptor_t 的指针。

一个通用的张量描述符,描述 batchNorm 训练的 scale、bias 和统计信息张量的大小、布局和数据类型。 形状需要与 CUDNN_PARAM_BN_MODE 中指定的模式匹配(类似于 cudnnBatchNormalization* API 中的 bnScaleBiasMeanVarDesc 字段)。

NULL

X_BN_SCALE_PLACEHOLDER

在 setter 中,*param 应该是指向先前初始化的 X_PointerPlaceHolder_t* 的指针。

描述 VariantParamPack 中保存的 batchNorm 训练后的缩放指针是否为 NULL;如果不是,则表示用户承诺的指针对齐方式为 *

CUDNN_PTR_NULL

X_BN_BIAS_PLACEHOLDER

在 setter 中,*param 应该是指向先前初始化的 X_PointerPlaceHolder_t* 的指针。

描述 VariantParamPack 中保存的 batchNorm 训练后的偏差指针是否为 NULL;如果不是,则表示用户承诺的指针对齐方式为 *

CUDNN_PTR_NULL

X_BN_RUNNING_MEAN_PLACEHOLDER

在 setter 中,*param 应该是指向先前初始化的 X_PointerPlaceHolder_t* 的指针。

描述 VariantParamPack 中保存的 batchNorm 运行均值指针是否为 NULL;如果不是,则表示用户承诺的指针对齐方式为 *

CUDNN_PTR_NULL

X_BN_RUNNING_VAR_PLACEHOLDER

在 setter 中,*param 应该是指向先前初始化的 X_PointerPlaceHolder_t* 的指针。

描述 VariantParamPack 中保存的 batchNorm 运行方差指针是否为 NULL;如果不是,则表示用户承诺的指针对齐方式为 *

CUDNN_PTR_NULL

X_BN_EQSCALEBIAS_DESC

在 setter 中,*param 应该是指向先前初始化的 cudnnTensorDescriptor_t 的指针。

描述 batchNorm 等效缩放和偏差张量的大小、布局和数据类型的张量描述符。形状需要与 CUDNN_PARAM_BN_MODE 中指定的模式匹配。

NULL

X_BN_EQSCALE_PLACEHOLDER

在 setter 中,*param 应该是指向先前初始化的 X_PointerPlaceHolder_t* 的指针。

描述 VariantParamPack 中的 batchNorm 保存的 mean 指针是否为 NULL,如果不是,则用户承诺指针对齐 *。 如果设置为 CUDNN_PTR_NULL,则此输出的计算将变为 NOP。

CUDNN_PTR_NULL

X_BN_EQBIAS_PLACEHOLDER

在 setter 中,*param 应该是指向先前初始化的 X_PointerPlaceHolder_t* 的指针。

描述 VariantParamPack 中保存的 batchNorm 等效偏差指针是否为 NULL;如果不是,则表示用户承诺的指针对齐方式为 *。如果设置为 CUDNN_PTR_NULL,则此输出的计算将变为无操作 (NOP)。

CUDNN_PTR_NULL

以下操作执行计算,其中 \(*\) 表示卷积运算符:\(y=\alpha_{1}\left( w*x \right)+\alpha_{2}z+b\)

对于 cudnnFusedOpsConstParamLabel_t 中的属性 CUDNN_FUSED_CONVOLUTION_SCALE_BIAS_ADD_RELU#

属性键

在 Setter 中传递的预期描述符类型

描述

创建后的默认值

X_XDESC

在 setter 中,*param 应该是 xDesc,一个指向先前初始化的 cudnnTensorDescriptor_t 的指针。

描述 x(输入)张量的大小、布局和数据类型的张量描述符。

NULL

X_XDATA_PLACEHOLDER

在 setter 中,*param 应该是指向先前初始化的 X_PointerPlaceHolder_t* 的指针。

描述 VariantParamPack 中的 xData 指针是否为 NULL,如果不是,则用户承诺指针对齐 *

CUDNN_PTR_NULL

X_CONV_DESC

在 setter 中,*param 应该是指向先前初始化的 cudnnConvolutionDescriptor_t* 的指针。

描述卷积操作。

NULL

X_WDESC

在 setter 中,*param 应该是指向先前初始化的 cudnnFilterDescriptor_t* 的指针。

描述 w(滤波器)张量的大小、布局和数据类型的滤波器描述符。

NULL

X_WDATA_PLACEHOLDER

在 setter 中,*param 应该是指向先前初始化的 X_PointerPlaceHolder_t* 的指针。

描述 VariantParamPack 中的 w (filter)张量指针是否为 NULL,如果不是,则用户承诺指针对齐 *

CUDNN_PTR_NULL

X_BN_EQSCALEBIAS_DESC

在 setter 中,*param 应该是指向先前初始化的 cudnnTensorDescriptor_t* 的指针。

描述 \(\alpha_{1}\) 缩放和偏差张量的大小、布局和数据类型的张量描述符。张量应具有形状 (1,K,1,1),其中 K 是输出特征的数量。

NULL

X_BN_EQSCALE_PLACEHOLDER

在 setter 中,*param 应该是指向先前初始化的 X_PointerPlaceHolder_t* 的指针。

描述 VariantParamPack 中保存的 batchNorm 等效缩放或 \(\alpha_{1}\) 张量指针是否为 NULL;如果不是,则表示用户承诺的指针对齐方式为 *。如果设置为 CUDNN_PTR_NULL,则 \(\alpha_{1}\) 缩放将变为无操作 (NOP)。

CUDNN_PTR_NULL

X_ZDESC

在 setter 中,*param 应该是指向先前初始化的 cudnnTensorDescriptor_t 的指针。

描述 z 张量的大小、布局和数据类型的张量描述符。如果未设置,则 z 缩放-加法项将变为无操作 (NOP)。

NULL

CUDNN_PARAM_ZDATA_PLACEHOLDER

在 setter 中,*param 应该是指向先前初始化的 X_PointerPlaceHolder_t* 的指针。

描述 VariantParamPack 中保存的 z 张量指针是否为 NULL;如果不是,则表示用户承诺的指针对齐方式为 *。如果设置为 CUDNN_PTR_NULL,则 z 缩放-加法项将变为无操作 (NOP)。

CUDNN_PTR_NULL

CUDNN_PARAM_BN_Z_EQSCALEBIAS_DESC

在 setter 中,*param 应该是指向先前初始化的 cudnnTensorDescriptor_t* 的指针。

描述 \(\alpha_{2}\) 张量的大小、布局和数据类型的张量描述符。如果设置为 NULL,则输入 z 的缩放将变为无操作 (NOP)。

NULLPTR

CUDNN_PARAM_BN_Z_EQSCALE_PLACEHOLDER

在 setter 中,*param 应该是指向先前初始化的 X_PointerPlaceHolder_t* 的指针。

描述 VariantParamPack 中保存的 batchNorm z 等效缩放指针是否为 NULL;如果不是,则表示用户承诺的指针对齐方式为 *。如果设置为 CUDNN_PTR_NULL,则输入 z 的缩放将变为无操作 (NOP)。

CUDNN_PTR_NULL

X_ACTIVATION_DESC

在 setter 中,*param 应该是指向先前初始化的 cudnnActivationDescriptor_t* 的指针。

描述激活操作。 从 7.6.0 开始,仅支持 CUDNN_ACTIVATION_RELUCUDNN_ACTIVATION_IDENTITY 的激活模式。 如果设置为 NULL 或激活模式设置为 CUDNN_ACTIVATION_IDENTITY,则 op 序列中的激活变为 NOP。

NULL

X_YDESC

在 setter 中,*param 应该是指向先前初始化的 cudnnTensorDescriptor_t* 的指针。

描述 y(输出)张量的大小、布局和数据类型的张量描述符。

NULL

X_YDATA_PLACEHOLDER

在 setter 中,*param 应该是指向先前初始化的 X_PointerPlaceHolder_t* 的指针。

描述 VariantParamPack 中的 y (输出)张量指针是否为 NULL,如果不是,则用户承诺指针对齐 *

CUDNN_PTR_NULL

cudnnFusedOpsPointerPlaceHolder_t#

此枚举类型已弃用,目前仅由已弃用的 API 使用。考虑使用已弃用 API 的替代品,这些 API 使用此枚举类型。

cudnnFusedOpsPointerPlaceHolder_t 是一种枚举类型,用于选择 cudnnFusedOps 描述符指针的对齐类型。

成员和描述

CUDNN_PTR_NULL = 0

指示 variantPack 中张量的指针将为 NULL

CUDNN_PTR_ELEM_ALIGNED = 1

指示 variantPack 中张量的指针将不为 NULL,并将具有元素对齐。

CUDNN_PTR_16B_ALIGNED = 2

指示 variantPack 中张量的指针将不为 NULL,并将具有 16 字节对齐。

cudnnFusedOpsVariantParamLabel_t#

此枚举类型已弃用,目前仅由已弃用的 API 使用。考虑使用已弃用 API 的替代品,这些 API 使用此枚举类型。

cudnnFusedOpsVariantParamLabel_t 是一种枚举类型,用于设置缓冲区指针。这些缓冲区指针可以在每次迭代中更改。

typedef enum {
    CUDNN_PTR_XDATA                              = 0,
    CUDNN_PTR_BN_EQSCALE                         = 1,
    CUDNN_PTR_BN_EQBIAS                          = 2,
    CUDNN_PTR_WDATA                              = 3,
    CUDNN_PTR_DWDATA                             = 4,
    CUDNN_PTR_YDATA                              = 5,
    CUDNN_PTR_DYDATA                             = 6,
    CUDNN_PTR_YSUM                               = 7,
    CUDNN_PTR_YSQSUM                             = 8,
    CUDNN_PTR_WORKSPACE                          = 9,
    CUDNN_PTR_BN_SCALE                           = 10,
    CUDNN_PTR_BN_BIAS                            = 11,
    CUDNN_PTR_BN_SAVED_MEAN                      = 12,
    CUDNN_PTR_BN_SAVED_INVSTD                    = 13,
    CUDNN_PTR_BN_RUNNING_MEAN                    = 14,
    CUDNN_PTR_BN_RUNNING_VAR                     = 15,
    CUDNN_PTR_ZDATA                              = 16,
    CUDNN_PTR_BN_Z_EQSCALE                       = 17,
    CUDNN_PTR_BN_Z_EQBIAS                        = 18,
    CUDNN_PTR_ACTIVATION_BITMASK                 = 19,
    CUDNN_PTR_DXDATA                             = 20,
    CUDNN_PTR_DZDATA                             = 21,
    CUDNN_PTR_BN_DSCALE                          = 22,
    CUDNN_PTR_BN_DBIAS                           = 23,
    CUDNN_SCALAR_SIZE_T_WORKSPACE_SIZE_IN_BYTES  = 100,
    CUDNN_SCALAR_INT64_T_BN_ACCUMULATION_COUNT   = 101,
    CUDNN_SCALAR_DOUBLE_BN_EXP_AVG_FACTOR        = 102,
    CUDNN_SCALAR_DOUBLE_BN_EPSILON               = 103,
    } cudnnFusedOpsVariantParamLabel_t;
cudnnFusedOpsVariantParamLabel_t 中表格的图例#

使用的缩写形式

代表

Setter

cudnnSetFusedOpsVariantParamPackAttribute()

Getter

cudnnGetFusedOpsVariantParamPackAttribute()

属性键列中的 X_ 前缀

代表枚举器名称中的 CUDNN_PTR_CUDNN_SCALAR_

对于 cudnnFusedOpsConstParamLabel_t 中的属性 CUDNN_FUSED_SCALE_BIAS_ACTIVATION_CONV_BNSTATS#

属性键

在 Setter 中传递的预期描述符类型

I/O 类型

描述

默认值

X_XDATA

void *

输入

指向设备上 x(输入)张量的指针,需要与先前设置的 CUDNN_PARAM_XDATA_PLACEHOLDER 属性 * 一致。

NULL

X_BN_EQSCALE

void *

输入

指向设备上 batchNorm 等效缩放张量的指针,需要与先前设置的 CUDNN_PARAM_BN_EQSCALE_PLACEHOLDER 属性 * 一致。

NULL

X_BN_EQBIAS

void *

输入

指向设备上 batchNorm 等效偏差张量的指针,需要与先前设置的 CUDNN_PARAM_BN_EQBIAS_PLACEHOLDER 属性 * 一致。

NULL

X_WDATA

void *

输入

指向设备上 w(滤波器)张量的指针,需要与先前设置的 CUDNN_PARAM_WDATA_PLACEHOLDER 属性 * 一致。

NULL

X_YDATA

void *

输入

指向设备上 y(输出)张量的指针,需要与先前设置的 CUDNN_PARAM_YDATA_PLACEHOLDER 属性 * 一致。

NULL

X_YSUM

void *

输入

指向设备上 y 张量之和的指针,需要与先前设置的 CUDNN_PARAM_YSUM_PLACEHOLDER 属性 * 一致。

NULL

X_YSQSUM

void *

输入

指向设备上 y 平方张量之和的指针,需要与先前设置的 CUDNN_PARAM_YSQSUM_PLACEHOLDER 属性 * 一致。

NULL

X_WORKSPACE

void *

输入

指向设备上用户分配的工作空间的指针。如果请求的工作空间大小为 0,则可以为 NULL

NULL

X_SIZE_T_WORKSPACE_SIZE_IN_BYTES

size_t *

输入

指向主机内存中 size_t 值的指针,该值描述用户分配的工作空间大小(以字节为单位)。该大小需要等于或大于 cudnnMakeFusedOpsPlan() 中请求的大小。

0

注意

  • 如果 ConstParamPack 中的相应指针占位符设置为 CUDNN_PTR_NULL,则 VariantParamPack 中的设备指针也需要为 NULL

  • 如果 ConstParamPack 中的相应指针占位符设置为 CUDNN_PTR_ELEM_ALIGNEDCUDNN_PTR_16B_ALIGNED,则 VariantParamPack 中的设备指针可能不为 NULL,并且需要分别至少元素对齐或 16 字节对齐。

对于 cudnnFusedOpsVariantParamLabel_t 中的属性 CUDNN_FUSED_SCALE_BIAS_ACTIVATION_WGRAD#

属性键

在 Setter 中传递的预期描述符类型

I/O 类型

描述

默认值

X_XDATA

void *

输入

指向设备上 x(输入)张量的指针,需要与先前设置的 CUDNN_PARAM_XDATA_PLACEHOLDER 属性 * 一致。

NULL

X_BN_EQSCALE

void *

输入

指向设备上 batchNorm 等效缩放张量的指针,需要与先前设置的 CUDNN_PARAM_BN_EQSCALE_PLACEHOLDER 属性 * 一致。

NULL

X_BN_EQBIAS

void *

输入

指向设备上 batchNorm 等效偏差张量的指针,需要与先前设置的 CUDNN_PARAM_BN_EQBIAS_PLACEHOLDER 属性 * 一致。

NULL

X_DWDATA

void *

输出

指向设备上 dw(滤波器梯度输出)张量的指针,需要与先前设置的 CUDNN_PARAM_WDATA_PLACEHOLDER 属性 * 一致。

NULL

X_DYDATA

void *

输入

指向设备上 dy(梯度输入)张量的指针,需要与先前设置的 CUDNN_PARAM_YDATA_PLACEHOLDER 属性 * 一致。

NULL

X_WORKSPACE

void *

输入

指向设备上用户分配的工作空间的指针。如果请求的工作空间大小为 0,则可以为 NULL

NULL

X_SIZE_T_WORKSPACE_SIZE_IN_BYTES

size_t *

输入

指向主机内存中 size_t 值的指针,该值描述用户分配的工作空间大小(以字节为单位)。该大小需要等于或大于 cudnnMakeFusedOpsPlan() 中请求的大小。

0

注意

  • 如果 ConstParamPack 中的相应指针占位符设置为 CUDNN_PTR_NULL,则 VariantParamPack 中的设备指针也需要为 NULL

  • 如果 ConstParamPack 中的相应指针占位符设置为 CUDNN_PTR_ELEM_ALIGNEDCUDNN_PTR_16B_ALIGNED,则 VariantParamPack 中的设备指针可能不为 NULL,并且需要分别至少元素对齐或 16 字节对齐。

对于 cudnnFusedOpsVariantParamLabel_t 中的属性 CUDNN_FUSED_BN_FINALIZE_STATISTICS_TRAINING#

属性键

在 Setter 中传递的预期描述符类型

I/O 类型

描述

默认值

X_YSUM

void *

输入

指向设备上 y 张量之和的指针,需要与先前设置的 CUDNN_PARAM_YSUM_PLACEHOLDER 属性 * 一致。

NULL

X_YSQSUM

void *

输入

指向设备上 y 平方张量之和的指针,需要与先前设置的 CUDNN_PARAM_YSQSUM_PLACEHOLDER 属性 * 一致。

NULL

X_BN_SCALE

void *

输入

指向设备上 y 平方张量之和的指针,需要与先前设置的 CUDNN_PARAM_BN_SCALE_PLACEHOLDER 属性 * 一致。

NULL

X_BN_BIAS

void *

输入

指向设备上 y 平方张量之和的指针,需要与先前设置的 CUDNN_PARAM_BN_BIAS_PLACEHOLDER 属性 * 一致。

NULL

X_BN_SAVED_MEAN

void *

输出

指向设备上 y 平方张量之和的指针,需要与先前设置的 CUDNN_PARAM_BN_SAVED_MEAN_PLACEHOLDER 属性 * 一致。

NULL

X_BN_SAVED_INVSTD

void *

输出

指向设备上 y 平方张量之和的指针,需要与先前设置的 CUDNN_PARAM_BN_SAVED_INVSTD_PLACEHOLDER 属性 * 一致。

NULL

X_BN_RUNNING_MEAN

void *

输入/输出

指向设备上 y 平方张量之和的指针,需要与先前设置的 CUDNN_PARAM_BN_RUNNING_MEAN_PLACEHOLDER 属性 * 一致。

NULL

X_BN_RUNNING_VAR

void *

输入/输出

指向设备上 y 平方张量之和的指针,需要与先前设置的 CUDNN_PARAM_BN_RUNNING_VAR_PLACEHOLDER 属性 * 一致。

NULL

X_BN_EQSCALE

void *

输出

指向设备上 batchNorm 等效缩放张量的指针,需要与先前设置的 CUDNN_PARAM_BN_EQSCALE_PLACEHOLDER 属性 * 一致。

NULL

X_BN_EQBIAS

void *

输出

指向设备上 batchNorm 等效偏差张量的指针,需要与先前设置的 CUDNN_PARAM_BN_EQBIAS_PLACEHOLDER 属性 * 一致。

NULL

X_INT64_T_BN_ACCUMULATION_COUNT

int64_t *

输入

指向主机内存中 int64_t 标量值的指针。此值应描述在 y 之和与 y 平方张量之和中累积的张量元素数量。例如,在单 GPU 用例中,如果模式为 CUDNN_BATCHNORM_SPATIALCUDNN_BATCHNORM_SPATIAL_PERSISTENT,则该值应等于从中计算统计信息的张量的 N*H*W。在多 GPU 用例中,如果已对 y 之和与 y 平方张量之和执行了 all-reduce,则此值应为每个 GPU 上单 GPU 累积计数的总和。

0

X_DOUBLE_BN_EXP_AVG_FACTOR

double *

输入

指向主机内存中 double 标量值的指针。用于移动平均计算的因子。请参阅 cudnnBatchNormalization* API 中的 exponentialAverageFactor

0.0

X_DOUBLE_BN_EPSILON

double *

输入

指向主机内存中 double 标量值的指针。批归一化公式中使用的调节常数。其值应等于或大于 cudnn.h 中为 CUDNN_BN_MIN_EPSILON 定义的值。请参阅 cudnnBatchNormalization* API 中的 exponentialAverageFactor

0.0

X_WORKSPACE

void *

输入

指向设备上用户分配的工作空间的指针。如果请求的工作空间大小为 0,则可以为 NULL

NULL

X_SIZE_T_WORKSPACE_SIZE_IN_BYTES

size_t *

输入

指向主机内存中 size_t 值的指针,该值描述用户分配的工作空间大小(以字节为单位)。该大小需要等于或大于 cudnnMakeFusedOpsPlan() 中请求的大小。

0

注意

  • 如果 ConstParamPack 中的相应指针占位符设置为 CUDNN_PTR_NULL,则 VariantParamPack 中的设备指针也需要为 NULL

  • 如果 ConstParamPack 中的相应指针占位符设置为 CUDNN_PTR_ELEM_ALIGNEDCUDNN_PTR_16B_ALIGNED,则 VariantParamPack 中的设备指针可能不为 NULL,并且需要分别至少元素对齐或 16 字节对齐。

对于 cudnnFusedOpsVariantParamLabel_t 中的属性 CUDNN_FUSED_BN_FINALIZE_STATISTICS_INFERENCE#

属性键

在 Setter 中传递的预期描述符类型

I/O 类型

描述

默认值

X_BN_SCALE

void *

输入

指向设备上 y 平方张量之和的指针,需要与先前设置的 CUDNN_PARAM_BN_SCALE_PLACEHOLDER 属性 * 一致。

NULL

X_BN_BIAS

void *

输入

指向设备上 y 平方张量之和的指针,需要与先前设置的 CUDNN_PARAM_BN_BIAS_PLACEHOLDER 属性 * 一致。

NULL

X_BN_RUNNING_MEAN

void *

输入/输出

指向设备上 y 平方张量之和的指针,需要与先前设置的 CUDNN_PARAM_BN_RUNNING_MEAN_PLACEHOLDER 属性 * 一致。

NULL

X_BN_RUNNING_VAR

void *

输入/输出

指向设备上 y 平方张量之和的指针,需要与先前设置的 CUDNN_PARAM_BN_RUNNING_VAR_PLACEHOLDER 属性 * 一致。

NULL

X_BN_EQSCALE

void *

输出

指向设备上 batchNorm 等效缩放张量的指针,需要与先前设置的 CUDNN_PARAM_BN_EQSCALE_PLACEHOLDER 属性 * 一致。

NULL

X_BN_EQBIAS

void *

输出

指向设备上 batchNorm 等效偏差张量的指针,需要与先前设置的 CUDNN_PARAM_BN_EQBIAS_PLACEHOLDER 属性 * 一致。

NULL

X_DOUBLE_BN_EPSILON

double *

输入

指向主机内存中 double 标量值的指针。批归一化公式中使用的调节常数。其值应等于或大于 cudnn.h 中为 CUDNN_BN_MIN_EPSILON 定义的值。请参阅 cudnnBatchNormalization* API 中的 exponentialAverageFactor

0.0

X_WORKSPACE

void *

输入

指向设备上用户分配的工作空间的指针。如果请求的工作空间大小为 0,则可以为 NULL

NULL

X_SIZE_T_WORKSPACE_SIZE_IN_BYTES

size_t *

输入

指向主机内存中 size_t 值的指针,该值描述用户分配的工作空间大小(以字节为单位)。该大小需要等于或大于 cudnnMakeFusedOpsPlan() 中请求的大小。

0

注意

  • 如果 ConstParamPack 中的相应指针占位符设置为 CUDNN_PTR_NULL,则 VariantParamPack 中的设备指针也需要为 NULL

  • 如果 ConstParamPack 中的相应指针占位符设置为 CUDNN_PTR_ELEM_ALIGNEDCUDNN_PTR_16B_ALIGNED,则 VariantParamPack 中的设备指针可能不为 NULL,并且需要分别至少元素对齐或 16 字节对齐。

对于 cudnnFusedOpsVariantParamLabel_t 中的属性 CUDNN_FUSED_BN_FINALIZE_STATISTICS_INFERENCE#

属性键

在 Setter 中传递的预期描述符类型

I/O 类型

描述

默认值

X_XDATA

void *

输入

指向设备上 x(图像)张量的指针,需要与先前设置的 CUDNN_PARAM_XDATA_PLACEHOLDER 属性 * 一致。

NULL

X_WDATA

void *

输入

指向设备上 w(滤波器)张量的指针,需要与先前设置的 CUDNN_PARAM_WDATA_PLACEHOLDER 属性 * 一致。

NULL

X_BN_EQSCALE

void *

输入

指向设备上 alpha1batchNorm 等效缩放张量的指针,需要与先前设置的 CUDNN_PARAM_BN_EQSCALE_PLACEHOLDER 属性 * 一致。

NULL

X_ZDATA

void *

输入

指向设备上 z 张量的指针,需要与先前设置的 CUDNN_PARAM_YDATA_PLACEHOLDER 属性 * 一致。

NULL

X_BN_Z_EQBIAS

void *

输入

指向设备上 batchNorm 等效偏差张量的指针,需要与先前设置的 CUDNN_PARAM_BN_Z_EQBIAS_PLACEHOLDER 属性 * 一致。

NULL

X_YDATA

void *

输出

指向设备上 y(输出)张量的指针,需要与先前设置的 CUDNN_PARAM_YDATA_PLACEHOLDER 属性 * 一致。

NULL

X_WORKSPACE

void *

输入

指向设备上用户分配的工作空间的指针。如果请求的工作空间大小为 0,则可以为 NULL

NULL

X_SIZE_T_WORKSPACE_SIZE_IN_BYTES

size_t *

输入

指向主机内存中 size_t 值的指针,该值描述用户分配的工作空间大小(以字节为单位)。该大小需要等于或大于 cudnnMakeFusedOpsPlan() 中请求的大小。

0

注意

  • 如果 ConstParamPack 中的相应指针占位符设置为 CUDNN_PTR_NULL,则 VariantParamPack 中的设备指针也需要为 NULL

  • 如果 ConstParamPack 中的相应指针占位符设置为 CUDNN_PTR_ELEM_ALIGNEDCUDNN_PTR_16B_ALIGNED,则 VariantParamPack 中的设备指针可能不为 NULL,并且需要分别至少元素对齐或 16 字节对齐。

API 函数#

以下是 cudnn_cnn 库中的 API 函数。

cudnnCnnVersionCheck()#

跨库版本检查器。每个子库都有一个版本检查器,用于检查其自身的版本是否与其依赖项的版本匹配。

返回

CUDNN_STATUS_SUCCESS

版本检查通过。

CUDNN_STATUS_SUBLIBRARY_VERSION_MISMATCH

版本不一致。

cudnnConvolutionBackwardBias()#

此函数在 cuDNN 9.0 中已弃用。

此函数计算关于偏差的卷积函数梯度,偏差是属于输入张量所有图像的同一特征图的每个元素的总和。因此,生成的元素数量等于输入张量的特征图数量。

cudnnStatus_t cudnnConvolutionBackwardBias(
    cudnnHandle_t                    handle,
    const void                      *alpha,
    const cudnnTensorDescriptor_t    dyDesc,
    const void                      *dy,
    const void                      *beta,
    const cudnnTensorDescriptor_t    dbDesc,
    void                            *db)

参数

handle

输入。指向先前创建的 cuDNN 上下文的句柄。有关更多信息,请参阅 cudnnHandle_t

alpha, beta

输入。指向缩放因子(在主机内存中)的指针,用于将计算结果与输出层中的先前值混合,如下所示

dstValue = alpha[0]*result + beta[0]*priorDstValue

有关更多信息,请参阅 缩放参数

dyDesc

输入。指向先前初始化的输入张量描述符的句柄。有关更多信息,请参阅 cudnnTensorDescriptor_t

dy

输入。指向与张量描述符 dyDesc 关联的 GPU 内存的数据指针。

dbDesc

输入。指向先前初始化的输出张量描述符的句柄。

db

输出。指向与输出张量描述符 dbDesc 关联的 GPU 内存的数据指针。

返回

CUDNN_STATUS_SUCCESS

操作已成功启动。

CUDNN_STATUS_NOT_SUPPORTED

该函数不支持提供的配置。

CUDNN_STATUS_BAD_PARAM

满足以下至少一个条件

  • 输出张量的参数 nheightwidth 之一不是 1

  • 输入张量和输出张量的特征图数量不同。

  • 两个张量描述符的 dataType 不同。

cudnnConvolutionBackwardData()#

此函数在 cuDNN 9.0 中已弃用。

此函数计算张量 dy 的卷积数据梯度,其中 ycudnnConvolutionForward() 中前向卷积的输出。它使用指定的 algo,并将结果返回到输出张量 dx 中。缩放因子 alphabeta 可用于缩放计算结果或与当前的 dx 累积。

cudnnStatus_t cudnnConvolutionBackwardData(
    cudnnHandle_t                       handle,
    const void                         *alpha,
    const cudnnFilterDescriptor_t       wDesc,
    const void                         *w,
    const cudnnTensorDescriptor_t       dyDesc,
    const void                         *dy,
    const cudnnConvolutionDescriptor_t  convDesc,
    cudnnConvolutionBwdDataAlgo_t       algo,
    void                               *workSpace,
    size_t                              workSpaceSizeInBytes,
    const void                         *beta,
    const cudnnTensorDescriptor_t       dxDesc,
    void                               *dx)

参数

handle

输入。指向先前创建的 cuDNN 上下文的句柄。有关更多信息,请参阅 cudnnHandle_t

alpha, beta

输入。指向缩放因子(在主机内存中)的指针,用于将计算结果与输出层中的先前值混合,如下所示

dstValue = alpha[0]*result + beta[0]*priorDstValue

有关更多信息,请参阅 缩放参数

wDesc

输入。指向先前初始化的滤波器描述符的句柄。有关更多信息,请参阅 cudnnFilterDescriptor_t

w

输入。指向与滤波器描述符 wDesc 关联的 GPU 内存的数据指针。

dyDesc

输入。指向先前初始化的输入微分张量描述符的句柄。有关更多信息,请参阅 cudnnTensorDescriptor_t

dy

输入。指向与输入微分张量描述符 dyDesc 关联的 GPU 内存的数据指针。

convDesc

输入。先前初始化的卷积描述符。有关更多信息,请参阅 cudnnConvolutionDescriptor_t

algo

输入。枚举器,用于指定应使用哪种后向数据卷积算法来计算结果。有关更多信息,请参阅 cudnnConvolutionBwdDataAlgo_t

workSpace

输入。指向 GPU 内存的数据指针,该内存指向执行指定算法所需的工作空间。如果特定算法不需要工作空间,则该指针可以为 NIL

workSpaceSizeInBytes

输入。指定提供的 workSpace 的大小(以字节为单位)。

dxDesc

输入。指向先前初始化的输出张量描述符的句柄。

dx

输入/输出。指向与输出张量描述符 dxDesc 关联的 GPU 内存的数据指针,该描述符携带结果。

支持的配置

此函数支持 wDescdyDescconvDescdxDesc 的以下数据类型组合。

cudnnConvolutionBackwardData() 的支持配置#

数据类型配置

wDescdyDescdxDesc 数据类型

convDesc 数据类型

TRUE_HALF_CONFIG(仅在具有真正 FP16 支持的架构上受支持,即计算能力 5.3 及更高版本)

CUDNN_DATA_HALF

CUDNN_DATA_HALF

PSEUDO_HALF_CONFIG

CUDNN_DATA_HALF

CUDNN_DATA_FLOAT

PSEUDO_BFLOAT16_CONFIG

CUDNN_DATA_BFLOAT16

CUDNN_DATA_FLOAT

FLOAT_CONFIG

CUDNN_DATA_FLOAT

CUDNN_DATA_FLOAT

DOUBLE_CONFIG

CUDNN_DATA_DOUBLE

CUDNN_DATA_DOUBLE

支持的算法

指定单独的算法可能会导致性能、支持和计算确定性方面的变化。请参阅以下算法选项列表及其各自支持的参数和确定性行为。

下表显示了支持的 2D 和 3D 卷积列表。首先描述 2D 卷积,然后是 3D 卷积。

为简洁起见,下表中使用后跟 > 的简写版本

  • CUDNN_CONVOLUTION_BWD_DATA_ALGO_0 > _ALGO_0

  • CUDNN_CONVOLUTION_BWD_DATA_ALGO_1 > _ALGO_1

  • CUDNN_CONVOLUTION_BWD_DATA_ALGO_FFT > _FFT

  • CUDNN_CONVOLUTION_BWD_DATA_ALGO_FFT_TILING > _FFT_TILING

  • CUDNN_CONVOLUTION_BWD_DATA_ALGO_WINOGRAD > _WINOGRAD

  • CUDNN_CONVOLUTION_BWD_DATA_ALGO_WINOGRAD_NONFUSED > _WINOGRAD_NONFUSED

  • CUDNN_TENSOR_NCHW > _NCHW

  • CUDNN_TENSOR_NHWC > _NHWC

  • CUDNN_TENSOR_NCHW_VECT_C > _NCHW_VECT_C

cudnnConvolutionBackwardData() 2D 卷积的支持算法。滤波器描述符 wDesc: _NHWC(请参阅 cudnnTensorFormat_t)。#

算法名称

确定性

dyDesc 支持的张量格式

dxDesc 支持的张量格式

支持的数据类型配置

重要提示

_ALGO_0 _ALGO_1

NHWC HWC 打包

NHWC HWC 打包

TRUE_HALF_CONFIG PSEUDO_HALF_CONFIG PSEUDO_BFLOAT16_CONFIG FLOAT_CONFIG

cudnnConvolutionBackwardData() 2D 卷积的支持算法。滤波器描述符 wDesc: _NCHW#

算法名称

确定性

dyDesc 支持的张量格式

dxDesc 支持的张量格式

支持的数据类型配置

重要提示

_ALGO_0

NCHW CHW 打包

_NCHW_VECT_C 外的所有格式

TRUE_HALF_CONFIG PSEUDO_HALF_CONFIG PSEUDO_BFLOAT16_CONFIG DOUBLE_CONFIG

膨胀:所有维度 convDesc 的膨胀均大于 0 组计数支持:大于 0

_ALGO_1

NCHW CHW 打包

_NCHW_VECT_C 外的所有格式

TRUE_HALF_CONFIG PSEUDO_HALF_CONFIG PSEUDO_BFLOAT16_CONFIG FLOAT_CONFIG DOUBLE_CONFIG

膨胀:所有维度 convDesc 的膨胀均大于 0 组计数支持:大于 0

_FFT

NCHW CHW 打包

NCHW HW 打包

PSEUDO_HALF_CONFIG FLOAT_CONFIG

膨胀:所有维度 convDesc 的膨胀均为 1 组计数支持:大于 0 dxDesc 特征图高度 + 2 * convDesc 零填充高度必须等于 256 或更小 dxDesc 特征图宽度 + 2 * convDesc 零填充宽度必须等于 256 或更小 convDesc 垂直和水平滤波器步幅必须等于 1 wDesc 滤波器高度必须大于 convDesc 零填充高度 wDesc 滤波器宽度必须大于 convDesc 零填充宽度

_FFT_TILING

NCHW CHW 打包

NCHW HW 打包

当任务可以通过 1D FFT 处理时,也支持 PSEUDO_HALF_CONFIG FLOAT_CONFIG DOUBLE_CONFIG,这意味着滤波器维度(宽度或高度)之一为 1

空洞率:所有维度均为 1 convDesc 组计数支持:大于 0wDesc 滤波器维度都不是 1 时,滤波器宽度和高度不得大于 32wDesc 滤波器维度之一是 1 时,最大滤波器维度不应超过 256 convDesc 垂直和水平滤波器步幅必须等于 1,当滤波器宽度或滤波器高度为 1 时;否则,步幅可以是 12 wDesc 滤波器高度必须大于 convDesc 零填充高度 wDesc 滤波器宽度必须大于 convDesc 零填充宽度

_WINOGRAD

NCHW CHW 打包

_NCHW_VECT_C 外的所有格式

PSEUDO_HALF_CONFIG FLOAT_CONFIG

空洞率:所有维度均为 1 convDesc 组计数支持:大于 0 convDesc 垂直和水平滤波器步幅必须等于 1 wDesc 滤波器高度必须为 3 wDesc 滤波器宽度必须为 3

_WINOGRAD_NONFUSED

NCHW CHW 打包

_NCHW_VECT_C 外的所有格式

TRUE_HALF_CONFIG PSEUDO_HALF_CONFIG PSEUDO_BFLOAT16_CONFIG FLOAT_CONFIG

空洞率:所有维度均为 1 convDesc 组计数支持:大于 0 convDesc 垂直和水平滤波器步幅必须等于 1 wDesc 滤波器(高度,宽度)必须为 (3,3)(5,5) 如果 wDesc 滤波器(高度,宽度)为 (5,5),则不支持数据类型配置 TRUE_HALF_CONFIG

cudnnConvolutionBackwardData() 3D 卷积支持的算法。滤波器描述符 wDesc: _NCHW#

算法名称 (3D 卷积)

确定性

dyDesc 支持的张量格式

dxDesc 支持的张量格式

支持的数据类型配置

重要提示

_ALGO_0

NCDHW CDHW-packed

_NCDHW_VECT_C 以外的所有算法

PSEUDO_HALF_CONFIG PSEUDO_BFLOAT16_CONFIG FLOAT_CONFIG DOUBLE_CONFIG

膨胀:所有维度 convDesc 的膨胀均大于 0 组计数支持:大于 0

_ALGO_1

NCDHW CDHW-packed

NCDHW CDHW-packed

TRUE_HALF_CONFIG PSEUDO_BFLOAT16_CONFIG PSEUDO_HALF_CONFIG FLOAT_CONFIG DOUBLE_CONFIG

空洞率:所有维度均为 1 convDesc 组计数支持:大于 0

_FFT_TILING

NCDHW CDHW-packed

NCDHW DHW-packed

PSEUDO_HALF_CONFIG FLOAT_CONFIG DOUBLE_CONFIG

空洞率:所有维度均为 1 convDesc 组计数支持:大于 0 wDesc 滤波器高度必须等于或小于 16 wDesc 滤波器宽度必须等于或小于 16 wDesc 滤波器深度必须等于或小于 16 convDesc 必须具有所有等于 1 的滤波器步幅 wDesc 滤波器高度必须大于 convDesc 零填充高度 wDesc 滤波器宽度必须大于 convDesc 零填充宽度 wDesc 滤波器深度必须大于 convDesc 零填充宽度

cudnnConvolutionBackwardData() 3D 卷积支持的算法。滤波器描述符 wDesc: _NHWC#

算法名称 (3D 卷积)

确定性

dyDesc 支持的张量格式

dxDesc 支持的张量格式

支持的数据类型配置

重要提示

_ALGO_1

NDHWC DHWC-packed

NDHWC DHWC-packed

TRUE_HALF_CONFIG PSEUDO_HALF_CONFIG PESUDO_BFLOAT16_CONFIG FLOAT_CONFIG

膨胀:所有维度 convDesc 的膨胀均大于 0 组计数支持:大于 0

返回

CUDNN_STATUS_SUCCESS

操作已成功启动。

CUDNN_STATUS_BAD_PARAM

满足以下至少一个条件

  • 以下至少有一个为 NULL: handle, dyDesc, wDesc, convDesc, dxDesc, dy, w, dx, alpha, 和 beta

  • wDescdyDesc 的维度数量不匹配

  • wDescdxDesc 的维度数量不匹配

  • wDesc 的维度数量少于三个

  • wDesc, dxDescdyDesc 的数据类型不匹配

  • wDescdxDesc 的每个图像(或分组卷积情况下的组)的输入特征图数量不匹配

  • dyDesc 空间大小与 cudnnGetConvolutionNdForwardOutputDim() 确定的预期大小不匹配

CUDNN_STATUS_NOT_SUPPORTED

满足以下至少一个条件

  • dyDescdxDesc 具有负张量步幅

  • dyDesc, wDescdxDesc 的维度数量不是 45

  • 所选算法不支持提供的参数;请参阅上表,其中详尽列出了支持每种算法的参数。

  • dyDescwDesc 指示的输出通道计数不是组计数的倍数(如果在 convDesc 中设置了组计数)

CUDNN_STATUS_MAPPING_ERROR

在与滤波器数据或输入微分张量数据关联的纹理对象创建的纹理绑定期间发生错误。

CUDNN_STATUS_EXECUTION_FAILED

该函数无法在 GPU 上启动。

cudnnConvolutionBackwardFilter()#

此函数在 cuDNN 9.0 中已弃用。

此函数计算张量 dy 的卷积权重(滤波器)梯度,其中 ycudnnConvolutionForward() 中正向卷积的输出。它使用指定的 algo,并在输出张量 dw 中返回结果。比例因子 alphabeta 可用于缩放计算结果或与当前的 dw 累积。

cudnnStatus_t cudnnConvolutionBackwardFilter(
    cudnnHandle_t                       handle,
    const void                         *alpha,
    const cudnnTensorDescriptor_t       xDesc,
    const void                         *x,
    const cudnnTensorDescriptor_t       dyDesc,
    const void                         *dy,
    const cudnnConvolutionDescriptor_t  convDesc,
    cudnnConvolutionBwdFilterAlgo_t     algo,
    void                               *workSpace,
    size_t                              workSpaceSizeInBytes,
    const void                         *beta,
    const cudnnFilterDescriptor_t       dwDesc,
    void                               *dw)

参数

handle

输入。指向先前创建的 cuDNN 上下文的句柄。有关更多信息,请参阅 cudnnHandle_t

alpha, beta

输入。指向缩放因子(在主机内存中)的指针,用于将计算结果与输出层中的先前值混合,如下所示

dstValue = alpha[0]*result + beta[0]*priorDstValue

有关更多信息,请参阅 缩放参数

xDesc

输入。先前初始化的张量描述符的句柄。有关更多信息,请参阅 cudnnTensorDescriptor_t

x

输入。与张量描述符 xDesc 关联的 GPU 内存的数据指针。

dyDesc

输入。先前初始化的输入微分张量描述符的句柄。

dy

输入。与反向传播梯度张量描述符 dyDesc 关联的 GPU 内存的数据指针。

convDesc

输入。先前初始化的卷积描述符。有关更多信息,请参阅 cudnnConvolutionDescriptor_t

algo

输入。枚举器,指定应使用哪种卷积算法来计算结果。有关更多信息,请参阅 cudnnConvolutionBwdFilterAlgo_t

workSpace

输入。指向 GPU 内存的数据指针,该内存指向执行指定算法所需的工作空间。如果特定算法不需要工作空间,则该指针可以为 NIL

workSpaceSizeInBytes

输入。指定提供的 workSpace 的大小(以字节为单位)。

dwDesc

输入。先前初始化的滤波器梯度描述符的句柄。有关更多信息,请参阅 cudnnFilterDescriptor_t

dw

输入/输出。与滤波器梯度描述符 dwDesc 关联的 GPU 内存的数据指针,该描述符携带结果。

支持的配置

此函数支持 xDescdyDescconvDescdwDesc 的以下数据类型组合。

cudnnConvolutionBackwardFilter() 支持的配置#

数据类型配置

xDescdyDescdwDesc 数据类型

convDesc 数据类型

TRUE_HALF_CONFIG(仅在具有真正 FP16 支持的架构上受支持,即计算能力 5.3 及更高版本)

CUDNN_DATA_HALF

CUDNN_DATA_HALF

PSEUDO_HALF_CONFIG

CUDNN_DATA_HALF

CUDNN_DATA_FLOAT

PSEUDO_BFLOAT16_CONFIG

CUDNN_DATA_BFLOAT16

CUDNN_DATA_FLOAT

FLOAT_CONFIG

CUDNN_DATA_FLOAT

CUDNN_DATA_FLOAT

DOUBLE_CONFIG

CUDNN_DATA_DOUBLE

CUDNN_DATA_DOUBLE

支持的算法

指定单独的算法可能会导致性能、支持和计算确定性发生变化。请参阅下表,其中详尽列出了算法选项及其各自支持的参数和确定性行为。

下表显示了支持的 2D 和 3D 卷积列表。首先描述 2D 卷积,然后是 3D 卷积。

对于以下术语,下表中使用括号中所示的简短版本,以保持简洁

为简洁起见,下表中使用后跟 > 的简写版本

  • CUDNN_CONVOLUTION_BWD_FILTER_ALGO_0 > _ALGO_0

  • CUDNN_CONVOLUTION_BWD_FILTER_ALGO_1 > _ALGO_1

  • CUDNN_CONVOLUTION_BWD_FILTER_ALGO_3 > _ALGO_3

  • CUDNN_CONVOLUTION_BWD_FILTER_ALGO_FFT > _FFT

  • CUDNN_CONVOLUTION_BWD_FILTER_ALGO_FFT_TILING > _FFT_TILING

  • CUDNN_CONVOLUTION_BWD_FILTER_ALGO_WINOGRAD_NONFUSED > _WINOGRAD_NONFUSED

  • CUDNN_TENSOR_NCHW > _NCHW

  • CUDNN_TENSOR_NHWC > _NHWC

  • CUDNN_TENSOR_NCHW_VECT_C > _NCHW_VECT_C

cudnnConvolutionBackwardFilter() 2D 卷积支持的算法。滤波器描述符 dwDesc: _NHWC(请参阅 cudnnTensorFormat_t)。#

算法名称

确定性

xDesc 支持的张量格式

dyDesc 支持的张量格式

支持的数据类型配置

重要提示

_ALGO_0_ALGO_1

_NCHW_VECT_C 外的所有格式

NHWC HWC 打包

PSEUDO_HALF_CONFIG PSEUDO_BFLOAT16_CONFIG FLOAT_CONFIG

cudnnConvolutionBackwardFilter() 2D 卷积支持的算法。滤波器描述符 dwDesc: _NCHW#

算法名称

确定性

xDesc 支持的张量格式

dyDesc 支持的张量格式

支持的数据类型配置

重要提示

_ALGO_0

_NCHW_VECT_C 外的所有格式

NCHW CHW 打包

PSEUDO_HALF_CONFIG PSEUDO_BFLOAT16_CONFIG FLOAT_CONFIG DOUBLE_CONFIG

膨胀:所有维度 convDesc 的膨胀均大于 0 组计数支持:大于 0

_ALGO_1

_NCHW_VECT_C 外的所有格式

NCHW CHW 打包

PSEUDO_HALF_CONFIG TRUE_HALF_CONFIG PSEUDO_BFLOAT16_CONFIG FLOAT_CONFIG DOUBLE_CONFIG

膨胀:所有维度 convDesc 的膨胀均大于 0 组计数支持:大于 0

_FFT

NCHW CHW 打包

NCHW CHW 打包

PSEUDO_HALF_CONFIG FLOAT_CONFIG

空洞率:所有维度均为 1 convDesc 组计数支持:大于 0 xDesc 特征图高度 + 2 * convDesc 零填充高度必须等于或小于 256 xDesc 特征图宽度 + 2 * convDesc 零填充宽度必须等于或小于 256 convDesc 垂直和水平滤波器步幅必须等于 1 convDesc 必须具有所有等于 1 的滤波器步幅 dwDesc 滤波器高度必须大于 convDesc 零填充高度 dwDesc 滤波器宽度必须大于 convDesc 零填充宽度

_ALGO_3

_NCHW_VECT_C 外的所有格式

NCHW CHW 打包

PSEUDO_HALF_CONFIG PSEUDO_BFLOAT16_CONFIG FLOAT_CONFIG DOUBLE_CONFIG

空洞率:所有维度均为 1 convDesc 组计数支持:大于 0

_WINOGRAD_NONFUSED

_NCHW_VECT_C 外的所有格式

NCHW CHW 打包

TRUE_HALF_CONFIG PSEUDO_HALF_CONFIG PSEUDO_BFLOAT16_CONFIG FLOAT_CONFIG

空洞率:所有维度均为 1 convDesc 组计数支持:大于 0 convDesc 垂直和水平滤波器步幅必须等于 1 dwDesc 滤波器(高度,宽度)必须为 (3,3) 或 (5,5) 如果 dwDesc 滤波器(高度,宽度)为 (5,5),则不支持数据类型配置 TRUE_HALF_CONFIG

_FFT_TILING

NCHW CHW 打包

NCHW CHW 打包

PSEUDO_HALF_CONFIG FLOAT_CONFIG DOUBLE_CONFIG

空洞率:所有维度均为 1 convDesc 组计数支持:大于 0 dyDesc 宽度或高度必须等于 1 (与 xDesc 中的维度相同)。另一个维度必须小于或等于 256,这意味着当前支持的最大 1D 平铺大小。convDesc 垂直和水平滤波器步幅必须等于 1 dwDesc 滤波器高度必须大于 convDesc 零填充高度 dwDesc 滤波器宽度必须大于 convDesc 零填充宽度

cudnnConvolutionBackwardFilter() 3D 卷积支持的算法。滤波器描述符 dwDesc: _NCHW#

算法名称 (3D 卷积)

确定性

xDesc 支持的张量格式

dyDesc 支持的张量格式

支持的数据类型配置

重要提示

_ALGO_0

_NCDHW_VECT_C 以外的所有算法

NCDHW CDHW-packed NCDHW W-packed NDHWC

PSEUDO_HALF_CONFIG PSEUDO_BFLOAT16_CONFIG FLOAT_CONFIG DOUBLE_CONFIG

膨胀:所有维度 convDesc 的膨胀均大于 0 组计数支持:大于 0

_ALGO_1

_NCDHW_VECT_C 以外的所有算法

NCDHW CDHW-packed NCDHW W-packed NDHWC

PSEUDO_HALF_CONFIG PSEUDO_BFLOAT16_CONFIG FLOAT_CONFIG DOUBLE_CONFIG

膨胀:所有维度 convDesc 的膨胀均大于 0 组计数支持:大于 0

_ALGO_3

NCDHW fully-packed

NCDHW fully-packed

PSEUDO_HALF_CONFIG PSEUDO_BFLOAT16_CONFIG FLOAT_CONFIG DOUBLE_CONFIG

膨胀:所有维度 convDesc 的膨胀均大于 0 组计数支持:大于 0

cudnnConvolutionBackwardFilter() 3D 卷积支持的算法。滤波器描述符 dwDesc: _NHWC#

算法名称 (3D 卷积)

确定性

xDesc 支持的张量格式

dyDesc 支持的张量格式

支持的数据类型配置

重要提示

_ALGO_1

NDHWC HWC-packed

NDHWC HWC-packed

PSEUDO_HALF_CONFIG PSEUDO_BFLOAT16_CONFIG FLOAT_CONFIG TRUE_HALF_CONFIG

膨胀:所有维度 convDesc 的膨胀均大于 0 组计数支持:大于 0

返回

CUDNN_STATUS_SUCCESS

操作已成功启动。

CUDNN_STATUS_BAD_PARAM

满足以下至少一个条件

  • 以下至少有一个为 NULLhandle, xDesc, dyDesc, convDesc, dwDesc, xData, dyData, dwData, alpha, 或 beta

  • xDescdyDesc 的维度数量不匹配

  • xDescdwDesc 的维度数量不匹配

  • xDesc 的维度数量少于三个

  • xDesc, dyDescdwDesc 的数据类型不匹配

  • xDescdwDesc 的每个图像(或分组卷积情况下的组)的输入特征图数量不匹配

  • yDescdwDesc 指示的输出通道计数不是组计数的倍数(如果在 convDesc 中设置了组计数)

CUDNN_STATUS_NOT_SUPPORTED

满足以下至少一个条件

  • xDescdyDesc 具有负张量步幅

  • xDesc, dyDesc`,` or ``dwDesc 的维度数量不是 45

  • 所选 algo 不支持提供的参数;有关每种 algo 的参数支持的详尽列表,请参见上文

CUDNN_STATUS_MAPPING_ERROR

在与滤波器数据关联的纹理对象创建期间发生错误。

CUDNN_STATUS_EXECUTION_FAILED

该函数无法在 GPU 上启动。

cudnnConvolutionBiasActivationForward()#

此函数在 cuDNN 9.0 中已弃用。

此函数将偏置和激活应用于 cudnnConvolutionForward() 的卷积或互相关,并在 y 中返回结果。完整计算遵循公式 y = act (alpha1 * conv(x) + alpha2 * z + bias)

cudnnStatus_t cudnnConvolutionBiasActivationForward(
    cudnnHandle_t                       handle,
    const void                         *alpha1,
    const cudnnTensorDescriptor_t       xDesc,
    const void                         *x,
    const cudnnFilterDescriptor_t       wDesc,
    const void                         *w,
    const cudnnConvolutionDescriptor_t  convDesc,
    cudnnConvolutionFwdAlgo_t           algo,
    void                               *workSpace,
    size_t                              workSpaceSizeInBytes,
    const void                         *alpha2,
    const cudnnTensorDescriptor_t       zDesc,
    const void                         *z,
    const cudnnTensorDescriptor_t       biasDesc,
    const void                         *bias,
    const cudnnActivationDescriptor_t   activationDesc,
    const cudnnTensorDescriptor_t       yDesc,
    void                               *y)

例程 cudnnGetConvolution2dForwardOutputDim()cudnnGetConvolutionNdForwardOutputDim() 可用于确定输出张量描述符 yDesc 相对于 xDescconvDescwDesc 的正确维度。

只有 CUDNN_CONVOLUTION_FWD_ALGO_IMPLICIT_PRECOMP_GEMM 算法在 CUDNN_ACTIVATION_IDENTITY 中启用。换句话说,在输入 activationDesccudnnActivationDescriptor_t 结构中,如果 cudnnActivationMode_t 字段的模式设置为枚举值 CUDNN_ACTIVATION_IDENTITY,则此函数 cudnnConvolutionBiasActivationForward() 的输入 cudnnConvolutionFwdAlgo_t 必须设置为枚举值 CUDNN_CONVOLUTION_FWD_ALGO_IMPLICIT_PRECOMP_GEMM。有关更多信息,请参阅 cudnnSetActivationDescriptor()

设备指针 zy 可能指向相同的缓冲区,但是,x 不能与 zy 指向相同的缓冲区。

参数

handle

输入。指向先前创建的 cuDNN 上下文的句柄。有关更多信息,请参阅 cudnnHandle_t

alpha1, alpha2

输入。指向比例因子(在主机内存中)的指针,用于将卷积的计算结果与 z 和偏置混合,如下所示

y = act (alpha1 * conv(x) + alpha2 * z + bias)

有关更多信息,请参阅 缩放参数

xDesc

输入。先前初始化的张量描述符的句柄。有关更多信息,请参阅 cudnnTensorDescriptor_t

x

输入。与张量描述符 xDesc 关联的 GPU 内存的数据指针。

wDesc

输入。指向先前初始化的滤波器描述符的句柄。有关更多信息,请参阅 cudnnFilterDescriptor_t

w

输入。指向与滤波器描述符 wDesc 关联的 GPU 内存的数据指针。

convDesc

输入。先前初始化的卷积描述符。有关更多信息,请参阅 cudnnConvolutionDescriptor_t

algo

输入。枚举器,指定应使用哪种卷积算法来计算结果。有关更多信息,请参阅 cudnnConvolutionFwdAlgo_t

workSpace

输入。指向 GPU 内存的数据指针,该内存指向执行指定算法所需的工作空间。如果特定算法不需要工作空间,则该指针可以为 NIL

workSpaceSizeInBytes

输入。指定提供的 workSpace 的大小(以字节为单位)。

zDesc

输入。先前初始化的张量描述符的句柄。

z

输入。与张量描述符 zDesc 关联的 GPU 内存的数据指针。

biasDesc

输入。先前初始化的张量描述符的句柄。

bias

输入。与张量描述符 biasDesc 关联的 GPU 内存的数据指针。

activationDesc

输入。先前初始化的激活描述符的句柄。有关更多信息,请参阅 cudnnActivationDescriptor_t

yDesc

输入。先前初始化的张量描述符的句柄。

y

输入/输出。与张量描述符 yDesc 关联的 GPU 内存的数据指针,该描述符携带卷积的结果。

对于卷积步骤,此函数支持 xDescwDescconvDescyDesc 的特定数据类型组合,如 cudnnConvolutionForward() 的文档中所列。下表指定了 xyzbiasalpha1alpha2 支持的数据类型组合。

(X = CUDNN_DATA) 的支持组合,用于 cudnnConvolutionBiasActivationForward()#

x

w

convDesc

yz

bias

alpha1alpha2

X_DOUBLE

X_DOUBLE

X_DOUBLE

X_DOUBLE

X_DOUBLE

X_DOUBLE

X_FLOAT

X_FLOAT

X_FLOAT

X_FLOAT

X_FLOAT

X_FLOAT

X_HALF

X_HALF

X_FLOAT

X_HALF

X_HALF

X_FLOAT

X_BFLOAT16

X_BFLOAT16

X_FLOAT

X_BFLOAT16

X_BFLOAT16

X_FLOAT

X_INT8

X_INT8

X_INT32

X_INT8

X_FLOAT

X_FLOAT

X_INT8

X_INT8

X_INT32

X_FLOAT

X_FLOAT

X_FLOAT

X_INT8x4

X_INT8x4

X_INT32

X_INT8x4

X_FLOAT

X_FLOAT

X_INT8x4

X_INT8x4

X_INT32

X_FLOAT

X_FLOAT

X_FLOAT

X_UINT8

X_INT8

X_INT32

X_INT8

X_FLOAT

X_FLOAT

X_UINT8

X_INT8

X_INT32

X_FLOAT

X_FLOAT

X_FLOAT

X_UINT8x4

X_INT8x4

X_INT32

X_INT8x4

X_FLOAT

X_FLOAT

X_UINT8x4

X_INT8x4

X_INT32

X_FLOAT

X_FLOAT

X_FLOAT

X_INT8x32

X_INT8x32

X_INT32

X_INT8x32

X_FLOAT

X_FLOAT

返回

除了 cudnnConvolutionForward() 文档中列出的错误值之外,此函数返回的可能错误值及其含义如下所示。

CUDNN_STATUS_SUCCESS

操作已成功启动。

CUDNN_STATUS_BAD_PARAM

满足以下至少一个条件

  • 以下至少有一个为 NULL: handle, xDesc, wDesc, convDesc, yDesc, zDesc, biasDesc, activationDesc, xData, wData, yData, zData, bias, alpha1, 和 alpha2

  • xDescwDescyDesczDesc 的维度数量不等于 convDesc + 2 的数组长度。

CUDNN_STATUS_NOT_SUPPORTED

该函数不支持提供的配置。一些不支持的配置示例包括

  • activationDescmode 不是 CUDNN_ACTIVATION_RELUCUDNN_ACTIVATION_IDENTITY

  • activationDescreluNanOpt 不是 CUDNN_NOT_PROPAGATE_NAN

  • biasDesc 的第二个步幅不等于 1

  • biasDesc 的第一个维度不等于 1

  • biasDesc 的第二个维度和 filterDesc 的第一个维度不相等。

  • biasDesc 的数据类型与上面数据类型表格中列出的 yDesc 的数据类型不对应。

  • zDescdestDesc 不匹配。

CUDNN_STATUS_EXECUTION_FAILED

该函数无法在 GPU 上启动。

cudnnConvolutionForward()#

此函数在 cuDNN 9.0 中已弃用。

此函数使用 w 指定的滤波器对 x 执行卷积或互相关运算,并将结果返回到 y 中。缩放因子 alphabeta 可分别用于缩放输入张量和输出张量。

cudnnStatus_t cudnnConvolutionForward(
    cudnnHandle_t                       handle,
    const void                         *alpha,
    const cudnnTensorDescriptor_t       xDesc,
    const void                         *x,
    const cudnnFilterDescriptor_t       wDesc,
    const void                         *w,
    const cudnnConvolutionDescriptor_t  convDesc,
    cudnnConvolutionFwdAlgo_t           algo,
    void                               *workSpace,
    size_t                              workSpaceSizeInBytes,
    const void                         *beta,
    const cudnnTensorDescriptor_t       yDesc,
    void                               *y)

例程 cudnnGetConvolution2dForwardOutputDim()cudnnGetConvolutionNdForwardOutputDim() 可用于确定输出张量描述符 yDesc 相对于 xDescconvDescwDesc 的正确维度。

参数

handle

输入。指向先前创建的 cuDNN 上下文的句柄。有关更多信息,请参阅 cudnnHandle_t

alpha, beta

输入。指向缩放因子(在主机内存中)的指针,用于将计算结果与输出层中的先前值混合,如下所示

dstValue = alpha[0]*result + beta[0]*priorDstValue

有关更多信息,请参阅 缩放参数

xDesc

输入。先前初始化的张量描述符的句柄。有关更多信息,请参阅 cudnnTensorDescriptor_t

x

输入。与张量描述符 xDesc 关联的 GPU 内存的数据指针。

wDesc

输入。指向先前初始化的滤波器描述符的句柄。有关更多信息,请参阅 cudnnFilterDescriptor_t

w

输入。指向与滤波器描述符 wDesc 关联的 GPU 内存的数据指针。

convDesc

输入。先前初始化的卷积描述符。有关更多信息,请参阅 cudnnConvolutionDescriptor_t

algo

输入。枚举器,指定应使用哪种卷积算法来计算结果。有关更多信息,请参阅 cudnnConvolutionFwdAlgo_t

workSpace

输入。指向 GPU 内存的数据指针,该内存指向执行指定算法所需的工作空间。如果特定算法不需要工作空间,则该指针可以为 NIL

workSpaceSizeInBytes

输入。指定提供的 workSpace 的大小(以字节为单位)。

yDesc

输入。先前初始化的张量描述符的句柄。

y

输入/输出。指向 GPU 内存的数据指针,该内存与携带卷积结果的张量描述符 yDesc 相关联。

支持的配置

此函数支持 xDescwDescconvDescyDesc 的以下数据类型组合。

`cudnnConvolutionForward()` 支持的配置#

数据类型配置

xDescwDesc 数据类型

convDesc 数据类型

yDesc 数据类型

TRUE_HALF_CONFIG(仅在具有真正 FP16 支持的架构上受支持,即计算能力 5.3 及更高版本)

CUDNN_DATA_HALF

CUDNN_DATA_HALF

CUDNN_DATA_HALF

PSEUDO_HALF_CONFIG

CUDNN_DATA_HALF

CUDNN_DATA_FLOAT

CUDNN_DATA_HALF

PSEUDO_BFLOAT16_CONFIG(仅在支持 bfloat16 的架构上支持,即计算能力 8.0 及更高版本)

CUDNN_DATA_BFLOAT16

CUDNN_DATA_FLOAT

CUDNN_DATA_BFLOAT16

FLOAT_CONFIG

CUDNN_DATA_FLOAT

CUDNN_DATA_FLOAT

CUDNN_DATA_FLOAT

DOUBLE_CONFIG

CUDNN_DATA_DOUBLE

CUDNN_DATA_DOUBLE

CUDNN_DATA_DOUBLE

INT8_CONFIG(仅在支持 DP4A 的架构上支持,即计算能力 6.1 及更高版本)

CUDNN_DATA_INT8

CUDNN_DATA_INT32

CUDNN_DATA_INT8

INT8_EXT_CONFIG(仅在支持 DP4A 的架构上支持,即计算能力 6.1 及更高版本)

CUDNN_DATA_INT8

CUDNN_DATA_INT32

CUDNN_DATA_FLOAT

INT8x4_CONFIG(仅在支持 DP4A 的架构上支持,即计算能力 6.1 及更高版本)

CUDNN_DATA_INT8x4

CUDNN_DATA_INT32

CUDNN_DATA_INT8x4

INT8x4_EXT_CONFIG(仅在支持 DP4A 的架构上支持,即计算能力 6.1 及更高版本)

CUDNN_DATA_INT8x4

CUDNN_DATA_INT32

CUDNN_DATA_FLOAT

UINT8_CONFIG(仅在支持 DP4A 的架构上支持,即计算能力 6.1 及更高版本)

xDesc: CUDNN_DATA_UINT8 wDesc: CUDNN_DATA_INT8

CUDNN_DATA_INT32

CUDNN_DATA_INT8

UINT8x4_CONFIG(仅在支持 DP4A 的架构上支持,即计算能力 6.1 及更高版本)

xDesc: CUDNN_DATA_UINT8x4 wDesc: CUDNN_DATA_INT8x4

CUDNN_DATA_INT32

CUDNN_DATA_INT8x4

UINT8_EXT_CONFIG(仅在支持 DP4A 的架构上支持,即计算能力 6.1 及更高版本)

xDesc: CUDNN_DATA_UINT8 wDesc: CUDNN_DATA_INT8

CUDNN_DATA_INT32

CUDNN_DATA_FLOAT

UINT8x4_EXT_CONFIG(仅在支持 DP4A 的架构上支持,即计算能力 6.1 及更高版本)

xDesc: CUDNN_DATA_UINT8x4 wDesc: CUDNN_DATA_INT8x4

CUDNN_DATA_INT32

CUDNN_DATA_FLOAT

INT8x32_CONFIG(仅在支持 IMMA 的架构上支持,即计算能力 7.5 及更高版本)

CUDNN_DATA_INT8x32

CUDNN_DATA_INT32

CUDNN_DATA_INT8x32

支持的算法

对于此函数,所有算法都执行确定性计算。指定单独的算法可能会导致性能和支持方面的变化。

下表显示了支持的 2D 和 3D 卷积列表。首先描述 2D 卷积,然后是 3D 卷积。

为简洁起见,下表中使用后跟 > 的简写版本

  • CUDNN_CONVOLUTION_FWD_ALGO_IMPLICIT_GEMM > _IMPLICIT_GEMM

  • CUDNN_CONVOLUTION_FWD_ALGO_IMPLICIT_PRECOMP_GEMM > _IMPLICIT_PRECOMP_GEMM

  • CUDNN_CONVOLUTION_FWD_ALGO_GEMM > _GEMM

  • CUDNN_CONVOLUTION_FWD_ALGO_DIRECT > _DIRECT

  • CUDNN_CONVOLUTION_FWD_ALGO_FFT > _FFT

  • CUDNN_CONVOLUTION_FWD_ALGO_FFT_TILING > _FFT_TILING

  • CUDNN_CONVOLUTION_FWD_ALGO_WINOGRAD > _WINOGRAD

  • CUDNN_CONVOLUTION_FWD_ALGO_WINOGRAD_NONFUSED > _WINOGRAD_NONFUSED

  • CUDNN_TENSOR_NCHW > _NCHW

  • CUDNN_TENSOR_NHWC > _NHWC

  • CUDNN_TENSOR_NCHW_VECT_C > _NCHW_VECT_C

`cudnnConvolutionForward()` 2D 卷积支持的算法。滤波器描述符 wDesc: _NCHW(请参阅 cudnnTensorFormat_t)。#

算法名称

xDesc 支持的张量格式

yDesc 支持的张量格式

支持的数据类型配置

重要提示

_IMPLICIT_GEMM

_NCHW_VECT_C 外的所有格式

_NCHW_VECT_C 外的所有格式

TRUE_HALF_CONFIG PSEUDO_HALF_CONFIG PSEUDO_BFLOAT16_CONFIG FLOAT_CONFIG DOUBLE_CONFIG

空洞:对于所有维度 convDesc 大于 0。组计数支持:对于所有算法大于 0

_IMPLICIT_PRECOMP_GEMM

_NCHW_VECT_C 外的所有格式

_NCHW_VECT_C 外的所有格式

TRUE_HALF_CONFIG PSEUDO_HALF_CONFIG PSEUDO_BFLOAT16_CONFIG FLOAT_CONFIG DOUBLE_CONFIG

空洞:对于所有维度 convDesc1。组计数支持:对于所有算法大于 0

_GEMM

_NCHW_VECT_C 外的所有格式

_NCHW_VECT_C 外的所有格式

PSEUDO_HALF_CONFIG FLOAT_CONFIG DOUBLE_CONFIG

空洞:对于所有维度 convDesc1。组计数支持:对于所有算法大于 0

_FFT

NCHW HW 打包

NCHW HW 打包

PSEUDO_HALF_CONFIG FLOAT_CONFIG

空洞:对于所有维度 convDesc1。组计数支持:对于所有算法大于 0xDesc 特征图高度 + 2 * convDesc 零填充高度必须等于或小于 256xDesc 特征图宽度 + 2 * convDesc 零填充宽度必须等于或小于 256convDesc 垂直和水平滤波器步幅必须等于 1wDesc 滤波器高度必须大于 convDesc 零填充高度。wDesc 滤波器宽度必须大于 convDesc 零填充宽度。

_FFT_TILING

NCHW HW 打包

NCHW HW 打包

当任务可以通过 1D FFT 处理时,也支持 PSEUDO_HALF_CONFIG FLOAT_CONFIG DOUBLE_CONFIG,即滤波器维度之一(宽度或高度)为 1

空洞:对于所有维度 convDesc1。组计数支持:对于所有算法大于 0。当 wDesc 滤波器维度都不是 1 时,滤波器宽度和高度不得大于 32。当 wDesc 滤波器维度之一为 1 时,最大滤波器维度不应超过 256convDesc 垂直和水平滤波器步幅必须等于 1,当滤波器宽度或滤波器高度之一为 1 时;否则,步幅可以为 12wDesc 滤波器高度必须大于 convDesc 零填充高度。wDesc 滤波器宽度必须大于 convDesc 零填充宽度。

_WINOGRAD

_NCHW_VECT_C 外的所有格式

_NCHW_VECT_C 外的所有格式

PSEUDO_HALF_CONFIG FLOAT_CONFIG

空洞:对于所有维度 convDesc1。组计数支持:对于所有算法大于 0convDesc 垂直和水平滤波器步幅必须等于 1wDesc 滤波器高度必须为 3wDesc 滤波器宽度必须为 3

_WINOGRAD_NONFUSED

_NCHW_VECT_C 外的所有格式

_NCHW_VECT_C 外的所有格式

TRUE_HALF_CONFIG PSEUDO_HALF_CONFIG PSEUDO_BFLOAT16_CONFIG FLOAT_CONFIG

空洞:对于所有维度 convDesc1。组计数支持:对于所有算法大于 0convDesc 垂直和水平滤波器步幅必须等于 1wDesc 滤波器(高度,宽度)必须为 (3,3) 或 (5,5)。如果 wDesc 滤波器(高度,宽度)为 (5,5),则不支持数据类型配置 TRUE_HALF_CONFIG

_DIRECT

目前,cuDNN 中未实现。

目前,cuDNN 中未实现。

目前,cuDNN 中未实现。

目前,cuDNN 中未实现。

`cudnnConvolutionForward()` 2D 卷积支持的算法。滤波器描述符 wDesc: _NCHWC#

算法名称

xDesc 支持的张量格式

yDesc 支持的张量格式

支持的数据类型配置

重要提示

_IMPLICIT_GEMM _IMPLICIT_PRECOMP_GEMM

_NCHW_VECT_C 外的所有格式

_NCHW_VECT_C 外的所有格式

INT8x4_CONFIG UINT8x4_CONFIG

空洞率:所有维度均为 1 convDesc 组计数支持:大于 0

_IMPLICIT_PRECOMP_GEMM

_NCHW_VECT_C 外的所有格式

_NCHW_VECT_C 外的所有格式

INT8x32_CONFIG

空洞:对于所有维度 convDesc1。组计数支持:对于所有算法大于 0。需要计算能力 7.2 或更高版本。

`cudnnConvolutionForward()` 2D 卷积支持的算法。滤波器描述符 wDesc: _NHWC#

算法名称

xDesc 支持的张量格式

yDesc 支持的张量格式

支持的数据类型配置

重要提示

_IMPLICIT_GEMM _IMPLICIT_PRECOMP_GEMM

NHWC 完全打包

NHWC 完全打包

INT8_CONFIG INT8_EXT_CONFIG UINT8_CONFIG UINT8_EXT_CONFIG

空洞:对于所有维度为 1。输入和输出特征图必须是 4 的倍数。在 INT8_EXT_CONFIGUINT8_EXT_CONFIG 的情况下,输出特征图可以是非倍数。convDesc 组计数支持:大于 0

_IMPLICIT_GEMM _IMPLICIT_PRECOMP_GEMM

NHWC HWC 打包

NHWC HWC 打包 NCHW CHW 打包

TRUE_HALF_CONFIG PSEUDO_HALF_CONFIG PSEUDO_BFLOAT16_CONFIG FLOAT_CONFIG DOUBLE_CONFIG

convDesc 组计数支持:大于 0

`cudnnConvolutionForward()` 3D 卷积支持的算法。滤波器描述符 wDesc: _NCHW#

算法名称

xDesc 支持的张量格式

yDesc 支持的张量格式

支持的数据类型配置

重要提示

_IMPLICIT_GEMM _IMPLICIT_PRECOMP_GEMM

_NCHW_VECT_C 外的所有格式

_NCHW_VECT_C 外的所有格式

PSEUDO_HALF_CONFIG PSEUDO_BFLOAT16_CONFIG FLOAT_CONFIG DOUBLE_CONFIG

空洞:对于所有维度 convDesc 大于 0。组计数支持:对于所有算法大于 0

_FFT_TILING

NCDHW DHW-packed

NCDHW DHW-packed

PSEUDO_HALF_CONFIG PSEUDO_BFLOAT16_CONFIG FLOAT_CONFIG DOUBLE_CONFIG

空洞:对于所有维度为 1wDesc 滤波器高度必须等于或小于 16wDesc 滤波器宽度必须等于或小于 16wDesc 滤波器深度必须等于或小于 16convDesc 必须具有所有滤波器步幅等于 1wDesc 滤波器高度必须大于 convDesc 零填充高度。wDesc 滤波器宽度必须大于 convDesc 零填充宽度。wDesc 滤波器深度必须大于 convDesc 零填充深度。convDesc 组计数支持:对于所有算法大于 0

`cudnnConvolutionForward()` 3D 卷积支持的算法。滤波器描述符 wDesc: _NHWC#

算法名称

xDesc 支持的张量格式

yDesc 支持的张量格式

支持的数据类型配置

重要提示

_IMPLICIT_PRECOMP_GEMM

NDHWC DHWC-packed

NDHWC DHWC-packed

PSEUDO_HALF_CONFIG PSEUDO_BFLOAT16_CONFIG FLOAT_CONFIG

空洞:对于所有维度 convDesc 大于 0。组计数支持:对于所有算法大于 0

张量可以使用 cudnnTransformTensor() 转换为 CUDNN_TENSOR_NCHW_VECT_C 和从 CUDNN_TENSOR_NCHW_VECT_C 转换。

返回

CUDNN_STATUS_SUCCESS

操作已成功启动。

CUDNN_STATUS_BAD_PARAM

满足以下至少一个条件

  • 以下至少一项为 NULLhandlexDescwDescconvDescyDescxDatawyDataalphabeta

  • xDescyDesc 的维度数不匹配

  • xDescwDesc 的维度数不匹配

  • xDesc 的维度数量少于三个

  • xDesc 的维度数不等于 convDesc 数组长度 + 2

  • xDescwDesc 的每张图像(或分组卷积情况下的组)输入特征图数量不匹配

  • yDescwDesc 指示的输出通道计数不是组计数的倍数(如果在 convDesc 中设置了组计数)

  • xDescwDescyDesc 的数据类型不匹配

  • 对于某些空间维度,wDesc 的空间大小大于输入空间大小(包括零填充大小)

CUDNN_STATUS_NOT_SUPPORTED

满足以下至少一个条件

  • xDescyDesc 具有负张量步幅

  • xDescwDescyDesc 的维度数不是 45

  • yDesc 空间大小与 cudnnGetConvolutionNdForwardOutputDim() 确定的预期大小不匹配

  • 所选算法不支持提供的参数;有关每个算法支持的参数的详尽列表,请参见上文

CUDNN_STATUS_MAPPING_ERROR

在与滤波器数据关联的纹理对象创建期间发生错误。

CUDNN_STATUS_EXECUTION_FAILED

该函数无法在 GPU 上启动。

cudnnCreateConvolutionDescriptor()#

此函数在 cuDNN 9.0 中已弃用。

此函数通过分配存储其不透明结构所需的内存来创建卷积描述符对象。有关更多信息,请参阅 cudnnConvolutionDescriptor_t

cudnnStatus_t cudnnCreateConvolutionDescriptor(
    cudnnConvolutionDescriptor_t *convDesc)

返回

CUDNN_STATUS_SUCCESS

对象已成功创建。

CUDNN_STATUS_ALLOC_FAILED

资源无法分配。

cudnnCreateFusedOpsConstParamPack()#

此函数在 cuDNN 9.0 中已弃用。

此函数创建一个不透明结构,用于存储各种问题大小信息,例如张量的形状、布局和类型,以及所选 cudnnFusedOps 计算序列的卷积和激活描述符。

cudnnStatus_t cudnnCreateFusedOpsConstParamPack(
  cudnnFusedOpsConstParamPack_t *constPack,
  cudnnFusedOps_t ops);

参数

constPack

输入。此函数创建的不透明结构。有关更多信息,请参阅 cudnnFusedOpsConstParamPack_t

ops

输入。要在 cudnnFusedOps 计算中执行的特定计算序列,如枚举类型 cudnnFusedOps_t 中定义。

返回

CUDNN_STATUS_BAD_PARAM

如果 constPackopsNULL

CUDNN_STATUS_ALLOC_FAILED

资源无法分配。

CUDNN_STATUS_SUCCESS

如果描述符已成功创建。

cudnnCreateFusedOpsPlan()#

此函数在 cuDNN 9.0 中已弃用。

此函数为 cudnnFusedOps 计算创建计划描述符。此描述符包含计划信息,包括问题类型和大小、应运行的内核以及内部工作区分区。

cudnnStatus_t cudnnCreateFusedOpsPlan(
  cudnnFusedOpsPlan_t *plan,
  cudnnFusedOps_t ops);

参数

plan

输入。指向此函数创建的描述符实例的指针。

ops

输入。应为其创建此计划描述符的特定融合操作计算序列。有关更多信息,请参阅 cudnnFusedOps_t

返回

CUDNN_STATUS_BAD_PARAM

如果输入 *planNULL,或者 ops 输入不是有效的 cudnnFusedOp 枚举。

CUDNN_STATUS_ALLOC_FAILED

资源无法分配。

CUDNN_STATUS_SUCCESS

计划描述符已成功创建。

cudnnCreateFusedOpsVariantParamPack()#

此函数在 cuDNN 9.0 中已弃用。

此函数为 cudnnFusedOps 计算创建变体包描述符。

cudnnStatus_t cudnnCreateFusedOpsVariantParamPack(
  cudnnFusedOpsVariantParamPack_t *varPack,
  cudnnFusedOps_t ops);

参数

varPack

输入。指向此函数创建的描述符的指针。有关更多信息,请参阅 cudnnFusedOpsVariantParamPack_t

ops

输入。应为其创建此描述符的特定融合操作计算序列。

返回

CUDNN_STATUS_SUCCESS

描述符已成功销毁。

CUDNN_STATUS_ALLOC_FAILED

资源无法分配。

CUDNN_STATUS_BAD_PARAM

如果任何输入无效。

cudnnDestroyConvolutionDescriptor()#

此函数在 cuDNN 9.0 中已弃用。

此函数销毁先前创建的卷积描述符对象。

cudnnStatus_t cudnnDestroyConvolutionDescriptor(
    cudnnConvolutionDescriptor_t convDesc)

返回

CUDNN_STATUS_SUCCESS

描述符已成功销毁。

cudnnDestroyFusedOpsConstParamPack()#

此函数在 cuDNN 9.0 中已弃用。

此函数销毁先前创建的 cudnnFusedOpsConstParamPack_t 结构。

cudnnStatus_t cudnnDestroyFusedOpsConstParamPack(
  cudnnFusedOpsConstParamPack_t constPack);

参数

constPack

输入。应销毁的 cudnnFusedOpsConstParamPack_t 结构。

返回

CUDNN_STATUS_SUCCESS

描述符已成功销毁。

CUDNN_STATUS_INTERNAL_ERROR

ops 枚举值不受支持或无效。

cudnnDestroyFusedOpsPlan()#

此函数在 cuDNN 9.0 中已弃用。

此函数销毁提供的计划描述符。

cudnnStatus_t cudnnDestroyFusedOpsPlan(
  cudnnFusedOpsPlan_t plan);

参数

plan

输入。应由此函数销毁的描述符。

返回

CUDNN_STATUS_SUCCESS

计划描述符为 NULL 或描述符已成功销毁。

cudnnDestroyFusedOpsVariantParamPack()#

此函数在 cuDNN 9.0 中已弃用。

此函数销毁先前创建的 cudnnFusedOps 常量参数描述符。

cudnnStatus_t cudnnDestroyFusedOpsVariantParamPack(
  cudnnFusedOpsVariantParamPack_t varPack);

参数

varPack

输入。应销毁的描述符。

返回

CUDNN_STATUS_SUCCESS

描述符已成功销毁。

cudnnFindConvolutionBackwardDataAlgorithm()#

此函数在 cuDNN 9.0 中已弃用。

此函数尝试 cudnnConvolutionBackwardData() 的所有可用算法。它将尝试提供的 convDesc mathTypeCUDNN_DEFAULT_MATH(假设两者不同)。

cudnnStatus_t cudnnFindConvolutionBackwardDataAlgorithm(
    cudnnHandle_t                          handle,
    const cudnnFilterDescriptor_t          wDesc,
    const cudnnTensorDescriptor_t          dyDesc,
    const cudnnConvolutionDescriptor_t     convDesc,
    const cudnnTensorDescriptor_t          dxDesc,
    const int                              requestedAlgoCount,
    int                                   *returnedAlgoCount,
    cudnnConvolutionBwdDataAlgoPerf_t     *perfResults)

不具备 CUDNN_TENSOR_OP_MATH 可用性的算法将仅使用 CUDNN_DEFAULT_MATH 进行尝试,并以此方式返回。

内存通过 cudaMalloc() 分配。性能指标在用户分配的 cudnnConvolutionBwdDataAlgoPerf_t 数组中返回。这些指标以排序方式写入,其中第一个元素具有最低的计算时间。可以通过 API cudnnGetConvolutionBackwardDataAlgorithmMaxCount() 查询生成的算法总数。

注意

  • 此函数是主机阻塞的。

  • 建议在分配层数据之前运行此函数;否则可能会因资源使用而无谓地抑制某些算法选项。

参数

handle

输入。先前创建的 cuDNN 上下文的句柄。

wDesc

输入。先前初始化的滤波器描述符的句柄。

dyDesc

输入。先前初始化的输入微分张量描述符的句柄。

convDesc

输入。先前初始化的卷积描述符。

dxDesc

输入。指向先前初始化的输出张量描述符的句柄。

requestedAlgoCount

输入。要存储在 perfResults 中的最大元素数。

returnedAlgoCount

输出。存储在 perfResults 中的输出元素数。

perfResults

输出。用户分配的数组,用于存储按计算时间升序排序的性能指标。

返回

CUDNN_STATUS_SUCCESS

查询成功。

CUDNN_STATUS_BAD_PARAM

满足以下至少一个条件

  • handle 未正确分配

  • wDescdyDescdxDesc 未正确分配

  • wDescdyDescdxDesc 的维度数少于 1

  • returnedCountperfResultsNIL

  • requestedCount 小于 1

CUDNN_STATUS_ALLOC_FAILED

此函数无法分配内存来存储示例输入、滤波器和输出。

CUDNN_STATUS_INTERNAL_ERROR

满足以下至少一个条件

  • 该函数无法分配必要的计时对象

  • 该函数无法释放必要的计时对象

  • 该函数无法释放示例输入、滤波器和输出

cudnnFindConvolutionBackwardDataAlgorithmEx()#

此函数在 cuDNN 9.0 中已弃用。

此函数尝试 cudnnConvolutionBackwardData() 的所有可用算法。它将尝试提供的 convDesc mathTypeCUDNN_DEFAULT_MATH(假设两者不同)。

cudnnStatus_t cudnnFindConvolutionBackwardDataAlgorithmEx(
    cudnnHandle_t                          handle,
    const cudnnFilterDescriptor_t          wDesc,
    const void                            *w,
    const cudnnTensorDescriptor_t          dyDesc,
    const void                            *dy,
    const cudnnConvolutionDescriptor_t     convDesc,
    const cudnnTensorDescriptor_t          dxDesc,
    void                                  *dx,
    const int                              requestedAlgoCount,
    int                                   *returnedAlgoCount,
    cudnnConvolutionBwdDataAlgoPerf_t     *perfResults,
    void                                  *workSpace,
    size_t                                 workSpaceSizeInBytes)

不具备 CUDNN_TENSOR_OP_MATH 可用性的算法将仅使用 CUDNN_DEFAULT_MATH 进行尝试,并以此方式返回。

内存通过 cudaMalloc() 分配。性能指标在用户分配的 cudnnConvolutionBwdDataAlgoPerf_t 数组中返回。这些指标以排序方式写入,其中第一个元素具有最低的计算时间。可以通过 API cudnnGetConvolutionBackwardDataAlgorithmMaxCount() 查询生成的算法总数。

注意

此函数是主机阻塞的。

参数

handle

输入。先前创建的 cuDNN 上下文的句柄。

wDesc

输入。先前初始化的滤波器描述符的句柄。

w

输入。指向与滤波器描述符 wDesc 关联的 GPU 内存的数据指针。

dyDesc

输入。先前初始化的输入微分张量描述符的句柄。

dy

输入。指向与滤波器描述符 dyDesc 关联的 GPU 内存的数据指针。

convDesc

输入。先前初始化的卷积描述符。

dxDesc

输入。指向先前初始化的输出张量描述符的句柄。

dx

输入/输出。指向与张量描述符 dxDesc 关联的 GPU 内存的数据指针。此张量的内容将被任意值覆盖。

requestedAlgoCount

输入。要存储在 perfResults 中的最大元素数。

returnedAlgoCount

输出。存储在 perfResults 中的输出元素数。

perfResults

输出。用户分配的数组,用于存储按计算时间升序排序的性能指标。

workSpace

输入。指向 GPU 内存的数据指针,是一些算法的必要工作区。此工作区的大小将决定算法的可用性。NIL 指针被视为 0 字节的 workSpace

workSpaceSizeInBytes

输入。指定提供的 workSpace 的大小(以字节为单位)。

返回

CUDNN_STATUS_SUCCESS

查询成功。

CUDNN_STATUS_BAD_PARAM

满足以下至少一个条件

  • handle 未正确分配

  • wDescdyDescdxDesc 未正确分配

  • wDescdyDescdxDesc 的维度数少于 1

  • returnedCountperfResultsNIL

  • requestedCount 小于 1

CUDNN_STATUS_INTERNAL_ERROR

满足以下至少一个条件

  • 该函数无法分配必要的计时对象

  • 该函数无法释放必要的计时对象

  • 该函数无法释放示例输入、滤波器和输出

cudnnFindConvolutionBackwardFilterAlgorithm()#

此函数在 cuDNN 9.0 中已弃用。

此函数尝试 cudnnConvolutionBackwardFilter() 的所有可用算法。它将尝试提供的 convDesc mathTypeCUDNN_DEFAULT_MATH(假设两者不同)。

cudnnStatus_t cudnnFindConvolutionBackwardFilterAlgorithm(
    cudnnHandle_t                          handle,
    const cudnnTensorDescriptor_t          xDesc,
    const cudnnTensorDescriptor_t          dyDesc,
    const cudnnConvolutionDescriptor_t     convDesc,
    const cudnnFilterDescriptor_t          dwDesc,
    const int                              requestedAlgoCount,
    int                                   *returnedAlgoCount,
    cudnnConvolutionBwdFilterAlgoPerf_t     *perfResults)

不具备 CUDNN_TENSOR_OP_MATH 可用性的算法将仅使用 CUDNN_DEFAULT_MATH 进行尝试,并以此方式返回。

内存通过 cudaMalloc() 分配。性能指标在用户分配的 cudnnConvolutionBwdFilterAlgoPerf_t 数组中返回。这些指标以排序方式写入,其中第一个元素具有最低的计算时间。可以通过 API cudnnGetConvolutionBackwardFilterAlgorithmMaxCount() 查询生成的算法总数。

注意

  • 此函数是主机阻塞的。

  • 建议在分配层数据之前运行此函数;否则可能会因资源使用而无谓地抑制某些算法选项。

参数

handle

输入。先前创建的 cuDNN 上下文的句柄。

xDesc

输入。先前初始化的输入张量描述符的句柄。

dyDesc

输入。先前初始化的输入微分张量描述符的句柄。

convDesc

输入。先前初始化的卷积描述符。

dwDesc

输入。先前初始化的滤波器描述符的句柄。

requestedAlgoCount

输入。要存储在 perfResults 中的最大元素数。

returnedAlgoCount

输出。存储在 perfResults 中的输出元素数。

perfResults

输出。用户分配的数组,用于存储按计算时间升序排序的性能指标。

返回

CUDNN_STATUS_SUCCESS

查询成功。

CUDNN_STATUS_BAD_PARAM

满足以下至少一个条件

  • handle 未正确分配

  • xDescdyDescdwDesc 未正确分配

  • xDescdyDescdwDesc 的维度数少于 1

  • returnedCountperfResultsNIL

  • requestedCount 小于 1

CUDNN_STATUS_ALLOC_FAILED 此函数无法分配内存来存储示例输入、滤波器和输出。

CUDNN_STATUS_INTERNAL_ERROR 满足以下至少一个条件

  • 该函数无法分配必要的计时对象。

  • 该函数无法释放必要的计时对象。

  • 该函数无法释放示例输入、滤波器和输出。

cudnnFindConvolutionBackwardFilterAlgorithmEx()#

此函数在 cuDNN 9.0 中已弃用。

此函数尝试 cudnnConvolutionBackwardFilter() 的所有可用算法。它将尝试提供的 convDesc mathTypeCUDNN_DEFAULT_MATH(假设两者不同)。

cudnnStatus_t cudnnFindConvolutionBackwardFilterAlgorithmEx(
    cudnnHandle_t                          handle,
    const cudnnTensorDescriptor_t          xDesc,
    const void                            *x,
    const cudnnTensorDescriptor_t          dyDesc,
    const void                            *dy,
    const cudnnConvolutionDescriptor_t     convDesc,
    const cudnnFilterDescriptor_t          dwDesc,
    void                                  *dw,
    const int                              requestedAlgoCount,
    int                                   *returnedAlgoCount,
    cudnnConvolutionBwdFilterAlgoPerf_t   *perfResults,
    void                                  *workSpace,
    size_t                                 workSpaceSizeInBytes)

不具备 CUDNN_TENSOR_OP_MATH 可用性的算法将仅使用 CUDNN_DEFAULT_MATH 进行尝试,并以此方式返回。

内存通过 cudaMalloc() 分配。性能指标在用户分配的 cudnnConvolutionBwdFilterAlgoPerf_t 数组中返回。这些指标以排序方式写入,其中第一个元素具有最低的计算时间。可以通过 API cudnnGetConvolutionBackwardFilterAlgorithmMaxCount() 查询生成的算法总数。

注意

此函数是主机阻塞的。

参数

handle

输入。先前创建的 cuDNN 上下文的句柄。

xDesc

输入。先前初始化的输入张量描述符的句柄。

x

输入。指向与滤波器描述符 xDesc 关联的 GPU 内存的数据指针。

dyDesc

输入。先前初始化的输入微分张量描述符的句柄。

dy

输入。先前初始化的输入微分张量描述符的句柄。

convDesc

输入。先前初始化的卷积描述符。

dwDesc

输入。先前初始化的滤波器描述符的句柄。

dw

输入/输出。指向与滤波器描述符 dwDesc 关联的 GPU 内存的数据指针。此张量的内容将被任意值覆盖。

requestedAlgoCount

输入。要存储在 perfResults 中的最大元素数。

returnedAlgoCount

输出。存储在 perfResults 中的输出元素数。

perfResults

输出。用户分配的数组,用于存储按计算时间升序排序的性能指标。

workSpace

输入。指向 GPU 内存的数据指针,是一些算法的必要工作区。此工作区的大小将决定算法的可用性。NIL 指针被视为 0 字节的 workSpace

workSpaceSizeInBytes

输入。指定提供的 workSpace 的大小(以字节为单位)。

返回

CUDNN_STATUS_SUCCESS

查询成功。

CUDNN_STATUS_BAD_PARAM

满足以下至少一个条件

  • handle 未正确分配

  • xDescdyDescdwDesc 未正确分配

  • xDescdyDescdwDesc 的维度数少于 1

  • xdydwNIL

  • returnedCountperfResultsNIL

  • requestedCount 小于 1

CUDNN_STATUS_INTERNAL_ERROR 满足以下至少一个条件

  • 该函数无法分配必要的计时对象。

  • 该函数无法释放必要的计时对象。

  • 该函数无法释放示例输入、滤波器和输出。

cudnnFindConvolutionForwardAlgorithm()#

此函数在 cuDNN 9.0 中已弃用。

此函数尝试 cudnnConvolutionForward() 的所有可用算法。它将尝试提供的 convDesc mathTypeCUDNN_DEFAULT_MATH(假设两者不同)。

cudnnStatus_t cudnnFindConvolutionForwardAlgorithm(
    cudnnHandle_t                      handle,
    const cudnnTensorDescriptor_t      xDesc,
    const cudnnFilterDescriptor_t      wDesc,
    const cudnnConvolutionDescriptor_t convDesc,
    const cudnnTensorDescriptor_t      yDesc,
    const int                          requestedAlgoCount,
    int                               *returnedAlgoCount,
    cudnnConvolutionFwdAlgoPerf_t     *perfResults)

不具备 CUDNN_TENSOR_OP_MATH 可用性的算法将仅使用 CUDNN_DEFAULT_MATH 进行尝试,并以此方式返回。

内存通过 cudaMalloc() 分配。性能指标在用户分配的 cudnnConvolutionFwdAlgoPerf_t 数组中返回。这些指标以排序方式写入,其中第一个元素具有最低的计算时间。可以通过 API cudnnGetConvolutionForwardAlgorithmMaxCount() 查询结果算法的总数。

注意

  • 此函数是主机阻塞的。

  • 建议在分配层数据之前运行此函数;否则可能会因资源使用而无谓地抑制某些算法选项。

参数

handle

输入。先前创建的 cuDNN 上下文的句柄。

xDesc

输入。先前初始化的输入张量描述符的句柄。

wDesc

输入。先前初始化的滤波器描述符的句柄。

convDesc

输入。先前初始化的卷积描述符。

yDesc

输入。指向先前初始化的输出张量描述符的句柄。

requestedAlgoCount

输入。要存储在 perfResults 中的最大元素数。

returnedAlgoCount

输出。存储在 perfResults 中的输出元素数。

perfResults

输出。用户分配的数组,用于存储按计算时间升序排序的性能指标。

返回

CUDNN_STATUS_SUCCESS

查询成功。

CUDNN_STATUS_BAD_PARAM

满足以下至少一个条件

  • handle 未正确分配

  • xDescdyDescdwDesc 未正确分配

  • xDescdyDescdwDesc 的维度数少于 1

  • returnedCountperfResultsNIL

  • requestedCount 小于 1

CUDNN_STATUS_ALLOC_FAILED

此函数无法分配内存来存储示例输入、滤波器和输出。

CUDNN_STATUS_INTERNAL_ERROR 满足以下至少一个条件

  • 该函数无法分配必要的计时对象。

  • 该函数无法释放必要的计时对象。

  • 该函数无法释放示例输入、滤波器和输出。

cudnnFindConvolutionForwardAlgorithmEx()#

此函数在 cuDNN 9.0 中已弃用。

此函数尝试 cudnnConvolutionForward() 的所有可用算法。它将尝试提供的 convDesc mathTypeCUDNN_DEFAULT_MATH(假设两者不同)。

cudnnStatus_t cudnnFindConvolutionForwardAlgorithmEx(
    cudnnHandle_t                      handle,
    const cudnnTensorDescriptor_t      xDesc,
    const void                        *x,
    const cudnnFilterDescriptor_t      wDesc,
    const void                        *w,
    const cudnnConvolutionDescriptor_t convDesc,
    const cudnnTensorDescriptor_t      yDesc,
    void                              *y,
    const int                          requestedAlgoCount,
    int                               *returnedAlgoCount,
    cudnnConvolutionFwdAlgoPerf_t     *perfResults,
    void                              *workSpace,
    size_t                             workSpaceSizeInBytes)

不具备 CUDNN_TENSOR_OP_MATH 可用性的算法将仅使用 CUDNN_DEFAULT_MATH 进行尝试,并以此方式返回。

内存通过 cudaMalloc() 分配。性能指标在用户分配的 cudnnConvolutionFwdAlgoPerf_t 数组中返回。这些指标以排序方式写入,其中第一个元素具有最低的计算时间。可以通过 API cudnnGetConvolutionForwardAlgorithmMaxCount() 查询结果算法的总数。

注意

此函数是主机阻塞的。

参数

handle

输入。先前创建的 cuDNN 上下文的句柄。

xDesc

输入。先前初始化的输入张量描述符的句柄。

x

输入。与张量描述符 xDesc 关联的 GPU 内存的数据指针。

wDesc

输入。先前初始化的滤波器描述符的句柄。

w

输入。指向与滤波器描述符 wDesc 关联的 GPU 内存的数据指针。

convDesc

输入。先前初始化的卷积描述符。

yDesc

输入。指向先前初始化的输出张量描述符的句柄。

y

输入/输出. 指向与张量描述符 yDesc 关联的 GPU 内存的数据指针。此张量的内容将被任意值覆盖。

requestedAlgoCount

输入。要存储在 perfResults 中的最大元素数。

returnedAlgoCount

输出。存储在 perfResults 中的输出元素数。

perfResults

输出。用户分配的数组,用于存储按计算时间升序排序的性能指标。

workSpace

输入。指向 GPU 内存的数据指针,是一些算法的必要工作区。此工作区的大小将决定算法的可用性。NIL 指针被视为 0 字节的 workSpace

workSpaceSizeInBytes

输入。指定提供的 workSpace 的大小(以字节为单位)。

返回

CUDNN_STATUS_SUCCESS

查询成功。

CUDNN_STATUS_BAD_PARAM

满足以下至少一个条件

  • handle 未正确分配

  • xDescdyDescdwDesc 未正确分配

  • xDescdyDescdwDesc 的维度数少于 1

  • xwyNIL

  • returnedCountperfResultsNIL

  • requestedCount 小于 1

CUDNN_STATUS_INTERNAL_ERROR 满足以下至少一个条件

  • 该函数无法分配必要的计时对象。

  • 该函数无法释放必要的计时对象。

  • 该函数无法释放示例输入、滤波器和输出。

cudnnFusedOpsExecute()#

此函数执行 cudnnFusedOps 操作序列。

cudnnStatus_t cudnnFusedOpsExecute(
  cudnnHandle_t handle,
  const cudnnFusedOpsPlan_t plan,
  cudnnFusedOpsVariantParamPack_t varPack);

参数

handle

输入. 指向 cuDNN 库上下文的指针。

plan

输入. 指向先前创建和初始化的计划描述符的指针。

varPack

输入. 指向变体参数包描述符的指针。

返回

CUDNN_STATUS_BAD_PARAM

如果计划描述符中 cudnnFusedOps_t 的类型不受支持。

cudnnGetConvolution2dDescriptor()#

此函数在 cuDNN 9.0 中已弃用。

此函数查询先前初始化的 2D 卷积描述符对象。

cudnnStatus_t cudnnGetConvolution2dDescriptor(
    const cudnnConvolutionDescriptor_t  convDesc,
    int                                *pad_h,
    int                                *pad_w,
    int                                *u,
    int                                *v,
    int                                *dilation_h,
    int                                *dilation_w,
    cudnnConvolutionMode_t             *mode,
    cudnnDataType_t                    *computeType)

参数

convDesc

输入/输出. 先前创建的卷积描述符的句柄。

pad_h

输出. 零填充高度:隐式连接到输入图像顶部和底部的零行数。

pad_w

输出. 零填充宽度:隐式连接到输入图像左侧和右侧的零列数。

u

输出. 垂直滤波器步幅。

v

输出. 水平滤波器步幅。

dilation_h

输出. 滤波器高度膨胀。

dilation_w

输出. 滤波器宽度膨胀。

mode

输出. 卷积模式。

computeType

输出. 计算精度。

返回

CUDNN_STATUS_SUCCESS

操作成功。

CUDNN_STATUS_BAD_PARAM

参数 convDescNIL

cudnnGetConvolution2dForwardOutputDim()#

此函数在 cuDNN 9.0 中已弃用。

此函数返回 2D 卷积产生的 4D 张量的维度,给定卷积描述符、输入张量描述符和滤波器描述符。此函数可以帮助设置输出张量,并在启动实际卷积之前分配适当数量的内存。

cudnnStatus_t cudnnGetConvolution2dForwardOutputDim(
    const cudnnConvolutionDescriptor_t  convDesc,
    const cudnnTensorDescriptor_t       inputTensorDesc,
    const cudnnFilterDescriptor_t       filterDesc,
    int                                *n,
    int                                *c,
    int                                *h,
    int                                *w)

输出图像的每个维度 hw 的计算方式如下

outputDim = 1 + ( inputDim + 2*pad - (((filterDim-1)*dilation)+1) )/convolutionStride;

注意

调用 cudnnConvolutionForward()cudnnConvolutionBackwardBias() 时,必须严格遵守此例程提供的维度。卷积例程不支持提供更小或更大的输出张量。

参数

convDesc

输入. 先前创建的卷积描述符的句柄。

inputTensorDesc

输入。先前初始化的张量描述符的句柄。

filterDesc

输入。先前初始化的滤波器描述符的句柄。

n

输出. 输出图像的数量。

c

输出. 每个输出图像的输出特征图的数量。

h

输出. 每个输出特征图的高度。

w

输出. 每个输出特征图的宽度。

返回

CUDNN_STATUS_BAD_PARAM

一个或多个描述符未正确创建,或者 inputTensorDescfilterDesc 的特征图之间存在不匹配。

CUDNN_STATUS_SUCCESS

对象设置成功。

cudnnGetConvolutionBackwardDataAlgorithm_v7()#

此函数在 cuDNN 9.0 中已弃用。

此函数作为启发式方法,用于为给定层规范的 cudnnConvolutionBackwardData() 获取最合适的算法。此函数将返回所有算法(包括 CUDNN_TENSOR_OP_MATHCUDNN_DEFAULT_MATH 版本的算法,其中 CUDNN_TENSOR_OP_MATH 可能可用),并按预期(基于内部启发式)相对性能排序,最快的算法是 perfResults 的索引 0。要彻底搜索最快的算法,请使用 cudnnFindConvolutionBackwardDataAlgorithm()。可以通过 returnedAlgoCount 变量查询结果算法的总数。

cudnnStatus_t cudnnGetConvolutionBackwardDataAlgorithm_v7(
    cudnnHandle_t                          handle,
    const cudnnFilterDescriptor_t          wDesc,
    const cudnnTensorDescriptor_t          dyDesc,
    const cudnnConvolutionDescriptor_t     convDesc,
    const cudnnTensorDescriptor_t          dxDesc,
    const int                              requestedAlgoCount,
    int                                   *returnedAlgoCount,
    cudnnConvolutionBwdDataAlgoPerf_t     *perfResults)

参数

handle

输入。先前创建的 cuDNN 上下文的句柄。

wDesc

输入。先前初始化的滤波器描述符的句柄。

dyDesc

输入。先前初始化的输入微分张量描述符的句柄。

convDesc

输入。先前初始化的卷积描述符。

dxDesc

输入。指向先前初始化的输出张量描述符的句柄。

requestedAlgoCount

输入。要存储在 perfResults 中的最大元素数。

returnedAlgoCount

输出。存储在 perfResults 中的输出元素数。

perfResults

输出。用户分配的数组,用于存储按计算时间升序排序的性能指标。

返回

CUDNN_STATUS_SUCCESS

查询成功。

CUDNN_STATUS_BAD_PARAM

满足以下至少一个条件

  • 参数 handlewDescdyDescconvDescdxDescperfResultsreturnedAlgoCount 之一为 NULL

  • 输入张量和输出张量的特征图数量不同。

  • 两个张量描述符或滤波器的 dataType 不同。

  • requestedAlgoCount 小于或等于 0

cudnnGetConvolutionBackwardDataAlgorithmMaxCount()#

此函数在 cuDNN 9.0 中已弃用。

此函数返回可以从 cudnnFindConvolutionBackwardDataAlgorithm()cudnnGetConvolutionForwardAlgorithm_v7() 返回的算法的最大数量。这是所有算法的总和加上当前设备支持的 Tensor Core 操作的所有算法的总和。

cudnnStatus_t cudnnGetConvolutionBackwardDataAlgorithmMaxCount(
    cudnnHandle_t       handle,
    int                 *count)

参数

handle

输入。先前创建的 cuDNN 上下文的句柄。

count

输出. 结果的最大算法数。

返回

CUDNN_STATUS_SUCCESS

函数执行成功。

CUDNN_STATUS_BAD_PARAM

提供的句柄未正确分配。

cudnnGetConvolutionBackwardDataWorkspaceSize()#

此函数在 cuDNN 9.0 中已弃用。

此函数返回用户需要分配的 GPU 内存工作区大小,以便能够使用指定的算法调用 cudnnConvolutionBackwardData()。分配的工作区将传递给例程 cudnnConvolutionBackwardData()。指定的算法可以是调用 cudnnGetConvolutionBackwardDataAlgorithm_v7() 的结果,也可以由用户任意选择。请注意,并非每个算法都适用于输入张量的每种配置和/或卷积描述符的每种配置。

cudnnStatus_t cudnnGetConvolutionBackwardDataWorkspaceSize(
    cudnnHandle_t                       handle,
    const cudnnFilterDescriptor_t       wDesc,
    const cudnnTensorDescriptor_t       dyDesc,
    const cudnnConvolutionDescriptor_t  convDesc,
    const cudnnTensorDescriptor_t       dxDesc,
    cudnnConvolutionBwdDataAlgo_t       algo,
    size_t                             *sizeInBytes)

参数

handle

输入。先前创建的 cuDNN 上下文的句柄。

wDesc

输入。先前初始化的滤波器描述符的句柄。

dyDesc

输入。先前初始化的输入微分张量描述符的句柄。

convDesc

输入。先前初始化的卷积描述符。

dxDesc

输入。指向先前初始化的输出张量描述符的句柄。

algo

输入. 指定所选卷积算法的枚举。

sizeInBytes

输出. 执行具有指定 algo 的前向卷积所需的工作区 GPU 内存量。

返回

CUDNN_STATUS_SUCCESS

查询成功。

CUDNN_STATUS_BAD_PARAM

满足以下至少一个条件

  • 输入张量和输出张量的特征图数量不同。

  • 两个张量描述符或滤波器的 dataType 不同。

CUDNN_STATUS_NOT_SUPPORTED

对于指定的算法,不支持张量描述符、滤波器描述符和卷积描述符的组合。

cudnnGetConvolutionBackwardFilterAlgorithm_v7()#

此函数在 cuDNN 9.0 中已弃用。

此函数作为启发式方法,用于为给定层规范的 cudnnConvolutionBackwardFilter() 获取最合适的算法。此函数将返回所有算法(包括 CUDNN_TENSOR_OP_MATHCUDNN_DEFAULT_MATH 版本的算法,其中 CUDNN_TENSOR_OP_MATH 可能可用),并按预期(基于内部启发式)相对性能排序,最快的算法是 perfResults 的索引 0。要彻底搜索最快的算法,请使用 cudnnFindConvolutionBackwardFilterAlgorithm()。可以通过 returnedAlgoCount 变量查询结果算法的总数。

cudnnStatus_t cudnnGetConvolutionBackwardFilterAlgorithm_v7(
    cudnnHandle_t                          handle,
    const cudnnTensorDescriptor_t          xDesc,
    const cudnnTensorDescriptor_t          dyDesc,
    const cudnnConvolutionDescriptor_t     convDesc,
    const cudnnFilterDescriptor_t          dwDesc,
    const int                              requestedAlgoCount,
    int                                   *returnedAlgoCount,
    cudnnConvolutionBwdFilterAlgoPerf_t   *perfResults)

参数

handle

输入。先前创建的 cuDNN 上下文的句柄。

xDesc

输入。先前初始化的输入张量描述符的句柄。

dyDesc

输入。先前初始化的输入微分张量描述符的句柄。

convDesc

输入。先前初始化的卷积描述符。

dwDesc

输入。先前初始化的滤波器描述符的句柄。

requestedAlgoCount

输入。要存储在 perfResults 中的最大元素数。

returnedAlgoCount

输出。存储在 perfResults 中的输出元素数。

perfResults

输出。用户分配的数组,用于存储按计算时间升序排序的性能指标。

返回

CUDNN_STATUS_SUCCESS

查询成功。

CUDNN_STATUS_BAD_PARAM

满足以下至少一个条件

  • 参数 handlexDescdyDescconvDescdwDescperfResultsreturnedAlgoCount 之一为 NULL

  • 输入张量和输出张量的特征图数量不同。

  • 两个张量描述符或滤波器的 dataType 不同。

  • requestedAlgoCount 小于或等于 0

cudnnGetConvolutionBackwardFilterAlgorithmMaxCount()#

此函数在 cuDNN 9.0 中已弃用。

此函数返回可以从 cudnnFindConvolutionBackwardFilterAlgorithm()cudnnGetConvolutionForwardAlgorithm_v7() 返回的算法的最大数量。这是所有算法的总和加上当前设备支持的 Tensor Core 操作的所有算法的总和。

cudnnStatus_t cudnnGetConvolutionBackwardFilterAlgorithmMaxCount(
    cudnnHandle_t       handle,
    int                 *count)

参数

handle

输入。先前创建的 cuDNN 上下文的句柄。

count

输出. 结果的最大算法计数。

返回

CUDNN_STATUS_SUCCESS

函数执行成功。

CUDNN_STATUS_BAD_PARAM

提供的句柄未正确分配。

cudnnGetConvolutionBackwardFilterWorkspaceSize()#

此函数在 cuDNN 9.0 中已弃用。

此函数返回用户需要分配的 GPU 内存工作区大小,以便能够使用指定的算法调用 cudnnConvolutionBackwardFilter()。分配的工作区将传递给例程 cudnnConvolutionBackwardFilter()。指定的算法可以是调用 cudnnGetConvolutionBackwardFilterAlgorithm_v7() 的结果,也可以由用户任意选择。请注意,并非每个算法都适用于输入张量的每种配置和/或卷积描述符的每种配置。

cudnnStatus_t cudnnGetConvolutionBackwardFilterWorkspaceSize(
    cudnnHandle_t                       handle,
    const cudnnTensorDescriptor_t       xDesc,
    const cudnnTensorDescriptor_t       dyDesc,
    const cudnnConvolutionDescriptor_t  convDesc,
    const cudnnFilterDescriptor_t       dwDesc,
    cudnnConvolutionBwdFilterAlgo_t     algo,
    size_t                             *sizeInBytes)

参数

handle

输入。先前创建的 cuDNN 上下文的句柄。

xDesc

输入。先前初始化的输入张量描述符的句柄。

dyDesc

输入。先前初始化的输入微分张量描述符的句柄。

convDesc

输入。先前初始化的卷积描述符。

dwDesc

输入。先前初始化的滤波器描述符的句柄。

algo

输入. 指定所选卷积算法的枚举。

sizeInBytes

输出. 执行具有指定 algo 的前向卷积所需的工作区 GPU 内存量。

返回

CUDNN_STATUS_SUCCESS

查询成功。

CUDNN_STATUS_BAD_PARAM

满足以下至少一个条件

  • 输入张量和输出张量的特征图数量不同。

  • 两个张量描述符或滤波器的 dataType 不同。

CUDNN_STATUS_NOT_SUPPORTED

对于指定的算法,不支持张量描述符、滤波器描述符和卷积描述符的组合。

cudnnGetConvolutionForwardAlgorithm_v7()#

此函数在 cuDNN 9.0 中已弃用。

此函数作为启发式方法,用于为给定层规范的 cudnnConvolutionForward() 获取最合适的算法。此函数将返回所有算法(包括 CUDNN_TENSOR_OP_MATHCUDNN_DEFAULT_MATH 版本的算法,其中 CUDNN_TENSOR_OP_MATH 可能可用),并按预期(基于内部启发式)相对性能排序,最快的算法是 perfResults 的索引 0。要彻底搜索最快的算法,请使用 cudnnFindConvolutionForwardAlgorithm()。可以通过 returnedAlgoCount 变量查询结果算法的总数。

cudnnStatus_t cudnnGetConvolutionForwardAlgorithm_v7(
    cudnnHandle_t                       handle,
    const cudnnTensorDescriptor_t       xDesc,
    const cudnnFilterDescriptor_t       wDesc,
    const cudnnConvolutionDescriptor_t  convDesc,
    const cudnnTensorDescriptor_t       yDesc,
    const int                           requestedAlgoCount,
    int                                *returnedAlgoCount,
    cudnnConvolutionFwdAlgoPerf_t      *perfResults)

参数

handle

输入。先前创建的 cuDNN 上下文的句柄。

xDesc

输入。先前初始化的输入张量描述符的句柄。

wDesc

输入. 先前初始化的卷积滤波器描述符的句柄。

convDesc

输入。先前初始化的卷积描述符。

yDesc

输入。指向先前初始化的输出张量描述符的句柄。

requestedAlgoCount

输入。要存储在 perfResults 中的最大元素数。

returnedAlgoCount

输出。存储在 perfResults 中的输出元素数。

perfResults

输出。用户分配的数组,用于存储按计算时间升序排序的性能指标。

返回

CUDNN_STATUS_SUCCESS

查询成功。

CUDNN_STATUS_BAD_PARAM

满足以下至少一个条件

  • 参数 handlexDescwDescconvDescyDescperfResultsreturnedAlgoCount 之一为 NULL

  • yDescwDesc 的维度与 xDesc 不同。

  • 张量 xDescyDescwDesc 的数据类型不完全相同。

  • xDescwDesc 中的特征图数量不同。

  • 张量 xDesc 的维度小于 3

  • requestedAlgoCount 小于或等于 0

cudnnGetConvolutionForwardAlgorithmMaxCount()#

此函数在 cuDNN 9.0 中已弃用。

此函数返回可以从 cudnnFindConvolutionForwardAlgorithm()cudnnGetConvolutionForwardAlgorithm_v7() 返回的算法的最大数量。这是所有算法的总和加上当前设备支持的 Tensor Core 操作的所有算法的总和。

cudnnStatus_t cudnnGetConvolutionForwardAlgorithmMaxCount(
    cudnnHandle_t   handle,
    int             *count)

参数

handle

输入。先前创建的 cuDNN 上下文的句柄。

count

输出. 结果的最大算法数。

返回

CUDNN_STATUS_SUCCESS

函数执行成功。

CUDNN_STATUS_BAD_PARAM

提供的句柄未正确分配。

cudnnGetConvolutionForwardWorkspaceSize()#

此函数在 cuDNN 9.0 中已弃用。

此函数返回用户需要分配的 GPU 内存工作区大小,以便能够使用指定的算法调用 cudnnConvolutionForward()。分配的工作区将传递给例程 cudnnConvolutionForward()。指定的算法可以是调用 cudnnGetConvolutionForwardAlgorithm_v7() 的结果,也可以由用户任意选择。请注意,并非每个算法都适用于输入张量的每种配置和/或卷积描述符的每种配置。

cudnnStatus_t cudnnGetConvolutionForwardWorkspaceSize(
    cudnnHandle_t   handle,
    const   cudnnTensorDescriptor_t         xDesc,
    const   cudnnFilterDescriptor_t         wDesc,
    const   cudnnConvolutionDescriptor_t    convDesc,
    const   cudnnTensorDescriptor_t         yDesc,
    cudnnConvolutionFwdAlgo_t               algo,
    size_t                                 *sizeInBytes)

参数

handle

输入。先前创建的 cuDNN 上下文的句柄。

xDesc

输入. 先前初始化的 x 张量描述符的句柄。

wDesc

输入。先前初始化的滤波器描述符的句柄。

convDesc

输入。先前初始化的卷积描述符。

yDesc

输入. 先前初始化的 y 张量描述符的句柄。

algo

输入. 指定所选卷积算法的枚举。

sizeInBytes

输出. 执行具有指定 algo 的前向卷积所需的工作区 GPU 内存量。

返回

CUDNN_STATUS_SUCCESS

查询成功。

CUDNN_STATUS_BAD_PARAM

满足以下至少一个条件

  • 参数 handlexDescwDescconvDescyDesc 之一为 NULL

  • 张量 yDescwDesc 的维度与 xDesc 不同。

  • 张量 xDescyDescwDesc 的数据类型不相同。

  • 张量 xDescwDesc 的特征图数量不同。

  • 张量 xDesc 的维度小于 3

CUDNN_STATUS_NOT_SUPPORTED

对于指定的算法,不支持张量描述符、滤波器描述符和卷积描述符的组合。

cudnnGetConvolutionGroupCount()#

此函数在 cuDNN 9.0 中已弃用。

此函数返回给定卷积描述符中指定的组计数。

cudnnStatus_t cudnnGetConvolutionGroupCount(
    cudnnConvolutionDescriptor_t    convDesc,
    int                            *groupCount)

返回

CUDNN_STATUS_SUCCESS

组计数已成功返回。

CUDNN_STATUS_BAD_PARAM

提供了无效的卷积描述符。

cudnnGetConvolutionMathType()#

此函数在 cuDNN 9.0 中已弃用。

此函数返回给定卷积描述符中指定的数学类型。

cudnnStatus_t cudnnGetConvolutionMathType(
    cudnnConvolutionDescriptor_t    convDesc,
    cudnnMathType_t                *mathType)

返回

CUDNN_STATUS_SUCCESS

数学类型已成功返回。

CUDNN_STATUS_BAD_PARAM

提供了无效的卷积描述符。

cudnnGetConvolutionNdDescriptor()#

此函数在 cuDNN 9.0 中已弃用。

此函数查询先前初始化的卷积描述符对象。

cudnnStatus_t cudnnGetConvolutionNdDescriptor(
    const cudnnConvolutionDescriptor_t  convDesc,
    int                                 arrayLengthRequested,
    int                                *arrayLength,
    int                                 padA[],
    int                                 filterStrideA[],
    int                                 dilationA[],
    cudnnConvolutionMode_t             *mode,
    cudnnDataType_t                    *dataType)

参数

convDesc

输入/输出. 先前创建的卷积描述符的句柄。

arrayLengthRequested

输入. 预期卷积描述符的维度。它也是数组 padAfilterStrideAdilationA 的最小大小,以便能够保存结果

arrayLength

输出. 卷积描述符的实际维度。

padA

输出. 维度至少为 arrayLengthRequested 的数组,该数组将填充来自提供的卷积描述符的填充参数。

filterStrideA

输出. 维度至少为 arrayLengthRequested 的数组,该数组将填充来自提供的卷积描述符的滤波器步幅。

dilationA

输出. 维度至少为 arrayLengthRequested 的数组,该数组将填充来自提供的卷积描述符的膨胀参数。

mode

输出. 提供的描述符的卷积模式。

datatype

输出. 提供的描述符的数据类型。

返回

CUDNN_STATUS_SUCCESS

查询成功。

CUDNN_STATUS_BAD_PARAM

满足以下至少一个条件

  • 描述符 convDescNIL

  • arrayLengthRequest 为负数。

CUDNN_STATUS_NOT_SUPPORTED

arrayLengthRequested 大于 CUDNN_DIM_MAX-2

cudnnGetConvolutionNdForwardOutputDim()#

此函数在 cuDNN 9.0 中已弃用。

此函数返回 nbDims-2-D 卷积产生的 Nd 张量的维度,给定卷积描述符、输入张量描述符和滤波器描述符。此函数可以帮助设置输出张量,并在启动实际卷积之前分配适当数量的内存。

cudnnStatus_t cudnnGetConvolutionNdForwardOutputDim(
    const cudnnConvolutionDescriptor_t  convDesc,
    const cudnnTensorDescriptor_t       inputTensorDesc,
    const cudnnFilterDescriptor_t       filterDesc,
    int                                 nbDims,
    int                                 tensorOuputDimA[])

输出张量的 (nbDims-2)-D 图像的每个维度的计算方式如下

outputDim = 1 + ( inputDim + 2*pad - (((filterDim-1)*dilation)+1) )/convolutionStride;

调用 cudnnConvolutionForward()cudnnConvolutionBackwardBias() 时,必须严格遵守此例程提供的维度。卷积例程不支持提供更小或更大的输出张量。

参数

convDesc

输入. 先前创建的卷积描述符的句柄。

inputTensorDesc

输入。先前初始化的张量描述符的句柄。

filterDesc

输入。先前初始化的滤波器描述符的句柄。

nbDims

输入. 输出张量的维度

tensorOuputDimA

输出. 维度为 nbDims 的数组,该数组在此例程退出时包含输出张量的大小

返回

CUDNN_STATUS_BAD_PARAM

满足以下至少一个条件

  • 参数 convDescinputTensorDescfilterDesc 之一为 NIL

  • 滤波器描述符 filterDesc 的维度与输入张量描述符 inputTensorDesc 的维度不同。

  • 卷积描述符的维度与输入张量描述符 inputTensorDesc-2 的维度不同。

  • 滤波器描述符 filterDesc 的特征图与输入张量描述符 inputTensorDesc 的特征图不同。

  • 膨胀滤波器 filterDesc 的大小大于输入张量的填充大小。

  • 输出数组的维度 nbDims 为负数或大于输入张量描述符 inputTensorDesc 的维度。

CUDNN_STATUS_SUCCESS

例程成功退出。

cudnnGetConvolutionReorderType()#

此函数在 cuDNN 9.0 中已弃用。

此函数从给定的卷积描述符中检索卷积重排序类型。

cudnnStatus_t cudnnGetConvolutionReorderType(
  cudnnConvolutionDescriptor_t convDesc,
  cudnnReorderType_t *reorderType);

参数

convDesc

输入. 应从中检索重排序类型的卷积描述符。

reorderType

输出. 检索到的重排序类型。有关更多信息,请参阅 cudnnReorderType_t

返回

CUDNN_STATUS_BAD_PARAM

此函数的输入之一无效。

CUDNN_STATUS_SUCCESS

重排序类型已成功检索。

cudnnGetFoldedConvBackwardDataDescriptors()#

此函数计算后向数据梯度的折叠描述符。它将数据描述符与卷积描述符一起作为输入,并计算折叠数据描述符和折叠变换描述符。这些描述符随后可用于执行实际的折叠变换。

cudnnStatus_t
cudnnGetFoldedConvBackwardDataDescriptors(const cudnnHandle_t handle,
                                          const cudnnFilterDescriptor_t filterDesc,
                                          const cudnnTensorDescriptor_t diffDesc,
                                          const cudnnConvolutionDescriptor_t convDesc,
                                          const cudnnTensorDescriptor_t gradDesc,
                                          const cudnnTensorFormat_t transformFormat,
                                          cudnnFilterDescriptor_t foldedFilterDesc,
                                          cudnnTensorDescriptor_t paddedDiffDesc,
                                          cudnnConvolutionDescriptor_t foldedConvDesc,
                                          cudnnTensorDescriptor_t foldedGradDesc,
                                          cudnnTensorTransformDescriptor_t filterFoldTransDesc,
                                          cudnnTensorTransformDescriptor_t diffPadTransDesc,
                                          cudnnTensorTransformDescriptor_t gradFoldTransDesc,
                                          cudnnTensorTransformDescriptor_t gradUnfoldTransDesc) ;

参数

handle

输入。先前创建的 cuDNN 上下文的句柄。

filterDesc

输入. 折叠前的滤波器描述符。

diffDesc

输入. 折叠前的 Diff 描述符。

convDesc

输入. 折叠前的卷积描述符。

gradDesc

输入. 折叠前的梯度描述符。

transformFormat

输入. 折叠的变换格式。

foldedFilterDesc

输出. 折叠的滤波器描述符。

paddedDiffDesc

输出. 填充的 Diff 描述符。

foldedConvDesc

输出. 折叠的卷积描述符。

foldedGradDesc

输出. 折叠的梯度描述符。

filterFoldTransDesc

输出. 滤波器的折叠变换描述符。

diffPadTransDesc

输出. Desc 的折叠变换描述符。

gradFoldTransDesc

输出. 梯度的折叠变换描述符。

gradUnfoldTransDesc

输出. 折叠梯度展开变换描述符。

返回

CUDNN_STATUS_SUCCESS

折叠描述符计算成功。

CUDNN_STATUS_BAD_PARAM

如果任何输入参数为 NULL,或者如果输入张量的维度超过 4。

CUDNN_STATUS_EXECUTION_FAILED

计算折叠描述符失败。

cudnnGetFusedOpsConstParamPackAttribute()#

此函数检索由 param 指针输入指向的描述符的值。描述符的类型由 paramLabel 输入的枚举值指示。

cudnnStatus_t cudnnGetFusedOpsConstParamPackAttribute(
  const cudnnFusedOpsConstParamPack_t constPack,
  cudnnFusedOpsConstParamLabel_t paramLabel,
  void *param,
  int *isNULL);

参数

constPack

输入. 不透明的 cudnnFusedOpsConstParamPack_t 结构,其中包含各种问题大小信息,例如张量的形状、布局和类型,以及卷积和激活的描述符,用于选定的 cudnnFusedOps_t 计算序列。

paramLabel

输入. 此 getter 函数可以检索多种类型的描述符。param 输入指向描述符本身,此输入指示 param 输入指向的描述符的类型。cudnnFusedOpsConstParamLabel_t 枚举类型允许选择描述符的类型。请参阅下面的 param 描述。

param

输入. 指向与应检索的描述符关联的主机内存的数据指针。此描述符的类型取决于 paramLabel 的值。对于给定的 paramLabel,如果 constPack 内的关联值设置为 NULL 或默认 NULL,则 cuDNN 会将 constPack 中的值或不透明结构复制到 param 指向的主机内存缓冲区。有关更多信息,请参阅 cudnnFusedOpsConstParamLabel_t 中的表。

isNULL

输入/输出. 用户必须在此字段中传递指向主机内存中整数的指针。如果与给定 paramLabel 关联的 constPack 中的值默认值为 NULL 或先前由用户设置为 NULL,则 cuDNN 会将非零值写入 isNULL 指向的位置。

返回

CUDNN_STATUS_SUCCESS

描述符值已成功检索。

CUDNN_STATUS_BAD_PARAM

如果 constPackparamisNULL 任何一个为 NULL;或者如果 paramLabel 无效。

cudnnGetFusedOpsVariantParamPackAttribute()#

此函数检索变量参数包描述符的设置。

cudnnStatus_t cudnnGetFusedOpsVariantParamPackAttribute(
  const cudnnFusedOpsVariantParamPack_t varPack,
  cudnnFusedOpsVariantParamLabel_t paramLabel,
  void *ptr);

参数

varPack

输入. 指向 cudnnFusedOps 变体参数包 (varPack) 描述符的指针。

paramLabel

输入. 缓冲区指针参数的类型(在 varPack 描述符中)。有关更多信息,请参阅 cudnnFusedOpsConstParamLabel_t。检索到的描述符值根据此类型而变化。

ptr

输出. 指向主机或设备内存的指针,此函数将在其中写入检索到的值。指针的数据类型以及主机/设备内存位置取决于 paramLabel 输入选择。有关更多信息,请参阅 cudnnFusedOpsVariantParamLabel_t

返回

CUDNN_STATUS_SUCCESS

描述符值已成功检索。

CUDNN_STATUS_BAD_PARAM

如果 varPackptr 任何一个为 NULL,或者如果 paramLabel 设置为无效值。

cudnnIm2Col()#

此函数在 cuDNN 9.0 中已弃用。

此函数构造执行 GEMM 卷积前向传递所需的 A 矩阵。

cudnnStatus_t cudnnIm2Col(
    cudnnHandle_t                   handle,
    cudnnTensorDescriptor_t         srcDesc,
    const void                      *srcData,
    cudnnFilterDescriptor_t         filterDesc,
    cudnnConvolutionDescriptor_t    convDesc,
    void                            *colBuffer)

此 A 矩阵的高度为 batch_size*y_height*y_width,宽度为 input_channels*filter_height*filter_width,其中

  • batch_sizesrcDesc 的第一个维度

  • y_height/y_widthcudnnGetConvolutionNdForwardOutputDim() 计算得出

  • input_channels 是 srcDesc 的第二个维度(当采用 NCHW 布局时)

  • filter_height/filter_widthwDesc 的第三个和第四个维度

A 矩阵以 HW 格式完全打包存储在 GPU 内存中。

参数

handle

输入。先前创建的 cuDNN 上下文的句柄。

srcDesc

输入。先前初始化的张量描述符的句柄。

srcData

输入. 指向与输入张量描述符关联的 GPU 内存的数据指针。

filterDesc

输入。先前初始化的滤波器描述符的句柄。

convDesc

输入. 先前初始化的卷积描述符的句柄。

colBuffer

输出. 指向存储输出矩阵的 GPU 内存的数据指针。

返回

CUDNN_STATUS_BAD_PARAM

srcDatacolBufferNULL

CUDNN_STATUS_NOT_SUPPORTED

srcDescfilterDescconvDesc 中的任何一个的 dataTypeCUDNN_DATA_INT8CUDNN_DATA_INT8x4CUDNN_DATA_INT8CUDNN_DATA_INT8x4,或者 convDescgroupCount 大于 1

CUDNN_STATUS_EXECUTION_FAILED

CUDA 内核执行失败。

CUDNN_STATUS_SUCCESS

输出数据数组已成功生成。

cudnnMakeFusedOpsPlan()#

此函数在 cuDNN 9.0 中已弃用。

此函数确定要执行的最佳内核,以及用户在通过 cudnnFusedOpsExecute() 实际执行融合操作之前应分配的工作区大小。

cudnnStatus_t cudnnMakeFusedOpsPlan(
  cudnnHandle_t handle,
  cudnnFusedOpsPlan_t plan,
  const cudnnFusedOpsConstParamPack_t constPack,
  size_t *workspaceSizeInBytes);

参数

handle

输入. 指向 cuDNN 库上下文的指针。

plan

输入. 指向先前创建和初始化的计划描述符的指针。

constPack

输入。指向常量参数包描述符的指针。

workspaceSizeInBytes

输出。用户应为此计划的执行分配的工作区大小量。

返回

CUDNN_STATUS_BAD_PARAM

如果任何输入为 NULL,或者如果 constPack 描述符中 cudnnFusedOps_t 的类型不受支持。

CUDNN_STATUS_SUCCESS

函数执行成功。

cudnnReorderFilterAndBias()#

此函数在 cuDNN 9.0 中已弃用。

此函数为数据类型为 CUDNN_DATA_INT8x32 和张量格式为 CUDNN_TENSOR_NCHW_VECT_C 的张量重新排序滤波器和偏置值。它可用于通过将重新排序操作与卷积分离来提高推理时间。

cudnnStatus_t cudnnReorderFilterAndBias(
  cudnnHandle_t handle,
  const cudnnFilterDescriptor_t filterDesc,
  cudnnReorderType_t reorderType,
  const void *filterData,
  void *reorderedFilterData,
  int reorderBias,
  const void *biasData,
  void *reorderedBiasData);

数据类型为 CUDNN_DATA_INT8x32(也暗示张量格式为 CUDNN_TENSOR_NCHW_VECT_C)的滤波器和偏置张量需要置换输出通道轴,以便利用 Tensor Core IMMA 指令。当卷积描述符的重新排序类型属性设置为 CUDNN_DEFAULT_REORDER 时,这在每个 cudnnConvolutionForward()cudnnConvolutionBiasActivationForward() 调用中完成。用户可以通过首先使用此调用重新排序滤波器和偏置张量,并使用设置为 CUDNN_NO_REORDER 的重新排序类型调用卷积前向 API,来避免重复的重新排序内核调用。

例如,多层神经网络中的卷积可能需要在每一层重新排序内核,这可能占用总推理时间的很大一部分。使用此函数,可以对滤波器和偏置数据执行一次重新排序。之后是对多层执行卷积操作,从而提高推理时间。

参数

handle

输入。先前创建的 cuDNN 上下文的句柄。

filterDesc

输入。内核数据集的描述符。

reorderType

输入。设置为执行或不执行重新排序。有关更多信息,请参阅 cudnnReorderType_t

filterData

输入。指向设备内存中滤波器(内核)数据位置的指针。

reorderedFilterData

输出。指向设备内存中位置的指针,重新排序的滤波器数据将由此函数写入到该位置。此张量具有与 filterData 相同的维度。

reorderBias

输入。如果 > 0,则也重新排序 biasData。如果 <= 0,则不对 biasData 执行重新排序操作。

biasData

输入。指向设备内存中偏置数据位置的指针。

reorderedBiasData

输出。指向设备内存中位置的指针,重新排序的 biasData 将由此函数写入到该位置。此张量具有与 biasData 相同的维度。

返回

CUDNN_STATUS_SUCCESS

重新排序成功。

CUDNN_STATUS_EXECUTION_FAILED

滤波器数据或 biasData 的重新排序失败。

CUDNN_STATUS_BAD_PARAM

句柄、滤波器描述符、滤波器数据或重新排序的数据为 NULL。或者,如果请求偏置重新排序 (reorderBias > 0),则 biasData 或重新排序的 biasDataNULL。如果滤波器维度大小不是 4,也可能返回此状态。

CUDNN_STATUS_NOT_SUPPORTED

滤波器描述符数据类型不是 CUDNN_DATA_INT8x32;滤波器描述符张量不是矢量化布局 (CUDNN_TENSOR_NCHW_VECT_C)。

cudnnSetConvolution2dDescriptor()#

此函数在 cuDNN 9.0 中已弃用。

此函数将先前创建的卷积描述符对象初始化为 2D 互相关。此函数假定张量和滤波器描述符对应于前向卷积路径,并检查其设置是否有效。只要它对应于同一层,同一个卷积描述符就可以在后向路径中重复使用。

cudnnStatus_t cudnnSetConvolution2dDescriptor(
    cudnnConvolutionDescriptor_t    convDesc,
    int                             pad_h,
    int                             pad_w,
    int                             u,
    int                             v,
    int                             dilation_h,
    int                             dilation_w,
    cudnnConvolutionMode_t          mode,
    cudnnDataType_t                 computeType)

参数

convDesc

输入/输出. 先前创建的卷积描述符的句柄。

pad_h

输入。零填充高度:隐式连接到输入图像顶部和底部的零行数。

pad_w

输入。零填充宽度:隐式连接到输入图像左侧和右侧的零列数。

u

输入。垂直滤波器步幅。

v

输入。水平滤波器步幅。

dilation_h

输入。滤波器高度膨胀。

dilation_w

输入。滤波器宽度膨胀。

mode

输入。在 CUDNN_CONVOLUTIONCUDNN_CROSS_CORRELATION 之间选择。

computeType

输入。计算精度。

返回

CUDNN_STATUS_SUCCESS

对象设置成功。

CUDNN_STATUS_BAD_PARAM

满足以下至少一个条件

  • 描述符 convDescNIL

  • 参数 pad_hpad_w 之一严格为负数。

  • 参数 uv 之一为负数或零。

  • 参数 dilation_hdilation_w 之一为负数或零。

  • 参数模式具有无效的枚举值。

cudnnSetConvolutionGroupCount()#

此函数在 cuDNN 9.0 中已弃用。

此函数允许用户指定要在关联卷积中使用的组数。

cudnnStatus_t cudnnSetConvolutionGroupCount(
    cudnnConvolutionDescriptor_t    convDesc,
    int                             groupCount)

返回

CUDNN_STATUS_SUCCESS

组计数设置成功。

CUDNN_STATUS_BAD_PARAM

提供了无效的卷积描述符。

cudnnSetConvolutionMathType()#

此函数在 cuDNN 9.0 中已弃用。

此函数允许用户指定是否允许在与给定卷积描述符关联的库例程中使用张量运算。

cudnnStatus_t cudnnSetConvolutionMathType(
    cudnnConvolutionDescriptor_t    convDesc,
    cudnnMathType_t                 mathType)

返回

CUDNN_STATUS_SUCCESS

数学类型设置成功。

CUDNN_STATUS_BAD_PARAM

提供了无效的卷积描述符或指定了无效的数学类型。

cudnnSetConvolutionNdDescriptor()#

此函数在 cuDNN 9.0 中已弃用。

此函数将先前创建的通用卷积描述符对象初始化为 Nd 互相关。只要它对应于同一层,同一个卷积描述符就可以在后向路径中重复使用。卷积计算将在指定的 dataType 中完成,这可能与输入/输出张量不同。

cudnnStatus_t cudnnSetConvolutionNdDescriptor(
    cudnnConvolutionDescriptor_t    convDesc,
    int                             arrayLength,
    const int                       padA[],
    const int                       filterStrideA[],
    const int                       dilationA[],
    cudnnConvolutionMode_t          mode,
    cudnnDataType_t                 dataType)

参数

convDesc

输入/输出. 先前创建的卷积描述符的句柄。

arrayLength

输入。卷积的维度。

padA

输入。维度为 arrayLength 的数组,包含每个维度的零填充大小。对于每个维度,填充表示在该维度的每个元素的开头和结尾隐式连接的额外零的数量。

filterStrideA

输入。维度为 arrayLength 的数组,包含每个维度的滤波器步幅。对于每个维度,滤波器步幅表示滑动以到达下一个点的滤波窗口的下一个起点的元素数。

dilationA

输入。维度为 arrayLength 的数组,包含每个维度的膨胀因子。

mode

输入。在 CUDNN_CONVOLUTIONCUDNN_CROSS_CORRELATION 之间选择。

datatype

输入。选择将在其中完成计算的数据类型。

注意

cudnnSetConvolutionNdDescriptor() 中的 CUDNN_DATA_HALF 不建议使用,因为它已知对训练的任何实际用例都没有用处,并且在未来的 cuDNN 版本中将被阻止。建议在 cudnnSetTensorNdDescriptor() 中对输入张量使用 CUDNN_DATA_HALF,并在 cudnnSetConvolutionNdDescriptor() 中对 HALF_CONVOLUTION_BWD_FILTER 使用 CUDNN_DATA_FLOAT,这在许多知名的深度学习框架中与自动混合精度 (AMP) 训练一起使用。

返回

CUDNN_STATUS_SUCCESS

对象设置成功。

CUDNN_STATUS_BAD_PARAM

满足以下至少一个条件

  • 描述符 convDescNIL

  • arrayLengthRequest 为负数。

  • 枚举模式具有无效值。

  • 枚举 datatype 具有无效值。

  • padA 的元素之一严格为负数。

  • strideA 的元素之一为负数或零。

  • dilationA 的元素之一为负数或零。

CUDNN_STATUS_NOT_SUPPORTED

满足以下至少一个条件

  • arrayLengthRequest 大于 CUDNN_DIM_MAX

cudnnSetConvolutionReorderType()#

此函数在 cuDNN 9.0 中已弃用。

此函数为给定的卷积描述符设置卷积重新排序类型。

cudnnStatus_t cudnnSetConvolutionReorderType(
  cudnnConvolutionDescriptor_t convDesc,
  cudnnReorderType_t reorderType);

参数

convDesc

输入。要为其设置重新排序类型的卷积描述符。

reorderType

输入。将重新排序类型设置为此值。有关更多信息,请参阅 cudnnReorderType_t

返回

CUDNN_STATUS_BAD_PARAM

提供的重新排序类型不受支持。

CUDNN_STATUS_SUCCESS

重新排序类型设置成功。

cudnnSetFusedOpsConstParamPackAttribute()#

此函数在 cuDNN 9.0 中已弃用。

此函数设置由 param 指针输入指向的描述符。要设置的描述符类型由 paramLabel 输入的枚举值指示。

cudnnStatus_t cudnnSetFusedOpsConstParamPackAttribute(
  cudnnFusedOpsConstParamPack_t constPack,
  cudnnFusedOpsConstParamLabel_t paramLabel,
  const void *param);

参数

constPack

输入。不透明的 cudnnFusedOpsConstParamPack_t 结构,其中包含各种问题大小信息,例如张量的形状、布局和类型、卷积和激活的描述符,以及卷积和激活等操作的设置。

paramLabel

输入。可以通过此 setter 函数设置多种类型的描述符。param 输入指向描述符本身,此输入指示 param 输入指向的描述符的类型。cudnnFusedOpsConstParamPack_t 枚举类型允许选择描述符的类型。

param

输入。与特定描述符关联的主机内存的数据指针。描述符的类型取决于 paramLabel 的值。有关更多信息,请参阅 cudnnFusedOpsConstParamPack_t 中的表格。

如果此指针设置为 NULL,则 cuDNN 库将记录为 NULL。否则,此指针指向的值(意味着,值或下面的不透明结构)将在 cudnnSetFusedOpsConstParamPackAttribute() 操作期间复制到 constPack 中。

返回

CUDNN_STATUS_SUCCESS

描述符设置成功。

CUDNN_STATUS_BAD_PARAM

如果 constPackNULL,或者如果 paramLabelconstPack 的操作设置无效。

cudnnSetFusedOpsVariantParamPackAttribute()#

此函数在 cuDNN 9.0 中已弃用。

此函数设置可变参数包描述符。

cudnnStatus_t cudnnSetFusedOpsVariantParamPackAttribute(
  cudnnFusedOpsVariantParamPack_t varPack,
  cudnnFusedOpsVariantParamLabel_t paramLabel,
  void *ptr);

参数

varPack

输入. 指向 cudnnFusedOps 变体参数包 (varPack) 描述符的指针。

paramLabel

输入。此函数设置缓冲区指针参数(在 varPack 描述符中)的类型。有关更多信息,请参阅 cudnnFusedOpsConstParamLabel_t

ptr

输入。指向主机或设备内存的指针,指向要将描述符参数设置为的值。指针的数据类型以及主机/设备内存位置取决于 paramLabel 输入选择。有关更多信息,请参阅 cudnnFusedOpsVariantParamLabel_t

返回

CUDNN_STATUS_BAD_PARAM

如果 varPackNULL 或如果 paramLabel 设置为不受支持的值。

CUDNN_STATUS_SUCCESS 描述符设置成功。