5. mcdnn_cnn_train

此实体包含在训练时需要用到的卷积神经网络相关的所有函数。mcdnn_cnn_train库依赖于mcdnn_ops_infer,mcdnn_ops_train和mcdnn_adv_infer。 有关后端数据和描述符类型,请参见mcdnn_backend。

5.1. 数据类型参考

5.1.1. 不透明结构类型的指针

5.1.1.1. mcdnnFusedOpsConstParamPack_t

mcdnnFusedOpsConstParamPack_t是指向不透明结构的指针,该结构包含mcdnnFusedOps常量参数描述。使用mcdnnCreateFusedOpsConstParamPack()函数创建一个此结构的实例,使用mcdnnDestroyFusedOpsConstParamPack()函数销毁已创建的描述符。

5.1.1.2. mcdnnFusedOpsPlan_t

mcdnnFusedOpsPlan_t是指向不透明结构的指针,该结构包含mcdnnFusedOpsPlan描述。此描述符包含计划信息,包括问题类型和大小,应运行哪些内核以及内部工作空间分区。使用mcdnnCreateFusedOptionsPlan()函数创建一个此结构的实例,使用mcdnnDestroyFusedOptionsPlan()函数销毁已创建的描述符。

5.1.1.3. mcdnnFusedOpsVariantParamPack_t

mcdnnFusedOpsVariantParamPack_t是指向不透明结构的指针,该结构包含mcdnnFusedOps变量参数描述。使用mcdnnCreateFusedOpsVariantParamPack()函数创建一个此结构的实例,使用函数mcdnnDestroyFusedOpsVariantParamPack()销毁已创建的描述符。

5.1.2. 结构类型

5.1.2.1. mcdnnConvolutionBwdFilterAlgoPerf_t

mcdnnConvolutionBwdFilterAlgoPerf_t是一个结构,包含由mcdnnFindConvolutionBackwardFilterAlgorithm()返回的执行结果或由mcdnnGetConvolutionBackwardFilterAlgorithm_v7()返回的启发式结果。

数据成员(Data Members)

mcdnnConvolutionBwdFilterAlgo_t algo

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

mcdnnStatus_t status

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

  • MCDNN_STATUS_ALLOC_FAILED 如果工作空间分配期间发生任何错误或提供的工作空间不足。

  • MCDNN_STATUS_INTERNAL_ERROR 如果计算期间或工作空间释放期间出现任何错误。

  • 否则,此状态将是mcdnnConvolutionBackwardFilter()的返回状态。

float time

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

size_t memory

workspace大小(以字节为单位)。

mcdnnDeterminism_t determinism

算法的确定性。

mcdnnMathType_t mathType

提供给算法的数学类型。

int reserved[3]

为后续属性预留的空间。

5.1.3. 枚举类型

5.1.3.1. mcdnnFusedOps_t

mcdnnFusedOps_t是一种枚举类型,用于选择要在融合运算中执行的特定计算序列。

成员与描述

MCDNN_FUSED_SCALE_BIAS_ACTIVATION_CONV_BNSTATS = 0

在per-channel基础上,它按以下顺序执行这些操作:缩放,添加bias,激活,卷积和生成batchnorm统计信息。

MCDNN_FUSED_SCALE_BIAS_ACTIVATION_WGRAD = 1

在per-channel基础上,它按以下顺序执行这些操作:缩放,添加bias,激活,卷积反向权重和生成batchnorm统计信息。

MCDNN_FUSED_BN_FINALIZE_STATISTICS_TRAINING = 2

从ySum,ySqSum和已学习的scale及bias计算等效scale和bias。 (可选)更新运行统计信息并生成已保存的统计信息。

MCDNN_FUSED_BN_FINALIZE_STATISTICS_INFERENCE = 3

从已学习的运行统计信息、scale、bias计算等效scale和bias。

MCDNN_FUSED_CONV_SCALE_BIAS_ADD_ACTIVATION = 4

在per-channel基础上,它按以下顺序执行这些操作:卷积,缩放,添加bias,使用另一个张量进行元素级相加,激活。

MCDNN_FUSED_SCALE_BIAS_ADD_ACTIVATION_GEN_BITMASK = 5

在per-channel基础上,它按以下顺序执行这些操作:在一个张量上进行缩放和bias,在第二个张量上进行缩放和bias,对这两个张量进行元素级相加,在得到的张量上执行激活并生成激活位掩码。

MCDNN_FUSED_DACTIVATION_FORK_DBATCHNORM = 6

在per-channel基础上,它按以下顺序执行这些操作:反向激活,fork (即,写出残差分支的梯度),反向BN。

5.1.3.2. mcdnnFusedOpsConstParamLabel_t

mcdnnFusedOpsConstParamLabel_t是一种枚举类型,用于选择mcdnnFusedOps描述符的类型。更多信息,参见mcdnnSetFusedOpsConstParamPackAttribute()。

typedef enum {
MCDNN_PARAM_XDESC                           = 0,
MCDNN_PARAM_XDATA_PLACEHOLDER               = 1,
MCDNN_PARAM_BN_MODE                         = 2,
MCDNN_PARAM_BN_EQSCALEBIAS_DESC             = 3,
MCDNN_PARAM_BN_EQSCALE_PLACEHOLDER          = 4,
MCDNN_PARAM_BN_EQBIAS_PLACEHOLDER           = 5,
MCDNN_PARAM_ACTIVATION_DESC                 = 6,
MCDNN_PARAM_CONV_DESC                       = 7,
MCDNN_PARAM_WDESC                           = 8,
MCDNN_PARAM_WDATA_PLACEHOLDER               = 9,
MCDNN_PARAM_DWDESC                          = 10,
MCDNN_PARAM_DWDATA_PLACEHOLDER              = 11,
MCDNN_PARAM_YDESC                           = 12,
MCDNN_PARAM_YDATA_PLACEHOLDER               = 13,
MCDNN_PARAM_DYDESC                          = 14,
MCDNN_PARAM_DYDATA_PLACEHOLDER              = 15,
MCDNN_PARAM_YSTATS_DESC                     = 16,
MCDNN_PARAM_YSUM_PLACEHOLDER                = 17,
MCDNN_PARAM_YSQSUM_PLACEHOLDER              = 18,
MCDNN_PARAM_BN_SCALEBIAS_MEANVAR_DESC       = 19,
MCDNN_PARAM_BN_SCALE_PLACEHOLDER            = 20,
MCDNN_PARAM_BN_BIAS_PLACEHOLDER             = 21,
MCDNN_PARAM_BN_SAVED_MEAN_PLACEHOLDER       = 22,
MCDNN_PARAM_BN_SAVED_INVSTD_PLACEHOLDER     = 23,
MCDNN_PARAM_BN_RUNNING_MEAN_PLACEHOLDER     = 24,
MCDNN_PARAM_BN_RUNNING_VAR_PLACEHOLDER      = 25,
MCDNN_PARAM_ZDESC                           = 26,
MCDNN_PARAM_ZDATA_PLACEHOLDER               = 27,
MCDNN_PARAM_BN_Z_EQSCALEBIAS_DESC           = 28,
MCDNN_PARAM_BN_Z_EQSCALE_PLACEHOLDER        = 29,
MCDNN_PARAM_BN_Z_EQBIAS_PLACEHOLDER         = 30,
MCDNN_PARAM_ACTIVATION_BITMASK_DESC         = 31,
MCDNN_PARAM_ACTIVATION_BITMASK_PLACEHOLDER  = 32,
MCDNN_PARAM_DXDESC                          = 33,
MCDNN_PARAM_DXDATA_PLACEHOLDER              = 34,
MCDNN_PARAM_DZDESC                          = 35,
MCDNN_PARAM_DZDATA_PLACEHOLDER              = 36,
MCDNN_PARAM_BN_DSCALE_PLACEHOLDER           = 37,
MCDNN_PARAM_BN_DBIAS_PLACEHOLDER            = 38,
} mcdnnFusedOpsConstParamLabel_t;

mcdnnFusedOpsConstParamLabel_t表格说明

使用的简称

含义

Setter

mcdnnSetFusedOpsConstParamPackAttribute()

Getter

mcdnnGetFusedOpsConstParamPackAttribute()

X_PointerPlaceHolder_t

mcdnnFusedOpsPointerPlaceHolder_t

属性 列中的 X_ 前缀

枚举数名称中的 MCDNN_PARAM_

mcdnnFusedOpsConstParamLabel_t中的

MCDNN_FUSED_SCALE_BIAS_ACTIVATION_CONV_BNSTATS

属性

Setter中期望传入 的描述符类型

说明

默认值

X_XDESC

Setter中, *param 应为 xDesc,一个 指向已初始化的 mcdnnTensor Descriptor_t 的指针

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

NULL

X_XDATA _PLACEHOLDER

Setter中, *param 应为 一个指针,指向 已初始化的 X_Pointer PlaceHolder_t

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

MCDNN_PTR_ NULL

X_BN_MODE

Setter中, *param 应为 一个指针,指向 已初始化的 mcdnnBatchNorm Mode_t

描述scale,bias ,统计数据的操作 模式

mcDNN 只支持 MCDNN_BATCHNORM _SPATIALMCDNN_BATCHNORM _SPATIAL_ PERSISTENT, 即 scale,bias, 统计数据均为 per-channel模式

MCDNN_ BATCHNORM_PER_ ACTIVATION

X_BN_EQS CALEBIAS_DESC

Setter中, *param 应为 一个指针,指向 已初始化的 mcdnnTensor Descriptor_t*

张量描述符, 描述batchNorm 等效scale和bias 张量的大小, 布局,数据类型

形状必须与 MCDNN_PARAM_BN _MODE 中指定 的模式匹配

如果设置为 NULL,scale 和bias操作均会 变为NoP

NULL

X_BN_EQSCALE_ PLACEHOLDER

Setter中, *param 应为 一个指针,指向 已初始化的 X_Pointer PlaceHolder_t

描述 VariantParamPack 中 batchNorm 等效scale指针 是否为NULL

如果不是,则为用 户允许的指针对齐

如果设置为 MCDNN_PTR_NULL ,则scale 操作会变为NoP

MCDNN_PTR_ NULL

X_BN_EQBIAS_ PLACEHOLDER

Setter中, *param 应为 一个指针,指向 已初始化的 X_Pointer PlaceHolder_t

描述 VariantParam Pack中batchNorm 等效bias指针是否 为NULL

如果不是,则为用 户允许的指针对齐

如果设置为 MCDNN_PTR_NULL ,则bias 操作会变为NoP

MCDNN_PTR_ NULL

X_ACTIVATION_ DESC

Setter中, *param 应为 一个指针,指向 已初始化的 mcdnnActivation Descriptor_t

描述激活操作

mcDNN 只支持 MCDNN_ACTIVATION _RELUMCDNN_ACTIVATION _IDENTITY 激活模式

若设为 NULL 或激活模式设为 MCDNN_ACTIVATION _IDENTITY, 则op序列中的激活 操作会变为NoP

NULL

X_CONV_DESC

Setter中, *param 应为 一个指针,指向已 初始化的 mcdnn Convolution Descriptor_t

描述卷积操作

NULL

X_WDESC

Setter中, *param 应为 一个指针,指向已 初始化的 mcdnnFilter Descriptor_t

卷积核描述符, 描述 w (卷积核)张量 的大小,布局, 数据类型

NULL

X_WDATA_ PLACEHOLDER

Setter中, *param 应为 一个指针,指向 已初始化的 X_Pointer PlaceHolder_t

描述 VariantParamPack 中 w (卷积核) 张量指针是否为 NULL

如果不是,则为用 户允许的指针对齐

MCDNN_PTR_ NULL

X_YDESC

Setter中, *param 应为 一个指针,指向 已初始化的 mcdnnTensor Descriptor_t

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

NULL

X_YDATA_ PLACEHOLDER

Setter中, *param 应为 一个指针,指向 已初始化的 X_Pointer PlaceHolder_t

描述 VariantParamPack 中 y (输出) 张量指针是否为 NULL

如果不是,则为用 户允许的指针对齐

MCDNN_PTR_ NULL

X_YSTATS_DESC

Setter中, *param 应为 一个指针,指向 已初始化的 mcdnnTensor Descriptor_t

张量描述符, 描述 y 的和与 y 平方和的张量 大小,布局, 数据类型

形状必须与 MCDNN_PARAM_BN _MODE 中指定的 模式匹配

若设置为NULL, y 统计数据生成 操作会变为NoP

NULL

X_YSUM_ PLACEHOLDER

Setter中, *param 应为 一个指针,指向 已初始化的 X_Pointer PlaceHolder_t

描述 VariantParamPack 中 y 的和的指针 是否为NULL

如果不是,则为用 户允许的指针对齐

如果设置为 MCDNN _PTR_NULL, y 统计数据生成 操作会变为NoP

MCDNN_PTR_ NULL

X_YSQSUM_ PLACEHOLDER

Setter中, *param 应为 一个指针,指向 已初始化的 X_Pointer PlaceHolder_t

描述 VariantParam Pack 中 y 平方和 的指针是否为 NULL

如果不是,则为用 户允许的指针对齐

如果设置为 MCDNN _PTR_NULL,y 统计数据生成 操作会变为NoP

MCDNN_PTR _NULL

备注

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

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

mcdnnFusedOpsConstParamLabel_t完全融合快速路径(正向)的条件

参数

条件

MCDNN_PARAM_XDESC

MCDNN_PARAM_XDATA_PLACEHOLDER

张量为4维

数据类型为 MCDNN_DATA_HALF

布局为 NHWC 完全压缩格式

对齐为 MCDNN_PTR_16B_ALIGNED

张量的 C 维为8的倍数

MCDNN_PARAM_BN_EQSCALEBIAS_DESC

MCDNN_PARAM_BN_EQSCALE_PLACEHOLDER

MCDNN_PARAM_BN_EQBIAS_PLACEHOLDER

scale或bias操作不是NoP: 张量为4维,形状为1xCx1x1

数据类型为 MCDNN_DATA_HALF

布局为完全压缩格式

对齐为 MCDNN_PTR_16B_ALIGNED

MCDNN_PARAM_CONV_DESC

MCDNN_PARAM_WDESC

MCDNN_PARAM_WDATA_PLACEHOLDER

卷积描述符的 mode 需要设为 MCDNN_CROSS_CORRELATION

卷积描述符的 dataType 需要设为 MCDNN_DATA_FLOAT

卷积描述符的 dilationA 为(1,1)

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

卷积描述符的 mathType 需要设为 MCDNN_TENSOR_OP_MATHMCDNN_TENSOR_OP_MATH_ALLOW _CONVERSION

卷积核布局为 NHWC

卷积核数据类型为 MCDNN_DATA_HALF

卷积核的 K 维为 32 的倍数

卷积核的 RxS 尺寸为 1x1 或 3x3

若卷积核的 RxS 尺寸为 1x1,卷积 描述符的 padA 需为(0,0), filterStrideA 需为(1,1)

卷积核的对齐为 MCDNN_PTR_16B_ALIGNED

MCDNN_PARAM_YDESC

MCDNN_PARAM_YDATA_PLACEHOLDER

张量为4维

数据类型为 MCDNN_DATA_HALF

布局为 NHWC 完全压缩格式

对齐为 MCDNN_PTR_16B_ALIGNED

MCDNN_PARAM_YSTATS_DESC

MCDNN_PARAM_YSUM_PLACEHOLDER

MCDNN_PARAM_YSQSUM_PLACEHOLDER

统计数据生成操作不是NoP: 张量为4维,形状为1xKx1x1

数据类型为 MCDNN_DATA_FLOAT

布局为完全压缩

对齐为 MCDNN_PTR_16B_ALIGNED

mcdnnFusedOpsConstParamLabel_t中的

MCDNN_FUSED_SCALE_BIAS_ACTIVATION_WGRAD

属性

Setter中期望传入 的描述符类型

说明

默认值

X_XDESC

Setter中, *param 应为 xDesc, 一个指针,指向 已初始化的 mcdnnTensor Descriptor_t

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

NULL

X_XDATA_ PLACEHOLDER

Setter中, *param 应为 一个指针,指向 已初始化的 X_Pointer PlaceHolder_t

描述 VariantParamPack 中 xData 指针是否为NULL,

如果不是,则为用 户允许的指针对齐

MCDNN_PTR_ NULL

X_BN_MODE

Setter中, *param 应为 一个指针,指向 已初始化的 mcdnnBatchNorm Mode_t

描述scale,bias ,统计数据的操作 模式

mcDNN 只支持 MCDNN_BATCHNORM _SPATIAL 和 MCDNN_BATCHNORM _SPATIAL _PERSISTENT, 即scale,bias, 统计数据均为 per-channel模式

MCDNN _BATCHNORM_PER_ ACTIVATION

X_BN _EQSCALEBIAS _DESC

Setter中, *param 应为 一个指针,指向 已初始化的 mcdnnTensor Descriptor_t

张量描述符, 描述batchNorm 等效scale和bias 张量的大小, 布局,数据类型

形状必须与 MCDNN_PARAM_BN _MODE 中指定 的模式匹配

如果设置为 NULL,scale 和bias操作均会 变为NoP

NULL

X_BN_EQSCALE_ PLACEHOLDER

Setter中, *param 应为 一个指针,指向 已初始化的 X_Pointer PlaceHolder_t

描述 VariantParamPack 中batchNorm 等效scale指针 是否为NULL

如果不是,则为用 户允许的指针对齐

如果设置为 MCDNN_PTR_NULL, 则scale操作会 变为NoP

MCDNN_PTR_ NULL

X_BN_EQBIAS_ PLACEHOLDER

Setter中, *param 应为 一个指针,指向 已初始化的 X_Pointer PlaceHolder_t

描述 VariantParamPack 中batchNorm 等效bias指针是否 为NULL

如果不是,则为用 户允许的指针对齐

如果设置为 MCDNN_PTR_NULL, 则bias操作会 变为NoP

MCDNN_PTR_ NULL

X_ACTIVATION_ DESC

Setter中, *param 应为 一个指针,指向 已初始化的 mcdnnActivation Descriptor_t

描述激活操作

mcDNN 只支持 MCDNN_ACTIVATION _RELU 和 MCDNN_ACTIVATION _IDENTITY 激活模式

若设为 NULL 或激活模式设为 MCDNN_ACTIVATION _IDENTITY, 则op序列中的 激活操作会变为 NoP

NULL

X_CONV_DESC

Setter中, *param 应为 一个指针,指向已 初始化的 mcdnnConvolution Descriptor_t

描述卷积操作

NULL

X_DWDESC

Setter中, *param 应为 一个指针,指向已 初始化的 mcdnnFilter Descriptor_t

卷积核描述符, 描述 dw (卷积核 梯度输出) 张量的大小, 布局,数据类型

NULL

X_DWDATA_ PLACEHOLDER

Setter中, *param 应为 一个指针,指向 已初始化的 X_Pointer PlaceHolder_t

描述 VariantParamPack 中 dw (卷积核 梯度输出) 张量 指针是否为NULL

如果不是,则为用 户允许的指针对齐

MCDNN_PTR_ NULL

X_DYDESC

Setter中, *param 应为 一个指针,指向 已初始化的 mcdnnTensor Descriptor_t

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

NULL

X_YDATA_ PLACEHOLDER

Setter中, *param 应为 一个指针,指向 已初始化的 X_Pointer PlaceHolder_t

描述 VariantParamPack 中 dy (梯度输入)张量 指针是否为NULL

如果不是,则为用 户允许的指针对齐

MCDNN_PTR_ NULL

备注

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

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

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

参数

条件

MCDNN_PARAM_XDESC

MCDNN_PARAM_XDATA_PLACEHOLDER

张量为4维

数据类型为 MCDNN_DATA_HALF

布局为 NHWC 完全压缩格式

对齐为 MCDNN_PTR_16B_ALIGNED

张量的 C 维为8的倍数

MCDNN_PARAM_BN_EQSCALEBIAS_DESC

MCDNN_PARAM_BN_EQSCALE_PLACEHOLDER

MCDNN_PARAM_BN_EQBIAS_PLACEHOLDER

scale或bias操作不是NoP: 张量为4维,形状为1xCx1x1

数据类型为 MCDNN_DATA_HALF

布局为完全压缩

对齐为 MCDNN_PTR_16B_ALIGNED

MCDNN_PARAM_CONV_DESC

MCDNN_PARAM_DWDESC

MCDNN_PARAM_DWDATA_PLACEHOLDER

卷积描述符的 mode 需要设为 MCDNN_CROSS_CORRELATION

卷积描述符的 dataType 需要设为 MCDNN_DATA_FLOAT

卷积描述符的 dilationA 为(1,1)

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

卷积描述符的 mathType 需要设为 MCDNN_TENSOR_OP_MATH 或

MCDNN_TENSOR_OP_MATH_ALLOW _CONVERSION

卷积核布局为 NHWC

卷积核数据类型为 MCDNN_DATA_HALF

卷积核的 K 维为 32 的倍数

卷积核的 RxS 尺寸为 1x1 或 3x3

若卷积核的 RxS 尺寸为 1x1,卷积 描述符的 padA 需为(0,0), filterStrideA 需为(1,1)

卷积核的对齐为 MCDNN_PTR_16B_ALIGNED

MCDNN_PARAM_DYDESC

MCDNN_PARAM_DYDATA_PLACEHOLDER

张量为4维

数据类型为 MCDNN_DATA_HALF

布局为 NHWC 完全压缩格式

对齐为 MCDNN_PTR_16B_ALIGNED

mcdnnFusedOpsConstParamLabel_t中的

MCDNN_FUSED_BN_FINALIZE_STATISTICS_TRAINING

适用于mcdnnFusedOp_t中MCDNN_FUSED_BN_FINALIZE_STATISTICS_TRAINING属性

属性

Setter中期望传入 的描述符类型

说明

默认值

X_BN_MODE

Setter中, *param 应为 一个指针,指向 已初始化的 mcdnnBatchNorm Mode_t

描述scale,bias ,统计数据的操作 模式

mcDNN 只支持 MCDNN_ BATCHNORM_ SPATIALMCDNN_BATCHNOR M_SPATIAL _PERSISTENT, 即scale,bias, 统计数据均为 per-channel模式

MCDNN _BATCHNORM_PER _ACTIVATION

X_YSTATS _DESC

Setter中, *param 应为 一个指针,指向 已初始化的 mcdnnTensor Descriptor_t

张量描述符, 描述 y 的和与 y 平方和的张量 大小,布局, 数据类型

形状必须与 MCDNN_PARAM_BN _MODE 中指定的 模式匹配

NULL

X_YSUM_ PLACEHOLDER

Setter中, *param 应为 一个指针,指向 已初始化的 X_Pointer PlaceHolder_t

描述 VariantParamPack 中 y 的和的指针 是否为NULL

如果不是,则为用 户允许的指针对齐

MCDNN_PTR_ NULL

X_YSQSUM_ PLACEHOLDER

Setter中, *param 应为 一个指针,指向 已初始化的 X_Pointer PlaceHolder_t

描述 VariantParamPack 中 y 的和的指针 是否为NULL

如果不是,则为用 户允许的指针对齐

MCDNN_PTR_ NULL

X_BN_SCALEBIAS _MEANVAR_DESC

Setter中, *param 应为 一个指针,指向 已初始化的 mcdnnTensor Descriptor_t

通用张量描述符, 描述batchNorm 训练的scale, bias和统计数据 张量的大小, 布局,数据类型

形状必须与 MCDNN_PARAM_BN _MODE 中指定 的模式匹配 (与 mcdnnBatchNormal ization* API中 的 bnScale BiasMeanVarDesc 字段类似)

NULL

X_BN_SCALE_ PLACEHOLDER

Setter中, *param 应为 一个指针,指向 已初始化的 X_Pointer PlaceHolder_t

描述 VariantParamPack 中 batchNorm 训练的scale指针 是否为NULL

如果不是,则为用 户允许的指针对齐

若不需要 BN_EQSCALE 的输出,则此属性 值可以为NULL

MCDNN_PTR_ NULL

X_BN_BIAS_ PLACEHOLDER

Setter中, *param 应为 一个指针,指向 已初始化的 X_Pointer PlaceHolder_t

描述 VariantParamPack 中batchNorm 训练的bias指针 是否为NULL

如果不是,则为用 户允许的指针对齐

若不需要 BN_EQSCALE 和 BN_EQBIAS 的输出,则此属性 值可以为NULL

MCDNN_PTR_ NULL

X_BN_SAVED _MEAN_ PLACEHOLDER

Setter中, *param 应为 一个指针,指向 已初始化的 X_Pointer PlaceHolder_t

描述 VariantParamPack 中batchNorm 保存的均值指针 是否为NULL

如果不是,则为用 户允许的指针对齐

如果设置为 MCDNN_PTR_NULL, 则此输出计算 变为NoP

MCDNN_PTR_ NULL

X_BN_SAVED_ INVSTD_ PLACEHOLDER

Setter中, *param 应为 一个指针,指向 已初始化的 X_Pointer PlaceHolder_t

描述 VariantParamPack 中batchNorm 保存的逆标准差 指针是否为NULL

如果不是,则为用 户允许的指针对齐

如果设置为 MCDNN_PTR_NULL, 则此输出计算 变为NoP

MCDNN_PTR_ NULL

X_BN_RUNNING_ MEAN_ PLACEHOLDER

Setter中, *param 应为 一个指针,指向 已初始化的 X_Pointer PlaceHolder_t

描述 VariantParamPack 中batchNorm 移动均值指针 是否为NULL

如果不是,则为用 户允许的指针对齐

如果设置为 MCDNN_PTR_NULL, 则此输出计算 变为NoP

MCDNN_PTR_ NULL

X_BN_RUNNING_ VAR_ PLACEHOLDER

Setter中, *param 应为 一个指针,指向 已初始化的 X_Pointer PlaceHolder_t

描述 VariantParamPack 中batchNorm 移动方差指针 是否为NULL

如果不是,则为用 户允许的指针对齐

如果设置为 MCDNN_PTR_NULL, 则此输出计算 变为NoP

MCDNN_PTR_ NULL

X_BN_ EQSCALEBIAS_ _DESC

Setter中, *param 应为 一个指针,指向 已初始化的 mcdnnTensor Descriptor_t

张量描述符, 描述batchNorm 等效scale和bias 张量的大小, 布局,数据类型

形状必须与 MCDNN_PARAM_ BN_MODE 中指定 的模式匹配

若不需要 BN_EQSCALE 和 BN_EQBIAS 的 输出,则此参数 可以为NULL

NULL

X_BN_EQSCALE_ PLACEHOLDER

Setter中, *param 应为 一个指针,指向 已初始化的 X_Pointer PlaceHolder_t

描述 VariantParamPack 中batchNorm 等效scale指针 是否为NULL

如果不是,则为用 户允许的指针对齐

如果设置为 MCDNN_PTR_NULL, 则scale操作会 变为NoP

MCDNN_PTR_ NULL

X_BN_EQBIAS_ PLACEHOLDER

Setter中, *param 应为 一个指针,指向 已初始化的 X_Pointer PlaceHolder_t

描述 VariantParamPack 中batchNorm 等效bias指针是否 为NULL

如果不是,则为用 户允许的指针对齐

如果设置为 MCDNN_PTR_NULL, 则bias操作会 变为NoP

MCDNN_PTR_ NULL

mcdnnFusedOpsConstParamLabel_t中的

MCDNN_FUSED_BN_FINALIZE_STATISTICS_INFERENCE

适用于mcdnnFusedOp_t中MCDNN_FUSED_BN_FINALIZE_STATISTICS_INFERENCE属性

属性

Setter中期望传入 的描述符类型

说明

默认值

X_BN_MODE

Setter中, *param 应为 一个指针,指向 已初始化的 mcdnnBatchNorm Mode_t

描述scale,bias ,统计数据的操作 模式

mcDNN 只支持 MCDNN_BATCHNORM _SPATIAL 和 MCDNN_BATCHNORM _SPATIAL _PERSISTENT, 即scale,bias, 统计数据均为 per-channel模式

MCDNN _BATCHNORM_PER _ACTIVATION

X_BN_SCALEBIAS _MEANVAR_DESC

Setter中, *param 应为 一个指针,指向 已初始化的 mcdnnTensor Descriptor_t

通用张量描述符, 描述batchNorm 训练的scale, bias和统计数据 张量的大小, 布局,数据类型

形状必须与 MCDNN_PARAM_BN _MODE 中指定 的模式匹配 (与 mcdnnBatch Normalization* API中的 bnScale BiasMeanVarDesc 字段类似)

NULL

X_BN_SCALE_ PLACEHOLDER

Setter中, *param 应为 一个指针,指向 已初始化的 X_Pointer PlaceHolder_t

描述 VariantParamPack 中batchNorm 训练的scale指针 是否为NULL

如果不是,则为用 户允许的指针对齐

MCDNN_PTR_ NULL

X_BN_BIAS_ PLACEHOLDER

Setter中, *param 应为 一个指针,指向 已初始化的 X_Pointer PlaceHolder_t

描述 VariantParamPack 中batchNorm 训练的bias指针 是否为NULL

如果不是,则为用 户允许的指针对齐

MCDNN_PTR_ NULL

X_BN_RUNNING_ MEAN_ PLACEHOLDER

Setter中, *param 应为 一个指针,指向 已初始化的 X_Pointer PlaceHolder_t

描述 VariantParamPack 中batchNorm 移动均值指针 是否为NULL

如果不是,则为用 户允许的指针对齐

MCDNN_PTR_ NULL

X_BN_RUNNING_ VAR_ PLACEHOLDER

Setter中, *param 应为 一个指针,指向 已初始化的 X_Pointer PlaceHolder_t

描述 VariantParamPack 中batchNorm 移动方差指针 是否为NULL

如果不是,则为用 户允许的指针对齐

MCDNN_PTR_ NULL

X_BN_ EQSCALEBIAS_ _DESC

Setter中, *param 应为 一个指针,指向 已初始化的 mcdnnTensor Descriptor_t

张量描述符, 描述batchNorm 等效scale和bias 张量的大小, 布局,数据类型

形状必须与 MCDNN_PARAM_BN _MODE 中指定 的模式匹配

NULL

X_BN_EQSCALE_ PLACEHOLDER

Setter中, *param 应为 一个指针,指向 已初始化的 X_Pointer PlaceHolder_t

描述 VariantParamPack 中batchNorm 等效 scale指针是否 为NULL

如果不是,则为用 户允许的指针对齐

如果设置为 MCDNN_PTR_NULL, 则此输出计算 会变为NoP

MCDNN_PTR_ NULL

X_BN_EQBIAS_ PLACEHOLDER

Setter中, *param 应为 一个指针,指向 已初始化的 X_Pointer PlaceHolder_t

描述 VariantParamPack 中batchNorm 等效bias指针 是否为NULL

如果不是,则为用 户允许的指针对齐

如果设置为 MCDNN_PTR_NULL, 则输出计算 会变为NoP

MCDNN_PTR_ NULL

mcdnnFusedOpsConstParamLabel_t中的

MCDNN_FUSED_CONVOLUTION_SCALE_BIAS_ADD_RELU

属性

Setter中期望传入 的描述符类型

说明

默认值

X_XDESC

Setter中, *param 应为 xDesc,一个 指向已初始化的 mcdnnTensor Descriptor_t 的指针

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

NULL

X_XDATA PLACEHOLDER

Setter中, *param 应为 一个指针,指向 已初始化的 X_Pointer PlaceHolder_t

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

MCDNN_PTR_ NULL

X_CONV_DESC

Setter中, *param 应为 一个指针,指向已 初始化的 mcdnnConvolution Descriptor_t

描述卷积操作

NULL

X_WDESC

Setter中, *param 应为 一个指针,指向已 初始化的 mcdnnFilter Descriptor_t

卷积核描述符, 描述 w (卷积核)张量 的大小,布局, 数据类型

NULL

X_WDATA_ PLACEHOLDER

Setter中, *param 应为 一个指针,指向 已初始化的 X_Pointer PlaceHolder_t

描述 VariantParamPack 中 w (卷积核) 张量指针是否 为NULL

如果不是,则为用 户允许的指针对齐

MCDNN_PTR_ NULL

X_BN _EQSCALEBIAS _DESC

Setter中, *param 应为 一个指针,指向 已初始化的 mcdnnTensor Descriptor_t

张量描述符,描述 alpha1 scale和bias张量 的大小,布局, 数据类型

张量形状为 (1,K,1,1),其中 K是输出特征图的 数量

NULL

X_BN_EQSCALE_ PLACEHOLDER

Setter中, *param 应为 一个指针,指向 已初始化的 X_Pointer PlaceHolder_t

描述 VariantParamPack 中batchNorm 等效scale或 alpha1 张量指针是否 为NULL

如果不是,则为用 户允许的指针对齐

如果设置为 MCDNN_PTR_NULL, 则 alpha1 缩放 操作变为NoP

MCDNN_PTR_ NULL

X_ZDESC

Setter中, *param 应为 xDesc, 一个指针,指向 已初始化的 mcdnnTensor Descriptor_t

张量描述符, 描述 z 张量的 大小,布局, 数据类型的张量 描述符

如果不设置,则 z 缩放加法( scale-add) 运算 会变为NoP

NULL

MCDNN_PARAM_ ZDATA_ PLACEHOLDER

Setter中, *param 应为 一个指针,指向 已初始化的 X_Pointer PlaceHolder_t

描述 VariantParamPack 中 z 张量指针 是否为NULL

如果不是,则为用 户允许的指针对齐

如果设置为 MCDNN_PTR_NULL, 则 z 缩放加法 运算会变为NoP

MCDNN_PTR_ NULL

MCDNN_PARAM_BN _Z_EQSCALEBIAS _DESC

Setter中, *param 应为 一个指针,指向 已初始化的 mcdnnTensor Descriptor_t

张量描述符,描述 alpha2 张量的大小, 布局,数据类型

如果设置为 NULL,则 输入 z 变为NoP

NULLPTR

MCDNN_PARAM _BN_Z_EQSCALE PLACEHOLDER

Setter中, *param 应为 一个指针,指向 已初始化的 X_Pointer PlaceHolder_t

描述 VariantParamPack 中 batchNorm z等效缩放指针 是否为NULL

如果不是,则为用 户允许的指针对齐

如果设置为 MCDNN_PTR_NULL, 则输入 z 缩放 会变为NoP

MCDNN_PTR_ NULL

X_ACTIVATION_ DESC

Setter中, *param 应为 一个指针,指向 已初始化的 mcdnnActivation Descriptor_t

描述激活操作

mcDNN 只支持 MCDNN_ACTIVATION _RELU 和 MCDNN_ACTIVATION _IDENTITY 激活模式

若设为 NULL 或激活模式设为 MCDNN_ACTIVATION _IDENTITY, 则op 序列中的 激活操作会变为 NoP

NULL

X_YDESC

Setter中, *param 应为 一个指针,指向 已初始化的 mcdnnTensor Descriptor_t

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

NULL

X_YDATA_ PLACEHOLDER

Setter中, *param 应为 一个指针,指向 已初始化的 X_Pointer PlaceHolder_t

描述 VariantParamPack 中 y (输出) 张量指针是否为 NULL

如果不是,则为用 户允许的指针对齐

MCDNN_PTR_ NULL

5.1.3.3. mcdnnFusedOpsPointerPlaceHolder_t

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

说明

MCDNN_PTR_NULL = 0

表示指向 variantPack 中张量的指针 为 NULL

MCDNN_PTR_ELEM_ALIGNED = 1

表示指向 variantPack 中张量的指针 不为 NULL,且会元素对齐

MCDNN_PTR_16B_ALIGNED = 2

表示指向 variantPack 中张量的指针 不为 NULL,且会16字节对齐

5.1.3.4. mcdnnFusedOpsVariantParamLabel_t

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

typedef enum {
    MCDNN_PTR_XDATA                              = 0,
    MCDNN_PTR_BN_EQSCALE                         = 1,
    MCDNN_PTR_BN_EQBIAS                          = 2,
    MCDNN_PTR_WDATA                              = 3,
    MCDNN_PTR_DWDATA                             = 4,
    MCDNN_PTR_YDATA                              = 5,
    MCDNN_PTR_DYDATA                             = 6,
    MCDNN_PTR_YSUM                               = 7,
    MCDNN_PTR_YSQSUM                             = 8,
    MCDNN_PTR_WORKSPACE                          = 9,
    MCDNN_PTR_BN_SCALE                           = 10,
    MCDNN_PTR_BN_BIAS                            = 11,
    MCDNN_PTR_BN_SAVED_MEAN                      = 12,
    MCDNN_PTR_BN_SAVED_INVSTD                    = 13,
    MCDNN_PTR_BN_RUNNING_MEAN                    = 14,
    MCDNN_PTR_BN_RUNNING_VAR                     = 15,
    MCDNN_PTR_ZDATA                              = 16,
    MCDNN_PTR_BN_Z_EQSCALE                       = 17,
    MCDNN_PTR_BN_Z_EQBIAS                        = 18,
    MCDNN_PTR_ACTIVATION_BITMASK                 = 19,
    MCDNN_PTR_DXDATA                             = 20,
    MCDNN_PTR_DZDATA                             = 21,
    MCDNN_PTR_BN_DSCALE                          = 22,
    MCDNN_PTR_BN_DBIAS                           = 23,
    MCDNN_SCALAR_SIZE_T_WORKSPACE_SIZE_IN_BYTES  = 100,
    MCDNN_SCALAR_INT64_T_BN_ACCUMULATION_COUNT   = 101,
    MCDNN_SCALAR_DOUBLE_BN_EXP_AVG_FACTOR        = 102,
    MCDNN_SCALAR_DOUBLE_BN_EPSILON               = 103,
    } mcdnnFusedOpsVariantParamLabel_t;

mcdnnFusedOpsVariantParamLabel_t表格说明

使用的简称

含义

Setter

mcdnnSetFusedOpsVariantParamPack Attribute()

Getter

mcdnnGetFusedOpsVariantParamPack Attribute()

属性键 列中的 X_ 前缀

枚举数名称中的 MCDNN_PTR_MCDNN_SCALAR_

mcdnnFusedOpsVariantParamLabel_t中的

MCDNN_FUSED_SCALE_BIAS_ACTIVATION_CONV_BNSTATS

属性键

Setter中 期望传入的 描述符类型

I/O 类型

说明

默认值

X_XDATA

void *

input

设备上指向 x (输入) 张量的指针

需与已设置的 MCDNN_PARAM _XDATA_ PLACEHOLDER 属性一致

NULL

X_BN_ EQSCALE

void *

input

设备上指向 batchNorm 等效scale 张量的指针

需与已设置的 MCDNN_PARAM _BN_EQSCALE_ PLACEHOLDER 属性一致

NULL

X_ BN_EQBIAS

void *

input

设备上指向 batchNorm 等效bias张量 的指针

需要与已设置 的 MCDNN_ PARAM_BN_ EQBIAS_PLACE HOLDER 属性一致

NULL

X_WDATA

void *

input

设备上指向 w (卷积核) 张量的指针

需要与已设置 的 MCDNN_ PARAM_WDATA_ PLACEHOLDER 属性一致

NULL

X_YDATA

void *

output

设备上指向 y (输出) 张量的指针

需要与已设置 的 MCDNN_ PARAM_YDATA_ PLACEHOLDER 属性一致

NULL

X_YSUM

void *

output

设备上指向 y 的和张量 的指针

需要与已设置 的 MCDNN_ PARAM_YSUM_P LACEHOLDER 属性一致

NULL

X_YSQSUM

void *

output

设备上指向 y 的平方和 张量的指针

需要与已设置 的 MCDNN_ PARAM_YSQSUM _PLACEHOLDER 属性一致

NULL

X_ WORKSPACE

void *

input

设备上指向 用户已分配的 工作空间的指 针

若需求的工作 空间大小为 0,可以为 NULL

NULL

X_SIZE_T _WORKSPACE_ SIZE_IN_ BYTES

size_t*

input

主机内存中 指向一个 size_t 值 的指针

描述用户已分 配的工作空间 大小(以字节 为单位)

需要大于或 等于 mcdnn MakeFusedOps Plan 的值

0

备注

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

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

mcdnnFusedOpsVariantParamLabel_t中的

MCDNN_FUSED_SCALE_BIAS_ACTIVATION_WGRAD

属性键

Setter中 期望传入的 描述符类型

I/O 类型

说明

默认值

X_XDATA

void *

input

设备上指向 x (输入) 张量的指针

需要与已设置 的 MCDNN _PARAM_XDATA _PLACE HOLDER 属性一致

NULL

X_BN_ EQSCALE

void *

input

设备上指向 batchNorm 等效scale 张量的指针

需要与已设置 的 MCDNN _PARAM_BN_ EQSCALE_PLA CEHOLDER 属性一致

NULL

X_ BN_EQBIAS

void *

input

设备上指向 batchNorm 等效bias张量 的指针

需要与已设置 的 MCDNN_PARAM _BN_EQBIAS_ PLACEHOLDER 属性一致

NULL

X_DWDATA

void *

output

设备上指向 dw (卷积核 梯度输出) 张量的指针

需要与已设置 的 MCDNN_PARAM _WDATA_ PLACEHOLDER 属性一致

NULL

X_DYDATA

void *

input

设备上指向 dy (梯度输 入)张量的 指针

需要与已设置 的 MCDNN_PARAM _YDATA_ PLACEHOLDER 属性一致

NULL

X_ WORKSPACE

void *

input

设备上指向 用户已分配的 工作空间的指 针

若需求的工作 空间大小为 0,可以为 NULL

NULL

X_SIZE_T _WORKSPACE_ SIZE_IN_ BYTES

size_t*

input

主机内存中 指向一个 size_t 值 的指针

描述用户已分 配的工作空间 大小(以字节 为单位)

需要大于或 等于 mcdnn MakeFusedOps Plan 的值

0

备注

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

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

mcdnnFusedOpsVariantParamLabel_t中的

MCDNN_FUSED_BN_FINALIZE_STATISTICS_TRAINING

属性键

Setter中 期望传入的 描述符类型

I/O 类型

说明

默认值

X_YSUM

void *

input

设备上指向 y 的和张量 的指针

需与已设置的 MCDNN_PARAM _YSUM_ PLACEHOLDER 属性一致

NULL

X_YSQSUM

void *

input

设备上指向 y 的平方和 张量的指针

需与已设置的 MCDNN_PARAM _YSQSUM_ PLACEHOLDER 属性一致

NULL

X _BN_SCALE

void *

input

设备上指向 batchNorm scale张量的 指针

需与已设置的 MCDNN_PARAM _BN_SCALE_ PLACEHOLDER 属性一致

NULL

X_ BN_BIAS

void *

input

设备上指向 batchNorm bias张量的指 针

需与已设置的 MCDNN_PARAM _BN_BIAS_ PLACEHOLDER 属性一致

NULL

X_BN_SAVED _MEAN

void *

output

设备上指向 batchNorm 保存的均值 张量的指针

需与已设置的 MCDNN_PARAM _BN_SAVED _MEAN_ PLACEHOLDER 属性一致

NULL

X_BN_SAVED _INVSTD

void *

output

设备上指向 batchNorm 保存的逆标 准差张量的指 针

需与已设置的 MCDNN_PARAM _BN_SAVED _INVSTD_ PLACEHOLDER 属性一致

NULL

X_BN_ RUNNING_ MEAN

void *

input/ output

设备上指向 batchNorm 移动均值张量 的指针

需与已设置的 MCDNN_PARAM _BN_RUNNING _MEAN_ PLACEHOLDER 属性一致

NULL

X_BN_ RUNNING_ VAR

void *

input/ output

设备上指向 batchNorm 移动方差张量 的指针

需与已设置的 MCDNN_PARAM _BN_RUNNING _VAR_ PLACEHOLDER 属性一致

NULL

X_BN_ EQSCALE

void *

output

设备上指向 batchNorm 等效scale 张量的指针

需与已设置的 MCDNN_PARAM _BN_EQSCALE_ PLACEHOLDER 属性一致

NULL

X_BN_ EQBIAS

void *

output

设备上指向 batchNorm 等效bias张量 的指针

需与已设置的 MCDNN_PARAM _BN_EQBIAS_ PLACEHOLDER 属性一致

NULL

X_INT64_T_ BN_ ACCUMULATION _COUNT

int64_t*

input

主机内存中 指向 int64_t 中一个标量值 的指针

该标量值描述 y 的和与 平方和张量 累加的张量 元素数

例如,在单个 GPU用例中, 若mode为 MCDNN _BATCHNORM_ SPATIAL 或 MCDNN _BATCHNORM _SPATIAL_ PERSISTENT, 该值应等于张 量的 N*H*W, 该张量为从中 计算统计数据 的张量

在多GPU用例 中,若已在 y 的和与平方和 张量上执行 all-reduce, 该值应为每个 GPU上单GPU累 积计数的总和

0

X_DOUBLE _BN_EXP_AVG_ FACTOR

double*

input

主机内存中 指向一个双 精度标量值的 指针

在移动平均 计算中使用的 系数

参见 mcdnnBatch Normaliza tion* API中 的 exponen tialAverage Factor

0.0

X_DOUBLE_ BN_EPSILON

double*

input

主机内存中 指向一个双 精度标量值的 指针

批量归一化 公式中使用的 条件常量

其值应大于或 等于 mcdnn.h 中定义的 MCDNN_BN_MIN _EPSILON 的值

参见 mcdnnBatch Normaliza tion* API中 的 exponen tialAverage Factor

0.0

X_ WORKSPACE

void *

input

设备上指向 用户已分配的 工作空间的指 针

若需求的工作 空间大小为 0,可以为 NULL

NULL

X_SIZE_T _WORKSPACE_ SIZE_IN_ BYTES

size_t*

input

主机内存中 指向一个 size_t 值 的指针

描述用户已分 配的工作空间 大小(以字节 为单位)

需要大于或 等于 mcdnn MakeFusedOps Plan 的值

0

备注

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

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

mcdnnFusedOpsVariantParamLabel_t中的

MCDNN_FUSED_BN_FINALIZE_STATISTICS_INFERENCE

属性键

Setter中 期望传入的 描述符类型

I/O 类型

说明

默认值

X _BN_SCALE

void *

input

设备上指向 batchNorm scale张量的 指针

需与已设置的 MCDNN_PARAM _BN_SCALE_ PLACEHOLDER 属性一致

NULL

X_ BN_BIAS

void *

input

设备上指向 batchNorm bias张量的指 针

需与已设置的 MCDNN_PARAM _BN_BIAS_ PLACEHOLDER 属性一致

NULL

X_BN_ RUNNING_ MEAN

void *

input/ output

设备上指向 batchNorm 移动均值张量 的指针

需与已设置的 MCDNN_PARAM _BN_RUNNING _MEAN_ PLACEHOLDER 属性一致

NULL

X_BN_ RUNNING_ VAR

void *

input/ output

设备上指向 batchNorm 移动方差张量 的指针

需与已设置的 MCDNN_PARAM _BN_RUNNING _VAR_ PLACEHOLDER 属性一致

NULL

X_BN_ EQSCALE

void *

output

设备上指向 batchNorm 等效scale 张量的指针

需与已设置的 MCDNN_PARAM _BN_EQSCALE_ PLACEHOLDER 属性一致

NULL

X_BN_ EQBIAS

void *

output

设备上指向 batchNorm 等效bias张量 的指针

需与已设置的 MCDNN_PARAM _BN_EQBIAS_ PLACEHOLDER 属性一致

NULL

X_DOUBLE_BN _EPSILON

double*

input

主机内存中 指向一个双 精度标量值的 指针

批量归一化 公式中使用的 条件常量

其值应大于或 等于 mcdnn.h 中定义的 MCDNN_BN _MIN_ EPSILON 的值

参见 mcdnnBatch Normaliza tion* API中 的 exponen tialAverage Factor

0.0

X_ WORKSPACE

void *

input

设备上指向 用户已分配的 工作空间的指 针

若需求的工作 空间大小为 0,可以为 NULL

NULL

X_SIZE_T _WORKSPACE_ SIZE_IN_ BYTES

size_t*

inpu

主机内存中 指向一个 size_t 值 的指针

描述用户已分 配的工作空间 大小(以字节 为单位)

需要大于或 等于 mcdnn MakeFusedOps Plan 的值

0

X_XDATA

void *

input

设备上指向 x (图像) 张量的指针

需与已设置的 MCDNN_PARAM _XDATA PLACEHOLDER 属性一致

NULL

X_WDATA

void *

input

设备上指向 w (卷积核) 张量的指针

需与已设置的 MCDNN_PARAM _WDATA_ PLACEHOLDER 属性一致

NULL

X_BN_ EQSCALE

void *

output

设备上指向 alpha1 或 batchNorm 等效scale 张量的指针

需与已设置的 MCDNN_PARAM _BN _EQSCALE_ PLACEHOLDER 属性一致

NULL

X_ZDATA

void *

input

设备上指向 z 张量的 指针

需已设置的 MCDNN_PARAM _YDATA_ PLACEHOLDER 属性一致

NULL

X_BN_ Z_EQSCALE

void *

input

设备上指向 z 的 alpha2 或等效scale 张量的指针

需与已设置的 MCDNN_PARAM _BN_Z _EQSCALE_ PLACEHOLDER 属性一致

NULL

X_BN_ Z_EQBIAS

void *

input

设备上指向 z 的 batchNorm 等效bias张量 的指针

需与已设置的 MCDNN_PARAM _BN_Z _EQBIAS_ PLACEHOLDER 属性一致

NULL

X_YDATA

void *

output

设备上指向 y (输出) 张量的指针

需与已设置的 MCDNN_PARAM _YDATA_ PLACEHOLDER 属性一致

NULL

X_ WORKSPACE

void *

input

设备上指向 用户已分配的 工作空间的指 针

若需求的工作 空间大小为 0,可以为 NULL

NULL

X_SIZE_T _WORKSPACE_ SIZE_IN_ BYTES

size_t*

input

主机内存中 指向一个 size_t 值 的指针

描述用户已分 配的工作空间 大小(以字节 为单位)

需要大于或 等于 mcdnn MakeFusedOps Plan 的值

0

备注

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

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

5.2. API参考

5.2.1. API函数

5.2.1.1. mcdnnCnnTrainVersionCheck()

此函数检查库的CnnTrain子集的版本是否与其他子库一致。

mcdnnStatus_t mcdnnCnnTrainVersionCheck(void)

返回值

MCDNN_STATUS_SUCCESS

版本与其他子库一致。

MCDNN_STATUS_VERSION_MISMATCH

CnnTrain的版本与其他子库不一致。用户应检查并确保所有子组件安装版本一致。

5.2.1.2. mcdnnConvolutionBackwardBias()

该函数计算与bias相关的卷积函数梯度,其是输入张量所有图像上属于同一特征图的元素的总和。因此,得到的元素数等于输入张量的特征图数。

mcdnnStatus_t mcdnnConvolutionBackwardBias(
mcdnnHandle_t                       handle,
const void                          *alpha,
const mcdnnTensorDescriptor_t       dyDesc,
const void                          *dy,
const void                          *beta,
const mcdnnTensorDescriptor_t       dbDesc,
void                                *db)

参数

handle

输入。已创建的mcDNN上下文的句柄。更多信息,参见mcdnnHandle_t。

alpha, beta

输入。指向缩放系数(主机内存中)的指针,用于将计算结果与输出层中的先验值混合,如下所示: dstValue = alpha[0]*resultValue + beta[0]*priorDstValue。

dyDesc

输入。已初始化的输入张量描述符的句柄。更多信息,参见mcdnnTensorDescriptor_t。

dy

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

dbDesc

输入。已初始化的输出张量描述符的句柄。

db

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

返回值

MCDNN_STATUS_SUCCESS

操作成功启动。

MCDNN_STATUS_NOT_SUPPORTED

此函数不支持已提供的配置。

MCDNN_STATUS_BAD_PARAM

需至少满足以下任一条件:

  • One of the parameters n, height, or width of the output tensor is not 1.

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

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

5.2.1.3. mcdnnConvolutionBackwardFilter()

mcdnnStatus_t mcdnnConvolutionBackwardFilter(
    mcdnnHandle_t                      handle,
    const void                         *alpha,
    const mcdnnTensorDescriptor_t      xDesc,
    const void                         *x,
    const mcdnnTensorDescriptor_t      dyDesc,
    const void                         *dy,
    const mcdnnConvolutionDescriptor_t convDesc,
    mcdnnConvolutionBwdFilterAlgo_t    algo,
    void                               *workSpace,
    size_t                             workSpaceSizeInBytes,
    const void                         *beta,
    const mcdnnFilterDescriptor_t      dwDesc,
    void                               *dw)

该函数计算张量dy的卷积权重梯度,其中y是mcdnnConvolutionForward()中正向卷积的输出。它使用指定的算法,并在输出张量dw中返回结果。缩放系数alpha和beta可用于缩放计算结果或与当前dw累加。

参数

handle

输入。已创建的mcDNN上下文的句柄。更多信息,参见mcdnnHandle_t。

alpha, beta

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

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

xDesc

输入。已初始化的张量描述符的句柄。更多信息,参见mcdnnTensorDescriptor_t。

x

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

dyDesc

输入。已初始化的输入差分张量描述符的句柄。

dy

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

convDesc

输入。已初始化的卷积描述符。更多信息,参见mcdnnConvolutionDescriptor_t。

algo

输入。指定应使用哪个卷积算法来计算结果的枚举。更多信息,参见mcdnnConvolutionBwdFilterAlgo_t。

workSpace

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

workSpaceSizeInBytes

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

dwDesc

输入。已初始化的卷积核梯度描述符的句柄。更多信息,参见mcdnnFilterDescriptor_t。

dw

输入/输出。数据指针,指向与卷积核梯度描述符dwDesc(携带结果)关联的GPU内存。

返回值

MCDNN_STATUS_SUCCESS

操作成功启动。

MCDNN_STATUS_BAD_PARAM

需至少满足以下任一条件:

  • 以下至少有一个为NULL:handle、xDesc、dyDesc、convDesc、dwDesc、xData、dyData、dwData、alpha、beta

  • xDesc和dyDesc的维数不匹配

  • xDesc和dwDesc的维数不匹配

  • xDesc的维数小于3

  • xDesc、dyDesc和dwDesc的数据类型不匹配。

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

  • yDesc或dwDesc表示输出通道计数,其不是组计数的倍数(如果在convDesc中设置了组计数)。

MCDNN_STATUS_NOT_SUPPORTED

需至少满足以下任一条件:

  • xDesc或dyDesc具有负张量步幅

  • xDesc,dwDesc或dyDesc的维数不是4或5

  • 所选algo不支持提供的参数;有关每个algo支持的参数,参见以下详尽列表

MCDNN_STATUS_MAPPING_ERROR

创建与卷积核数据关联的纹理对象时发生错误。

MCDNN_STATUS_EXECUTION_FAILED

此函数在GPU上启用失败。

支持的mcdnnConvolutionBackwardFilter()配置

数据类型配置

xDesc,dyDesc, dwDesc 数据类型

convDesc 数据类型

TRUE_HALF_CONFIG (仅支持true FP16架构 )

MCDNN_DATA_HALF

MCDNN_DATA_HALF

PSEUDO_HALF_ CONFIG

MCDNN_DATA_HALF

MCDNN_DATA_FLOAT

PSEUDO_BFLOAT16_ CONFIG

MCDNN_DATA_BFLOAT16

MCDNN_DATA_FLOAT

FLOAT_CONFIG

MCDNN_DATA_FLOAT

MCDNN_DATA_FLOAT

DOUBLE_CONFIG

MCDNN_DATA_DOUBLE

MCDNN_DATA_DOUBLE

备注

指定单独的算法会导致性能、支持和计算决定因素发生变化。有关算法选项及其各自支持的参数和确定性的详尽列表,请参见下表。

支持的算法

  • MCDNN_CONVOLUTION_BWD_FILTER_ALGO_1 (_ALGO_1)

  • MCDNN_CONVOLUTION_BWD_FILTER_ALGO_FFT_TILING (_FFT_TILING)

  • MCDNN_TENSOR_NCHW (_NCHW)

  • MCDNN_TENSOR_NHWC (_NHWC)

  • MCDNN_TENSOR_NCHW_VECT_C (_NCHW_VECT_C)

mcdnnConvolutionBackwardFilter() 2D卷积支持的算法:dwDesc: _NHWC

算法名称

确定性 (Yes or No)

dyDesc 支持的 张量格式

dxDesc 支持的 张量格式

支持的 数据类型 配置

重要

_ALGO_1

NHWC HWC- packed

NHWC HWC- packed

PSEUDO _HALF_ CONFIG

PSEUDO _BFLOAT16 _CONFIG

FLOAT _CONFIG

mcdnnConvolutionBackwardFilter() 2D卷积支持的算法:dwDesc: _NCHW

算法名称

确定性 (Yes or No)

dyDesc 支持的 张量格式

dxDesc 支持的 张量格式

支持的 数据类型 配置

重要

_ALGO_1

Yes

除 _NCHW_ VECT_C 之外的所有 其他格式

NCHW CHW- packed

PSEUDO _HALF _CONFIG

TRUE_HALF _CONFIG

PSEUDO _BFLOAT16 _CONFIG

FLOAT _CONFIG

DOUBLE _CONFIG

所有维度 大于0

convDesc 组计数支 持:大于0

_FFT _TILING

Yes

NCHW CHW- packed

NCHW CHW- packed

PSEUDO _HALF _CONFIG

FLOAT _CONFIG

DOUBLE _CONFIG

1适用于 所有维度

convDesc 组计数支 持:大于0

dyDesc 宽度或高度 必须等于1 (与 xDesc 相同的维 度)

其他维度必 须小于或等 于256,即 目前支持的 最大1D分块 尺寸

convDesc 垂直和水平 卷积核步幅 必须等于1

dwDesc 卷积核高度 必须大于 convDesc 零填充高度

dwDesc 卷积核宽度 必须大于 convDesc 零填充宽度

mcdnnConvolutionBackwardFilter() 3D卷积支持的算法:dwDesc: _NCHW

算法名称

确定性 (Yes or No)

dyDesc 支持的 张量格式

dxDesc 支持的 张量格式

支持的 数据类型 配置

重要

_ALGO_1

No

除 _NCDHW _VECT_C 之外的所有 其他格式

NCDHW CDHW -packed

NCDHW W-packed

NDHWC

PSEUDO _HALF _CONFIG

PSEUDO _BFLOAT16 _CONFIG

FLOAT _CONFIG

DOUBLE _CONFIG

所有维度 大于0

convDesc 组计数支 持:大于0

mcdnnConvolutionBackwardFilter() 3D卷积支持的算法:dwDesc: _NHWC

算法名称

确定性 (Yes or No)

dyDesc 支持的 张量格式

dxDesc 支持的 张量格式

支持的 数据类型 配置

重要

_ALGO_1

Yes

NDHWC HWC-packed

NDHWC HWC-packed

PSEUDO _HALF _CONFIG

PSEUDO _BFLOT16 _CONFIG

FLOAT _CONFIG

TRUE_HALF _CONFIG

所有维度 大于0

convDesc 组计数支 持:大于0

5.2.1.4. mcdnnCreateFusedOpsConstParamPack()

此函数创建一个不透明结构来存储所选mcdnnFusedOps计算序列的各种problem size信息,例如形状,布局和张量类型,以及卷积和激活描述符。

mcdnnStatus_t mcdnnCreateFusedOpsConstParamPack(
mcdnnFusedOpsConstParamPack_t       *constPack,
mcdnnFusedOps_t                     ops);

参数

constPack

输入。由该函数创建的不透明结构。更多信息,参见mcdnnFusedOpsConstParamPack_t。

ops

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

返回值

MCDNN_STATUS_BAD_PARAM

constPack或ops为NULL。

MCDNN_STATUS_ALLOC_FAILED

资源无法分配。

MCDNN_STATUS_SUCCESS

描述符创建成功。

5.2.1.5. mcdnnCreateFusedOpsPlan()

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

mcdnnStatus_t mcdnnCreateFusedOpsPlan(
mcdnnFusedOpsPlan_t         *plan,
mcdnnFusedOps_t             ops);

参数

plan

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

ops

输入。此plan描述符对应的融合操作计算的特定序列。更多信息,参见mcdnnFusedOps_t。

返回值

MCDNN_STATUS_BAD_PARAM

输入plan为NULL或ops输入不是有效的mcdnnFusedOp枚举。

MCDNN_STATUS_ALLOC_FAILED

资源无法分配。

MCDNN_STATUS_SUCCESS

plan描述符创建成功。

5.2.1.6. mcdnnCreateFusedOpsVariantParamPack()

此函数创建mcdnnFusedOps计算的variant pack描述符。

mcdnnStatus_t mcdnnCreateFusedOpsVariantParamPack(
mcdnnFusedOpsVariantParamPack_t *varPack,
mcdnnFusedOps_t                 ops);

参数

varPack

输入。指针,指向此函数创建的描述符。更多信息,参见mcdnnFusedOpsVariantParamPack_t。

ops

输入。此描述符对应的融合操作计算的特定序列。

返回值

MCDNN_STATUS_SUCCESS

描述符创建成功。

MCDNN_STATUS_ALLOC_FAILED

资源无法分配。

MCDNN_STATUS_BAD_PARAM

任何输入都无效。

5.2.1.7. mcdnnDestroyFusedOpsConstParamPack()

此函数用于销毁已创建的mcdnnFusedOpsConstParamPack_t结构。

mcdnnStatus_t mcdnnDestroyFusedOpsConstParamPack(
mcdnnFusedOpsConstParamPack_t constPack);

参数

constPack

输入。要销毁的mcdnnFusedOpsConstParamPack_t结构。

返回值

MCDNN_STATUS_SUCCESS

描述符已销毁成功。

MCDNN_STATUS_INTERNAL_ERROR

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

5.2.1.8. mcdnnDestroyFusedOpsPlan()

此函数用于销毁已提供的plan描述符。

mcdnnStatus_t mcdnnDestroyFusedOpsPlan(
mcdnnFusedOpsPlan_t plan);

参数

plan

输入。需要通过此函数销毁的描述符。

返回值

MCDNN_STATUS_SUCCESS

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

5.2.1.9. mcdnnDestroyFusedOpsVariantParamPack()

此函数用于销毁已为mcdnnFusedOps常量参数创建的描述符。

mcdnnStatus_t mcdnnDestroyFusedOpsVariantParamPack(
mcdnnFusedOpsVariantParamPack_t varPack);

参数

varPack

输入。要销毁的描述符。

返回值

MCDNN_STATUS_SUCCESS

描述符销毁成功。

5.2.1.10. mcdnnFindConvolutionBackwardFilterAlgorithm()

mcdnnStatus_t mcdnnFindConvolutionBackwardFilterAlgorithm(
    mcdnnHandle_t                       handle,
    const mcdnnTensorDescriptor_t       xDesc,
    const mcdnnTensorDescriptor_t       dyDesc,
    const mcdnnConvolutionDescriptor_t  convDesc,
    const mcdnnFilterDescriptor_t       dwDesc,
    int                                 requestedAlgoCount,
    int                                 *returnedAlgoCount,
    mcdnnConvolutionBwdFilterAlgoPerf_t *perfResults)

此函数尝试所有可用于mcdnnConvolutionBackwardFilter()的算法。它将尝试提供的convDesc MathType和MCDNN_TENSOR_OP_MATH(假设两者不同)。

备注

只能使用MCDNN_FMA_MATH 尝试没有 MCDNN_TENSOR_OP_MATH可用性的算法,并以同样方式返回。 对于MCDNN_DATA_FLOAT,MCDNN_FMA_MATH将使用float类型计算,其它MATH_TYPE将使用tf32类型计算。

通过mcMalloc()分配内存。在用户分配的mcdnnConvolutionBwdFilterAlgoPerf_t数组中返回性能指标。这些指标以一种有序的方式写入,其中第一个元素的计算时间最短。可用算法的总数可以通过mcdnnGetConvolutionBackwardFilterAlgorithmMaxCount() API查询。

备注

  • 此函数是主机阻塞。

  • 建议在分配层数据之前运行此函数;否则可能会由于资源使用问题而不必要地禁止某些算法选项。

参数

handle

输入。已创建的mcDNN上下文的句柄。

xDesc

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

dyDesc

输入。已初始化的输入差分张量描述符的句柄。

convDesc

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

dwDesc

输入。已初始化的卷积核描述符的句柄。

requestedAlgoCount

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

returnedAlgoCount

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

perfResults

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

返回值

MCDNN_STATUS_SUCCESS

查询成功。

MCDNN_STATUS_BAD_PARAM

需至少满足以下任一条件:

  • 未正确分配handle。

  • 未正确分配xDes、dyDesc或dwDesc。

  • xDesc,dyDesc或dwDesc的维度小于1。

  • returnedCount或perfResults为nil。

  • requestedCount小于1。

MCDNN_STATUS_ALLOC_FAILED

此函数无法分配内存来存储样本输入,卷积核和输出。

MCDNN_STATUS_INTERNAL_ERROR

需至少满足以下任一条件:

  • 此函数不能用来分配必要的计时对象。

  • 此函数不能用来释放必要的计时对象。

  • 此函数不能用来释放样本输入,卷积核和输出。

5.2.1.11. mcdnnFindConvolutionBackwardFilterAlgorithmEx()

mcdnnStatus_t mcdnnFindConvolutionBackwardFilterAlgorithmEx(
    mcdnnHandle_t                       handle,
    const mcdnnTensorDescriptor_t       xDesc,
    const void                          *x,
    const mcdnnTensorDescriptor_t       dyDesc,
    const void                            *dy,
    const mcdnnConvolutionDescriptor_t  convDesc,
    const mcdnnFilterDescriptor_t       dwDesc,
    void                                *dw,
    int                                 requestedAlgoCount,
    int                                 *returnedAlgoCount,
    mcdnnConvolutionBwdFilterAlgoPerf_t *perfResults,
    void                                *workSpace,
    size_t                              workSpaceSizeInBytes)

此函数尝试所有可用于mcdnnConvolutionBackwardFilter()的算法。它将尝试提供的convDesc MathType和MCDNN_TENSOR_OP_MATH(假设两者不同)。

备注

只能使用MCDNN_TENSOR_OP_MATH尝试没有MCDNN_FMA_MATH可用性的算法,并以同样方式返回。 对于MCDNN_DATA_FLOAT,MCDNN_FMA_MATH将使用float类型计算,其它MATH_TYPE将使用tf32类型计算。

通过mcMalloc()分配内存。在用户分配的mcdnnConvolutionBwdFilterAlgoPerf_t数组中返回性能指标。这些指标以一种有序的方式写入,其中第一个元素的计算时间最短。可用算法的总数可以通过mcdnnGetConvolutionBackwardFilterAlgorithmMaxCount() API查询。

备注

此函数是主机阻塞。

参数

handle

输入。已创建的mcDNN上下文的句柄。

xDesc

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

x

输入。数据指针,指向与卷积核描述符xDesc关联的GPU内存。

dyDesc

输入。已初始化的输入差分张量描述符的句柄。

dy

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

convDesc

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

dwDesc

输入。已初始化的卷积核描述符的句柄。

dw

输入/输出。数据指针,指向与卷积核描述符dwDesc关联的GPU内存。此张量的内容会被任意值覆盖。

requestedAlgoCount

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

returnedAlgoCount

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

perfResults

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

workSpace

输入。指向GPU内存的数据指针,此内存是某些算法所必需的工作空间。此工作空间的大小将决定算法的可用性。nil指针被视为0字节的workSpace。

workSpaceSizeInBytes

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

返回值

MCDNN_STATUS_SUCCESS

查询成功。

MCDNN_STATUS_BAD_PARAM

需至少满足以下任一条件:

  • 未正确分配handle。

  • 未正确分配xDes、dyDesc或dwDesc。

  • xDesc,dyDesc或dwDesc的维度小于1。

  • x,dy或dw为nil。

  • returnedCount或perfResults为nil。

  • requestedCount小于1。

MCDNN_STATUS_INTERNAL_ERROR

需至少满足以下任一条件:

  • 此函数不能用来分配必要的计时对象。

  • 此函数不能用来释放必要的计时对象。

  • 此函数不能用来释放样本输入,卷积核和输出。

5.2.1.12. mcdnnFusedOpsExecute()

此函数执行mcdnnFusedOps操作的序列。

mcdnnStatus_t mcdnnFusedOpsExecute(
mcdnnHandle_t                   handle,
const mcdnnFusedOpsPlan_t       plan,
mcdnnFusedOpsVariantParamPack_t varPack);

参数

handle

输入。指向mcDNN库上下文的指针。

plan

输入。指向已创建和初始化的plan描述符的指针。

varPack

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

返回值

MCDNN_STATUS_BAD_PARAM

plan描述符中的mcdnnFusedOps_t类型不受支持。

5.2.1.13. mcdnnGetConvolutionBackwardFilterAlgorithmMaxCount()

mcdnnStatus_t mcdnnGetConvolutionBackwardFilterAlgorithmMaxCount(
      mcdnnHandle_t handle,
      int           *count)

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

参数

handle

输入。已创建的mcDNN上下文的句柄。

count

输出。得到的算法最大计数。

返回值

MCDNN_STATUS_SUCCESS

此函数执行成功。

MCDNN_STATUS_BAD_PARAM

未正确分配提供的handle。

5.2.1.14. mcdnnGetConvolutionBackwardFilterAlgorithm_v7()

该函数用作启发式函数,用于为给定卷积参数获取mcdnnConvolutionBackwardFilter()的最适合算法。此函数将返回按期望的(基于内部启发式)相对性能排序的所有算法(包括MCDNN_TENSOR_OP_MATH和MCDNN_DEFAULT_MATH版本的算法,其中MCDNN_TENSOR_OP_MATH可能可用),最快的是perfResults的索引0。要全面搜索最快的算法,请使用mcdnnFindConvolutionBackwardFilterAlgorithm()。可用算法的总数可以通过returnedAlgoCount变量查询。

mcdnnStatus_t mcdnnGetConvolutionBackwardFilterAlgorithm_v7(
mcdnnHandle_t                       handle,
const mcdnnTensorDescriptor_t       xDesc,
const mcdnnTensorDescriptor_t       dyDesc,
const mcdnnConvolutionDescriptor_t  convDesc,
const mcdnnFilterDescriptor_t       dwDesc,
const int                           requestedAlgoCount,
int                                 *returnedAlgoCount,
mcdnnConvolutionBwdFilterAlgoPerf_t *perfResults)

参数

handle

输入。已创建的mcDNN上下文的句柄。

xDesc

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

dyDesc

输入。已初始化的输入差分张量描述符的句柄。

convDesc

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

dwDesc

输入。已初始化的卷积核描述符的句柄。

requestedAlgoCount

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

returnedAlgoCount

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

perfResults

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

返回值

MCDNN_STATUS_SUCCESS

查询成功。

MCDNN_STATUS_BAD_PARAM

需至少满足以下任一条件:

  • 以下任一参数为NULL:handle、xDesc、dyDesc、convDesc、dwDesc、perfResults、returnedAlgoCount。

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

  • 两个张量描述符或卷积核的dataType不同。

  • requestedAlgoCount小于或等于0。

5.2.1.15. mcdnnGetConvolutionBackwardFilterWorkspaceSize()

mcdnnStatus_t mcdnnGetConvolutionBackwardFilterWorkspaceSize(
    mcdnnHandle_t                      handle,
    const mcdnnTensorDescriptor_t      xDesc,
    const mcdnnTensorDescriptor_t      dyDesc,
    const mcdnnConvolutionDescriptor_t convDesc,
    const mcdnnFilterDescriptor_t      gradDesc,
    mcdnnConvolutionBwdFilterAlgo_t    algo,
    size_t                             *sizeInBytes)

此函数返回用户应分配的GPU内存工作空间量,以便能够使用指定算法来调用mcdnnConvolutionBackwardFilter()函数。然后,分配的工作空间将传入mcdnnConvolutionBackwardFilter()函数。指定的算法可以是调用mcdnnGetConvolutionBackwardFilterAlgorithm_v7()的结果,也可以由用户任意选择。请注意,并非每个算法都可用于输入张量的每个配置和/或卷积描述符的每个配置。

参数

handle

输入。已创建的mcDNN上下文的句柄。

xDesc

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

dyDesc

输入。已初始化的输入差分张量描述符的句柄。

convDesc

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

dwDesc

输入。已初始化的卷积核描述符的句柄。

algo

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

sizeInBytes

输出。作为工作空间所需的GPU内存量,以便能够使用指定的算法执行正向卷积。

返回值

MCDNN_STATUS_SUCCESS

查询成功。

MCDNN_STATUS_BAD_PARAM

需至少满足以下任一条件:

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

  • 两个张量描述符或卷积核的dataType不同。

MCDNN_STATUS_NOT_SUPPORTED

指定的算法不支持张量描述符,卷积核描述符和卷积描述符的组合。

5.2.1.16. mcdnnGetFusedOpsConstParamPackAttribute()

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

mcdnnStatus_t mcdnnGetFusedOpsConstParamPackAttribute(
const mcdnnFusedOpsConstParamPack_t constPack,
mcdnnFusedOpsConstParamLabel_t      paramLabel,
void                                *param,
int                                 *isNULL);

参数

constPack

输入。mcdnnFusedOpsConstParamPack_t不透明结构,用于存储所选mcdnnFusedOps计算序列的各种problem size信息,例如形状,布局和张量类型,以及卷积和激活描述符。

paramLabel

输入。此getter函数可以检索多种类型的描述符。参数输入指向描述符本身,此输入表明参数输入所指向的描述符类型。mcdnnFusedOpsConstParamLabel_t枚举类型可用于选择描述符的类型。参见以下参数描述。

param

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

isNULL

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

返回值

MCDNN_STATUS_SUCCESS

已成功检索描述符值。

MCDNN_STATUS_BAD_PARAM

constPack,param或isNULL为NULL,或者paramLabel无效。

5.2.1.17. mcdnnGetFusedOpsVariantParamPackAttribute()

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

mcdnnStatus_t mcdnnGetFusedOpsVariantParamPackAttribute(
const mcdnnFusedOpsVariantParamPack_t   varPack,
mcdnnFusedOpsVariantParamLabel_t        paramLabel,
void                                    *ptr);

参数

varPack

输入。指向mcdnnFusedOps变量参数包(varPack)描述符的指针。

paramLabel

输入。缓冲区指针参数的类型(在varPack描述符中)。更多信息,参见mcdnnFusedOpsConstParamLabel_t。检索到的描述符值因类型而异。

ptr

输出。指针,指向此函数写入检索值的主机或设备内存。指针的数据类型和主机/设备内存位置取决于paramLabel的输入选择。更多信息,参见mcdnnFusedOpsVariantParamLabel_t。

返回值

MCDNN_STATUS_SUCCESS

已成功检索描述符值。

MCDNN_STATUS_BAD_PARAM

varPack或ptr为NULL,或者paramLabel的设置值无效。

5.2.1.18. mcdnnMakeFusedOpsPlan()

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

mcdnnStatus_t mcdnnMakeFusedOpsPlan(
mcdnnHandle_t                       handle,
mcdnnFusedOpsPlan_t                 plan,
const mcdnnFusedOpsConstParamPack_t constPack,
size_t                              *workspaceSizeInBytes);

参数

handle

输入。指向mcDNN库上下文的指针。

plan

输入。指向已创建和初始化的plan描述符的指针。

constPack

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

workspaceSizeInBytes

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

返回值

MCDNN_STATUS_BAD_PARAM

任意输入为NULL,或者不支持constPack描述符中的mcdnnFusedOps_t类型。

MCDNN_STATUS_SUCCESS

此函数执行成功。

5.2.1.19. mcdnnSetFusedOpsConstParamPackAttribute()

此函数用于设置参数指针输入所指向的描述符。描述符的类型由paramLabel输入的枚举值指定。

mcdnnStatus_t mcdnnSetFusedOpsConstParamPackAttribute(
mcdnnFusedOpsConstParamPack_t   constPack,
mcdnnFusedOpsConstParamLabel_t  paramLabel,
const void                      *param);

参数

constPack

输入。mcdnnFusedOpsConstParamPack_t不透明结构,用于存储卷积和激活等操作的各种problem size信息,例如形状,布局和张量类型,卷积和激活描述符,以及设置。

paramLabel

输入。此setter函数可以设置多种类型的描述符。参数输入指向描述符本身,此输入表明参数输入所指向的描述符类型。mcdnnFusedOpsConstParamLabel_t枚举类型可用于选择描述符的类型。

param

输入。数据指针,指向与特定描述符关联的主机内存。此描述符的类型取决于paramLabel的值。有关更多信息,请参见mcdnnFusedOpsConstParamLabel_t中的表格。 如果该指针设置为NULL,则mcDNN库将记录空值。如果不是,则此指针指向的值(即,值或底部的不透明结构)将在mcdnnSetFusedOpsConstParamPackAttribute()运行期间复制到constPack中。

返回值

MCDNN_STATUS_SUCCESS

描述符设置成功。

MCDNN_STATUS_BAD_PARAM

constPack为NULL,或者paramLabel或constPack的ops设置无效。

5.2.1.20. mcdnnSetFusedOpsVariantParamPackAttribute()

此函数用于设置变量参数包描述符。

mcdnnStatus_t mcdnnSetFusedOpsVariantParamPackAttribute(
mcdnnFusedOpsVariantParamPack_t     varPack,
mcdnnFusedOpsVariantParamLabel_t    paramLabel,
void                                *ptr);

参数

varPack

输入。指向mcdnnFusedOps变量参数包(varPack)描述符的指针。

paramLabel

输入。通过此函数设置的缓冲区指针参数的类型(在varPack描述符中)。更多信息,参见mcdnnFusedOpsConstParamLabel_t。

ptr

输入。主机或设备内存中的指针,指向设置的描述符参数值。指针的数据类型和主机/设备内存位置取决于paramLabel的输入选择。更多信息,参见mcdnnFusedOpsVariantParamLabel_t。

返回值

MCDNN_STATUS_BAD_PARAM

varPack为NULL,或paramLabel的设置值无效。

MCDNN_STATUS_SUCCESS

描述符设置成功。