4. mcdnn_cnn_infer

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

4.1. 数据类型参考

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

4.1.1.1. mcdnnConvolutionDescriptor_t

mcdnnConvolutionDescriptor_t是指向不透明结构的指针,该结构包含卷积操作的说明。mcdnnCreateConvolutionDescriptor()用于创建实例,且必须用mcdnnSetConvolutionNdDescriptor()或mcdnnSetConvolution2dDescriptor()来初始化此实例。

4.1.2. 结构类型

4.1.2.1. mcdnnConvolutionBwdDataAlgoPerf_t

mcdnnConvolutionBwdDataAlgorithm_t是一个结构,包含由mcdnnFindConvolutionBackwardDataAlgorithm()返回的执行结果或由mcdnnGetConvolutionBackwardDataAlgorithm_v7()返回的启发式结果(heuristic results)。

数据成员(Data Members)

mcdnnConvolutionBwdDataAlgo_t algo

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

mcdnnStatus_t status

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

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

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

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

float time

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

size_t memory

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

mcdnnDeterminism_t determinism

算法的确定性。

mcdnnMathType_t mathType

提供给算法的数学类型。

int reserved[3]

为后续属性预留的空间。

4.1.2.2. mcdnnConvolutionFwdAlgoPerf_t

mcdnnConvolutionFwdAlgoPerf_t是一个结构,包含由mcdnnFindConvolutionForwardAlgorithm()返回的执行结果或由mcdnnGetConvolutionForwardAlgorithm_v7()返回的启发式结果。

数据成员(Data Members)

mcdnnConvolutionFwdAlgo_t algo

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

mcdnnStatus_t status

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

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

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

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

float time

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

size_t memory

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

mcdnnDeterminism_t determinism

算法的确定性。

mcdnnMathType_t mathType

提供给算法的数学类型。

int reserved[3]

为后续属性预留的空间。

4.1.3. 枚举类型

4.1.3.1. mcdnnConvolutionBwdDataAlgo_t

mcdnnConvolutionBwdDataAlgo_t是一种枚举类型,暴露可用于执行反向数据卷积操作的不同算法。

MCDNN_CONVOLUTION_BWD_DATA_ALGO_1

该算法将卷积表示为矩阵乘积,但实际上并未显式形成包含输入张量数据的矩阵。结果具有确定性。

MCDNN_CONVOLUTION_BWD_DATA_ALGO_FFT_TILING

该算法使用快速傅立叶变换(Fast-Fourier Transform,FFT)方法,但将输入拆分为分块(tile)。

4.1.3.2. mcdnnConvolutionBwdFilterAlgo_t

mcdnnConvolutionBwdFilterAlgo_t是一种枚举类型,暴露可用于执行反向卷积核卷积操作的不同算法。

MCDNN_CONVOLUTION_BWD_FILTER_ALGO_1

该算法将卷积表示为矩阵乘积,但实际上并未显式形成包含输入张量数据的矩阵。结果具有确定性。

MCDNN_CONVOLUTION_BWD_FILTER_ALGO_FFT_TILING

该算法使用快速傅立叶变换方法计算卷积,但将输入张量拆分为分块(tile)。可能需要一个足够大的workspace来存储中间结果。结果具有确定性。

4.1.3.3. mcdnnConvolutionFwdAlgo_t

mcdnnConvolutionFwdAlgo_t是一种枚举类型,暴露可用于执行正向卷积操作的不同算法。

MCDNN_CONVOLUTION_FWD_ALGO_IMPLICIT_PRECOMP_GEMM

该算法将卷积表示为矩阵乘积,实际上没有显式形成包含输入张量数据的矩阵,但仍需要一些内存工作空间来预计算某些索引,以促成包含输入张量数据的隐式矩阵构造。

MCDNN_CONVOLUTION_FWD_ALGO_FFT_TILING

该算法使用快速傅立叶变换(Fast-Fourier Transform,FFT)方法,但将输入拆分为分块(tile)。

4.1.3.4. mcdnnConvolutionMode_t

mcdnnConvolutionMode_t是一种枚举类型,用于mcdnnSetConvolution2dDescriptor()配置卷积描述符。用于卷积的卷积核可以用两种不同的方式应用,在数学上对应于卷积或交叉相关(cross-correlation)。 (交叉相关相当于卷积核旋转180度的卷积。)

MCDNN_CONVOLUTION

在此模式下,将卷积核应用于图像时,将执行卷积操作。

MCDNN_CROSS_CORRELATION

在此模式下,将卷积核应用于图像时,将执行交叉相关操作。

4.1.3.5. mcdnnReorderType_t

mcdnnReorderType_t是一种枚举类型,用于设置卷积重排序类型。重排序类型可以由mcdnnSetConvolutionReorderType()设置,其状态可以由mcdnnGetConvolutionReorderType()读取。

typedef enum {
    MCDNN_DEFAULT_REORDER = 0,
    MCDNN_NO_REORDER = 1,
} mcdnnReorderType_t;

4.2. API References

4.2.1. API Functions

4.2.1.1. mcdnnCnnInferVersionCheck()

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

mcdnnStatus_t mcdnnCnnInferVersionCheck(void)

返回值

MCDNN_STATUS_SUCCESS

版本与其他子库一致。

MCDNN_STATUS_VERSION_MISMATCH

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

4.2.1.2. mcdnnConvolutionBackwardData()

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

mcdnnStatus_t mcdnnConvolutionBackwardData(
    mcdnnHandle_t                      handle,
    const void                         *alpha,
    const mcdnnFilterDescriptor_t      wDesc,
    const void                         *w,
    const mcdnnTensorDescriptor_t      dyDesc,
    const void                         *dy,
    const mcdnnConvolutionDescriptor_t convDesc,
    mcdnnConvolutionBwdDataAlgo_t      algo,
    void                               *workSpace,
    size_t                             workSpaceSizeInByte,
    const void                         *bet,
    const mcdnnTensorDescriptor_t      dxDesc,
    void                               *dx)

参数

handle

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

alpha, beta

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

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

wDesc

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

w

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

dyDesc

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

dy

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

convDesc

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

algo

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

workSpace

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

workSpaceSizeInBytes

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

dxDesc

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

dx

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

返回值

MCDNN_STATUS_SUCCESS

操作成功启动。

MCDNN_STATUS_BAD_PARAM

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

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

  • wDesc和dyDesc的维数不匹配

  • wDesc和dxDesc的维数不匹配

  • wDesc的维数小于3

  • wDesc、dxDesc和dyDesc的数据类型不匹配。

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

  • dyDesc空间大小与mcdnnGetConvolutionNdForwardOutputDim中设定的大小不匹配

MCDNN_STATUS_NOT_SUPPORTED

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

  • dyDesc或dxDesc具有负张量步幅

  • dyDesc,wDesc或dxDesc的维数不是4或5

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

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

MCDNN_STATUS_MAPPING_ERROR

在纹理对象(texture object)创建的纹理绑定过程中发生错误,该纹理对象与卷积核数据或输入差分张量数据相关联。

MCDNN_STATUS_EXECUTION_FAILED

此函数在GPU上启用失败。

支持的mcdnnConvolutionBackwardData()配置

数据类型 配置

wDescdyDescdxDesc 数据类型

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_DATA_ALGO_1 (_ALGO_1)

  • MCDNN_CONVOLUTION_BWD_DATA_ALGO_FFT_TILING (_FFT_TILING)

  • MCDNN_TENSOR_NCHW (_NCHW)

  • MCDNN_TENSOR_NHWC (_NHWC)

  • MCDNN_TENSOR_NCHW_VECT_C (_NCHW_VECT_C)

mcdnnConvolutionBackwardData() 2D卷积支持的算法:wDesc:_NHWC

算法名称

确定性 (Yes or No)

dyDesc 支持的张量 格式

dxDesc 支持的张量 格式

支持的 数据类型 配置

重要

_ALGO_1

NHWC HWC-packed

NHWC HWC-packed

TRUE_ HALF _CONFIG

PSEUDO _HALF _CONFIG

PSEUDO _BFLOAT16 _CONFIG

FLOAT _CONFIG

mcdnnConvolutionBackwardData() 2D卷积支持的算法:wDesc:_NCHW

算法名称

确定性 (Yes or No)

dyDesc 支持的张量 格式

dxDesc 支持的张量 格式

支持的 数据类型 配置

重要

_ALGO_1

Yes

NCHW CHW-packed

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

TRUE _HALF _CONFIG

PSEUDO _HALF _CONFIG

PSEUDO _BFLOAT16 _CONFIG

FLOAT _CONFIG

DOUBLE _CONFIG

所有维度 大于0

convDesc 组计数支 持:大于0

_FFT _TILING

Yes

NCHW CHW-packed

NCHW HW-packed

PSEUDO _HALF _CONFIG

FLOAT _CONFIG

当任务可以 由1D FFT处 理时,也支 持 DOUBLE _CONFIG,

即卷积核 宽度或高度 为1

1适用于所有 维度

convDesc 组计数支持: 大于0

wDesc 卷积核维度 都不为1时, 卷积核宽度和 高度不得大于 32

wDesc 卷积核任一 维度为1时, 卷积核最大 维度不应超过 256

当卷积核宽度 或高度为1时, convDesc 垂直与水平 卷积核步幅 必须为1; 否则,步幅 可以为1或2

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

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

mcdnnConvolutionBackwardData() 3D卷积支持的算法:wDesc:_NCHW

算法名称

确定性 (Yes or No)

dyDesc 支持的张量 格式

dxDesc 支持的张量 格式

支持的 数据类型 配置

重要

_ALGO_1

Yes

NCDHW CDHW-packed

NCDHW CDHW- packed

TRUE _HALF _CONFIG

PSEUDO _BFLOAT16 _CONFIG

PSEUDO _HALF _CONFIG

FLOAT_CO NFIGDOUBLE _CONFIG

1适用于 所有维度

convDesc 组计数支持 :大于0

_FFT _TILING

Yes

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 零填充深度

mcdnnConvolutionBackwardData() 3D卷积支持的算法:wDesc:_NHWC

算法名称

确定性 (Yes or No)

dyDesc 支持的张量 格式

dxDesc 支持的张量 格式

支持的 数据类型 配置

重要

_ALGO_1

Yes

NDHWC DHWC- packed

NDHWC DHWC- packed

TRUE _HALF _CONFIG

PSEUDO _HALF _CONFIG

PESUDO _BFLOAT16 _CONFIG

FLOAT _CONFIG

所有维度 大于0

convDesc 组 计数支持: 大于0

4.2.1.3. mcdnnConvolutionBiasActivationForward()

该函数对mcdnnConvolutionForward()的卷积或交叉相关操作,应用bias然后再应用激活,以y返回结果。完整计算遵循公式:y = act ( alpha1 * conv(x) + alpha2 * z + bias )。

mcdnnStatus_t mcdnnConvolutionBiasActivationForward(
    mcdnnHandle_t                      handle,
    const void                         *alpha1,
    const mcdnnTensorDescriptor_t      xDesc,
    const void                         *x,
    const mcdnnFilterDescriptor_t      wDesc,
    const void                         *w,
    const mcdnnConvolutionDescriptor_t convDesc,
    mcdnnConvolutionFwdAlgo_t          algo,
    void                               *workSpace,
    size_t                             workSpaceSizeInBytes,
    const void                         *alpha2,
    const mcdnnTensorDescriptor_t      zDesc,
    const void                         *z,
    const mcdnnTensorDescriptor_t      biasDesc,
    const void                         *bias,
    const mcdnnActivationDescriptor_t  activationDesc,
    const mcdnnTensorDescriptor_t      yDesc,
    void                               *y)

mcdnnGetConvolution2dForwardOutputDim()或mcdnnGetConvolutionNdForwardOutputDim()函数可用于确定输出张量描述符yDesc的正确维度,yDesc是关于xDesc、convDesc和wDesc的输出张量描述符。 仅MCDNN_CONVOLUTION_FWD_ALGO_IMPLICIT_PRECOMP_GEMM算法可以与MCDNN_ACTIVATION_IDENTITY一起启用。换言之,在activationDesc输入的mcdnnActivationDescriptor_t结构中,如果mcdnnActivationMode_t字段的模式设置为枚举值MCDNN_ACTIVATION_IDENTITY,则mcdnnConvolutionBiasActivationForward()函数的mcdnnConvolutionFwdAlgo_t输入必须设置为枚举值MCDNN_CONVOLUTION_FWD_ALGO_IMPLICIT_PRECOMP_GEMM。更多信息,参见mcdnnSetActivationDescriptor()。 设备指针z和y可能指向同一缓冲区,但是x不能与z或y指向同一缓冲区。

参数

handle

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

alpha1, alpha2

输入。指向缩放系数(主机内存中)的指针,用于将卷积计算结果与z和bias混合,如下所示:

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

xDesc

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

x

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

wDesc

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

w

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

convDesc

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

algo

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

workSpace

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

workSpaceSizeInBytes

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

zDesc

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

z

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

biasDesc

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

bias

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

activationDesc

输入。已初始化的激活描述符的句柄。更多信息,参见mcdnnActivationDescriptor_t。

yDesc

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

y

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

返回值

除了mcdnnConvolutionForward()中列出的错误值之外,下面列出了此函数可能返回的错误值及其含义。

MCDNN_STATUS_SUCCESS

操作成功启动。

MCDNN_STATUS_BAD_PARAM

需至少满足以下任一条件: * 以下至少有一个为NULL:handle、xDesc、wDesc、convDesc、yDesc、zDesc、biasDesc、activationDesc、xData、wData、yData、zData、bias、alpha1、alpha2。

  • xDesc、wDesc、yDesc和zDesc的维数不等于convDesc数组长度 + 2。

MCDNN_STATUS_NOT_SUPPORTED

此函数不支持已提供的配置。不受支持的配置示例如下:

  • activationDesc的模式不是MCDNN_ACTIVATION_RELU或MCDNN_ACTIVATION_IDENTITY。

  • activationDesc的reluNanOpt不是MCDNN_NOT_PROPAGATE_NAN。

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

  • biasDesc的第一维不等于1。

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

  • biasDesc的数据类型和yDesc的数据类型,没有与以下数据类型表列出的组合匹配。

  • zDesc和destDesc不匹配。

MCDNN_STATUS_EXECUTION_FAILED

此函数在GPU上启用失败。

mcdnnConvolutionBiasActivationForward()支持的数据类型组合(X = MCDNN_DATA)

x

w

conv Desc

yz

bias

alpha1/ alpha2

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_BF LOAT16

X_BF LOAT16

X _FLOAT

X_BF LOAT16

X_BF LOAT16

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_U INT8x4

X_ INT8x4

X _INT32

X_ INT8x4

X _FLOAT

X _FLOAT

X_U INT8x4

X_ INT8x4

X _INT32

X _FLOAT

X _FLOAT

X _FLOAT

X_I NT8x32

X_I NT8x32

X _INT32

X_I NT8x32

X _FLOAT

X _FLOAT

4.2.1.4. mcdnnConvolutionForward()

mcdnnStatus_t mcdnnConvolutionForward(
    mcdnnHandle_t                      handle,
    const void                         *alpha,
    const mcdnnTensorDescriptor_t      xDesc,
    const void                         *x,
    const mcdnnFilterDescriptor_t      wDesc,
    const void                         *w,
    const mcdnnConvolutionDescriptor_t convDesc,
    mcdnnConvolutionFwdAlgo_t          algo,
    void                               *workSpace,
    size_t                             workSpaceSizeInBytes,
    const void                         *beta,
    const mcdnnTensorDescriptor_t      yDesc,
    void                               *y)

该函数使用w指定的卷积核以x执行卷积或交叉相关操作,以y返回结果。缩放系数alpha和beta可分别用于缩放输入和输出张量。

备注

mcdnnGetConvolution2dForwardOutputDim()或mcdnnGetConvolutionNdForwardOutputDim()函数可用于确定输出张量描述符yDesc的正确维度,yDesc是关于xDesc、convDesc和wDesc的输出张量描述符。

参数

handle

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

alpha, beta

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

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

xDesc

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

x

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

wDesc

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

w

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

convDesc

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

algo

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

workSpace

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

workSpaceSizeInBytes

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

yDesc

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

y

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

返回值

MCDNN_STATUS_SUCCESS

操作成功启动。

MCDNN_STATUS_BAD_PARAM

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

  • 以下至少有一个为NULL:handle、xDesc、wDesc、convDesc、yDesc、xData、w、yData、alpha、beta

  • xDesc和yDesc的维数不匹配

  • xDesc和wDesc的维数不匹配

  • xDesc的维数小于3

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

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

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

  • xDesc、wDesc和yDesc的数据类型不匹配

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

MCDNN_STATUS_NOT_SUPPORTED

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

  • xDesc或yDesc具有负张量步幅

  • xDesc,wDesc或yDesc的维数不是4或5

  • yDesc空间大小与mcdnnGetConvolutionNdForwardOutputDim()中设定的大小不匹配

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

MCDNN_STATUS_MAPPING_ERROR

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

MCDNN_STATUS_EXECUTION_FAILED

此函数在GPU上启用失败。

mcdnnConvolutionForward()支持的配置

数据类型 配置

xDescwDesc

convDesc

yDesc

TRUE_HALF_ CONFIG (仅支持 true FP16架构)

MCDNN_ DATA_HALF

MCDNN_ DATA_HALF

MCDNN_ DATA_HALF

PSEUDO _HALF_CONFIG

MCDNN_ DATA_HALF

MCDNN_ DATA_FLOAT

MCDNN_ DATA_HALF

PSEUDO_BFLOAT 16_CONFIG (仅支持 bfloat16 架构

MCDNN_ DATA_BFLOAT16

MCDNN_ DATA_FLOAT

MCDNN_ DATA_BFLOAT16

FLOAT_CONFIG

MCDNN_ DATA_FLOAT

MCDNN_ DATA_FLOAT

MCDNN_ DATA_FLOAT

DOUBLE_CONFIG

MCDNN_ DATA_DOUBLE

MCDNN_ DATA_DOUBLE

MCDNN_ DATA_DOUBLE

INT8_CONFIG (仅支持DP4A 架构)

MCDNN_ DATA_INT8

MCDNN_ DATA_INT32

MCDNN_ DATA_INT8

INT8_ EXT_CONFIG (仅支持DP4A 架构)

MCDNN_ DATA_INT8

MCDNN_ DATA_INT32

MCDNN_ DATA_FLOAT

INT8x4_ CONFIG (仅支持DP4A 架构)

MCDNN_ DATA_INT8x4

MCDNN_ DATA_INT32

MCDNN_ DATA_INT8x4

INT8x4_EXT _CONFIG (仅支持DP4A 架构)

MCDNN_ DATA_INT8x4

MCDNN_ DATA_INT32

MCDNN_ DATA_FLOAT

UINT8_CONFIG (仅支持DP4A 架构)

xDesc: MCDNN_DATA_ UINT8

wDesc: MCDNN_DATA_ INT8

MCDNN_ DATA_INT32

MCDNN_ DATA_INT8

UINT8x4_ CONFIG (仅支持DP4A 架构)

xDesc: MCDNN_DATA_ UINT8x4

wDesc: MCDNN_DATA_ INT8x4

MCDNN_ DATA_INT32

MCDNN_ DATA_INT8x4

UINT8_EXT_ CONFIG (仅支持DP4A 架构)

xDesc: MCDNN_DATA_ UINT8

wDesc: MCDNN_DATA_ INT8

MCDNN_ DATA_INT32

MCDNN_ DATA_FLOA

UINT8x4_ EXT_CONFIG (仅支持DP4A 架构)

xDesc: MCDNN_ DATA_UINT8x4

wDesc: MCDNN_DATA _INT8x4

MCDNN_DATA _INT32

MCDNN_DATA _FLOAT

INT8x32_ CONFIG (仅支持DP4A 架构)

MCDNN_ DATA_INT8x32

MCDNN_ DATA_INT32

MCDNN_ DATA_INT8x32

支持的算法

  • MCDNN_CONVOLUTION_FWD_ALGO_IMPLICIT_PRECOMP_GEMM (_IMPLICIT_PRECOMP_GEMM)

  • MCDNN_CONVOLUTION_FWD_ALGO_FFT_TILING (_FFT_TILING)

  • MCDNN_TENSOR_NCHW (_NCHW)

  • MCDNN_TENSOR_NHWC (_NHWC)

  • MCDNN_TENSOR_NCHW_VECT_C (_NCHW_VECT_C)

mcdnnConvolutionForward() 2D卷积支持的算法:wDesc: _NCHW

算法名称

xDesc 支持的 张量格式

yDesc 支持的 张量格式

支持的 数据类型 配置

重要

_IMPLICIT_ PRECOMP_ GEMM

除 _NCHW_ VECT_C 之外 的其他格式

除 _NCHW_ VECT_C 之外 的其他格式

TRUE_HALF_ CONFIG

PSEUDO_HALF _CONFIG

PSEUDO_ BFLOAT16_ CONFIG

FLOAT_ CONFIG

DOUBLE_ CONFIG

1适用于所有 维度

_FFT_ TILING

PSEUDO_HALF _CONFIG

FLOAT _CONFIG

当任务可以 由1D FFT 处理时, 也支持 DOUBLE_ CONFIG, 即卷积核 宽度或高度 为1

1适用于所有 维度

当 wDesc 卷积核维度 都不为1时, 卷积核宽度和 高度不得大于 32

当 wDesc 卷积核任一 维度为1时, 卷积核最大 维度不应超过 256

当卷积核宽度 或高度为1 时,convDesc 垂直与水平 卷积核步幅 必须为1; 否则,步幅 可以为1或2

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

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

mcdnnConvolutionForward() 2D卷积支持的算法:wDesc: _NCHWC

算法名称

xDesc

yDesc

支持的 数据类型配置

重要

_IMPLICIT_ PRECOMP _GEMM

_NCHW _VECT_C

_NCHW_ VECT_C

INT8 x4_CONFIG

UINT8 x4_CONFIG

1适用于 所有维度

_IMPLICIT_ PRECOMP_ GEMM

_NCHW_ VECT_C

_NCHW_ VECT_C

INT8x 32_CONFIG

1适用于 所有维度

mcdnnConvolutionForward() 2D卷积支持的算法:wDesc: _NHWC

算法名称

xDesc

yDesc

支持的 数据类型配置

重要

_IMPLICIT _PRECOMP_ GEMM

NHWC fully-packed

NHWC fully-packed

INT8 _CONFIG

INT8_EXT _CONFIG

UINT8 _CONFIG

UINT8_EXT _CONFIG

1适用于 所有维度

输入和输出 特征图必须为 4的倍数

在 INT8_EXT _CONFIG 或 UINT8_EXT _CONFIG 的 情况下, 输出特征图 可以为非倍数

_IMPLICIT _PRECOMP _GEMM

NHWC HWC-packed

NHWC HWC-packed

NCHW CHW-packed

TRUE_HA LF_CONFIG

PSEUDO_HA LF_CONFIG

PSEUDO _BFLOAT 16_CONFIG

FLOAT _CONFIG

DOUBLE _CONFIG

mcdnnConvolutionForward() 3D卷积支持的算法:wDesc: _NCHW

算法名称

xDesc

yDesc

支持的 数据类 型配置

重要

_IMPLICIT _PRECOMP_ GEMM

所有维度大于 0

_FFT _TILING

NCDHW DHW-packed

NCDHW DHW-packed

1适用于所有 维度

wDesc 卷积核高度 必须小于 等于16

wDesc 卷积核宽度 必须小于 等于16

wDesc 卷积核深度 必须小于 等于16

convDesc 所有卷积核 步幅为1

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

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

wDesc 卷积核深度 必须大于 convDesc 零填充深度

mcdnnConvolutionForward() 3D卷积支持的算法:wDesc: _NHWC

算法名称

xDesc

yDesc

支持的 数据类型配置

重要

_IMPLICIT _PRECOMP _GEMM

NDHWC DHWC-packed

NDHWC DHWC-packed

PSEUDO_HALF _CONFIG

PSEUDO _BFLOAT 16_CONFIG

FLOAT _CONFIG

所有维度大于 0

4.2.1.5. mcdnnCreateConvolutionDescriptor()

mcdnnStatus_t mcdnnCreateConvolutionDescriptor(
                  mcdnnConvolutionDescriptor_t *convDesc)

此函数通过分配保存卷积描述符不透明结构所需内存的方式,创建卷积描述符对象。更多信息,参见mcdnnConvolutionDescriptor_t。

参数

convDesc

输出。卷积层描述符。

返回值

MCDNN_STATUS_SUCCESS

对象创建成功。

MCDNN_STATUS_ALLOC_FAILED

资源无法分配。

4.2.1.6. mcdnnDestroyConvolutionDescriptor()

mcdnnStatus_t mcdnnDestroyConvolutionDescriptor(
                  mcdnnConvolutionDescriptor_t convDesc)

此函数用于销毁已创建的卷积描述符对象。

返回值

MCDNN_STATUS_SUCCESS

描述符销毁成功。

4.2.1.7. mcdnnFindConvolutionBackwardDataAlgorithm()

mcdnnStatus_t mcdnnFindConvolutionBackwardDataAlgorithm(
                    mcdnnHandle_t handle,
                    const mcdnnFilterDescriptor_t wDesc,
                    const mcdnnTensorDescriptor_t dyDesc,
                    const mcdnnConvolutionDescriptor_t convDesc,
                    const mcdnnTensorDescriptor_t dxDesc,
                    int requestedAlgoCount,
                    int *returnedAlgoCount,
                    mcdnnConvolutionBwdDataAlgoPerf_t *perfResults)

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

备注

  • 只能使用MCDNN_FMA_MATH 尝试没有 MCDNN_TENSOR_OP_MATH可用性的算法,并以同样方式返回。

  • 对于MCDNN_DATA_FLOAT,MCDNN_FMA_MATH将使用float类型计算,其它MATH_TYPE将使用tf32类型计算。

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

备注

  • 此函数是主机阻塞。

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

参数

handle

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

wDesc

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

dyDesc

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

convDesc

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

dxDesc

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

requestedAlgoCount

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

returnedAlgoCount

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

perfResults

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

返回值

MCDNN_STATUS_SUCCESS

查询成功。

MCDNN_STATUS_BAD_PARAM

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

  • 未正确分配handle。

  • 未正确分配wDesc、dyDesc或dxDesc。

  • wDesc,dyDesc或dxDesc的维度小于1。

  • returnedCount或perfResults为nil。

  • requestedCount小于1。

MCDNN_STATUS_ALLOC_FAILED

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

MCDNN_STATUS_INTERNAL_ERROR

遇到一些内部错误。

4.2.1.8. mcdnnFindConvolutionBackwardDataAlgorithmEx()

mcdnnStatus_t mcdnnFindConvolutionBackwardDataAlgorithmEx(
    mcdnnHandle_t                      handle,
    const mcdnnFilterDescriptor_t      wDesc,
    const void                         *w,
    const mcdnnTensorDescriptor_t      dyDesc,
    const void                         *dy,
    const mcdnnConvolutionDescriptor_t convDesc,
    const mcdnnTensorDescriptor_t      dxDesc,
    void                               *dx,
    int                                requestedAlgoCount,
    int                                *returnedAlgoCount,
    mcdnnConvolutionBwdDataAlgoPerf_t  *perfResults,
    void                               *workSpace,
    size_t                             workSpaceSizeInBytes)

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

备注

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

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

备注

此函数是主机阻塞。

参数

handle

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

wDesc

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

w

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

dyDesc

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

dy

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

convDesc

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

dxDesc

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

dxDesc

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

requestedAlgoCount

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

returnedAlgoCount

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

perfResults

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

workSpace

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

workSpaceSizeInBytes

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

返回值

MCDNN_STATUS_SUCCESS

查询成功。

MCDNN_STATUS_BAD_PARAM

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

  • 未正确分配handle。

  • 未正确分配wDesc、dyDesc或dxDesc。

  • wDesc,dyDesc或dxDesc的维度小于1。

  • w,dy或dx为nil。

  • returnedCount或perfResults为nil。

  • requestedCount小于1。

MCDNN_STATUS_INTERNAL_ERROR

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

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

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

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

4.2.1.9. mcdnnFindConvolutionForwardAlgorithm()

mcdnnStatus_t mcdnnFindConvolutionForwardAlgorithm(
                  mcdnnHandle_t                       handle,
                  const mcdnnTensorDescriptor_t       xDesc,
                  const mcdnnFilterDescriptor_t       wDesc,
                  const mcdnnConvolutionDescriptor_t  convDesc,
                  const mcdnnTensorDescriptor_t       yDesc,
                  int                                 requestedAlgoCount,
                  int                                 *returnedAlgoCount,
                  mcdnnConvolutionFwdAlgoPerf_t       *perfResults)

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

备注

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

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

备注

  • 此函数是主机阻塞。

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

参数

handle

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

xDesc

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

wDesc

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

convDesc

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

yDesc

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

requestedAlgoCount

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

returnedAlgoCount

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

perfResults

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

返回值

MCDNN_STATUS_SUCCESS

查询成功。

MCDNN_STATUS_BAD_PARAM

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

  • 未正确分配handle。

  • 未正确分配xDesc、wDesc或yDesc。

  • xDesc、wDesc或yDesc的维度小于1。

  • returnedCount或perfResults为nil。

  • requestedCount小于1。

MCDNN_STATUS_ALLOC_FAILED

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

MCDNN_STATUS_INTERNAL_ERROR

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

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

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

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

4.2.1.10. mcdnnFindConvolutionForwardAlgorithmEx()

mcdnnStatus_t mcdnnFindConvolutionForwardAlgorithmEx(
      mcdnnHandle_t                      handle,
      const mcdnnTensorDescriptor_t      xDesc,
      const void                         *x,
      const mcdnnFilterDescriptor_t      wDesc,
      const void                         *w,
      const mcdnnConvolutionDescriptor_t convDesc,
      const mcdnnTensorDescriptor_t      yDesc,
      void                               *y,
      int                                requestedAlgoCount,
      int                                *returnedAlgoCount,
      mcdnnConvolutionFwdAlgoPerf_t      *perfResults,
      void                               *workSpace,
      size_t                             workSpaceSizeInBytes)

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

备注

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

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

备注

此函数是主机阻塞。

参数

handle

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

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大小(以字节为单位)。

返回值

MCDNN_STATUS_SUCCESS

查询成功。

MCDNN_STATUS_BAD_PARAM

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

  • 未正确分配handle。

  • 未正确分配xDesc、wDesc或yDesc。

  • xDesc、wDesc或yDesc的维度小于1。

  • x、w或y为nil。

  • returnedCount或perfResults为nil。

  • requestedCount小于1。

MCDNN_STATUS_INTERNAL_ERROR

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

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

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

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

4.2.1.11. mcdnnGetConvolution2dDescriptor()

mcdnnStatus_t mcdnnGetConvolution2dDescriptor(
      const mcdnnConvolutionDescriptor_t convDesc,
      int                                *pad_h,
      int                                *pad_w,
      int                                *u,
      int                                *v,
      int                                *dilation_h,
      int                                *dilation_w,
      mcdnnConvolutionMode_t             *mode,
      mcdnnDataType_t                    *computeType)

此函数用于查询已初始化的2D卷积描述符对象。

参数

convDesc

输入/输出。已创建的卷积描述符的句柄。

pad_h

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

pad_w

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

u

输出。垂直卷积核步幅。

v

输出。水平卷积核步幅。

dilation_h

输出。卷积核高度扩张。

dilation_w

输出。卷积核宽度扩张。

mode

输出。卷积模式。

computeType

输出。计算精度。

返回值

MCDNN_STATUS_SUCCESS

操作成功。

MCDNN_STATUS_BAD_PARAM

convDesc参数为nil。

4.2.1.12. mcdnnGetConvolution2dForwardOutputDim()

mcdnnStatus_t mcdnnGetConvolution2dForwardOutputDim(
      const mcdnnConvolutionDescriptor_t convDesc,
      const mcdnnTensorDescriptor_t      inputTensorDesc,
      const mcdnnFilterDescriptor_t      filterDesc,
      int                                *n,
      int                                *c,
      int                                *h,
      int                                *w)

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

输出图像的各维度h和w计算如下:

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

备注

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

参数

convDesc

输入。已创建的卷积描述符的句柄。

inputTensorDesc

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

filterDesc

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

n

输出。输出图像数量。

c

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

h

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

w

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

返回值

MCDNN_STATUS_BAD_PARAM

一个或多个描述符未正确创建,或者inputTensorDesc和filterDesc的特征图不匹配。

MCDNN_STATUS_SUCCESS

对象设置成功。

4.2.1.13. mcdnnGetConvolutionBackwardDataAlgorithmMaxCount()

mcdnnStatus_t mcdnnGetConvolutionBackwardDataAlgorithmMaxCount(
                    mcdnnHandle_t handle, int *count)

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

参数

handle

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

count

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

返回值

MCDNN_STATUS_SUCCESS

此函数执行成功。

MCDNN_STATUS_BAD_PARAM

未正确分配提供的handle。

4.2.1.14. mcdnnGetConvolutionBackwardDataAlgorithm_v7()

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

mcdnnStatus_t mcdnnGetConvolutionBackwardDataAlgorithm_v7(
    mcdnnHandle_t                       handle,
    const mcdnnFilterDescriptor_t       wDesc,
    const mcdnnTensorDescriptor_t       dyDesc,
    const mcdnnConvolutionDescriptor_t  convDesc,
    const mcdnnTensorDescriptor_t       dxDesc,
    const int                           requestedAlgoCount,
    int                                 *returnedAlgoCount,
    mcdnnConvolutionBwdDataAlgoPerf_t   *perfResults)

参数

handle

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

wDesc

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

dyDesc

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

convDesc

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

dxDesc

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

requestedAlgoCount

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

returnedAlgoCount

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

perfResults

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

返回值

MCDNN_STATUS_SUCCESS

查询成功。

MCDNN_STATUS_BAD_PARAM

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

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

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

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

requestedAlgoCount小于或等于0。

4.2.1.15. mcdnnGetConvolutionBackwardDataWorkspaceSize()

mcdnnStatus_t mcdnnGetConvolutionBackwardDataWorkspaceSize(
    mcdnnHandle_t                      handle,
    const mcdnnFilterDescriptor_t      wDesc,
    const mcdnnTensorDescriptor_t      dyDesc
    const mcdnnConvolutionDescriptor_t convDesc,
    const mcdnnTensorDescriptor_t      dxDesc,
    mcdnnConvolutionBwdDataAlgo_t      algo,
    size_t                             *sizeInBytes)

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

参数

handle

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

wDesc

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

dyDesc

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

convDesc

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

dxDesc

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

algo

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

sizeInBytes

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

返回值

MCDNN_STATUS_SUCCESS

查询成功。

MCDNN_STATUS_BAD_PARAM

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

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

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

MCDNN_STATUS_NOT_SUPPORTED

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

4.2.1.16. mcdnnGetConvolutionForwardAlgorithmMaxCount()

mcdnnStatus_t mcdnnGetConvolutionForwardAlgorithmMaxCount(
                  mcdnnHandle_t handle, int *count)

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

参数

handle

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

count

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

返回值

MCDNN_STATUS_SUCCESS

此函数执行成功。

MCDNN_STATUS_BAD_PARAM

未正确分配提供的handle。

4.2.1.17. mcdnnGetConvolutionForwardAlgorithm_v7

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

mcdnnStatus_t mcdnnGetConvolutionForwardAlgorithm_v7(
    mcdnnHandle_t                       handle,
    const mcdnnTensorDescriptor_t       xDesc,
    const mcdnnFilterDescriptor_t       wDesc,
    const mcdnnConvolutionDescriptor_t  convDesc,
    const mcdnnTensorDescriptor_t       yDesc,
    const int                           requestedAlgoCount,
    int                                 *returnedAlgoCount,
    mcdnnConvolutionFwdAlgoPerf_t       *perfResults)

参数

handle

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

xDesc

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

wDesc

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

convDesc

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

yDesc

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

requestedAlgoCount

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

returnedAlgoCount

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

perfResults

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

返回值

MCDNN_STATUS_SUCCESS

查询成功。

MCDNN_STATUS_BAD_PARAM

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

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

  • yDesc或wDesc的维度与xDesc不同。

  • xDesc,yDesc或wDesc张量的数据类型不全相同。

  • xDesc和wDesc中的特征图数量不同。

  • xDesc张量的维度小于3。

  • requestedAlgoCount小于或等于0。

4.2.1.18. mcdnnGetConvolutionForwardWorkspaceSize()

mcdnnStatus_t mcdnnGetConvolutionForwardWorkspaceSize(
    mcdnnHandle_t                      handle,
    const mcdnnTensorDescriptor_t      xDesc,
    const mcdnnFilterDescriptor_t      wDesc,
    const mcdnnConvolutionDescriptor_t convDesc,
    const mcdnnTensorDescriptor_t      yDesc,
    mcdnnConvolutionFwdAlgo_t          algo,
    size_t                             *sizeInBytes)

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

参数

handle

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

xDesc

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

wDesc

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

convDesc

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

yDesc

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

algo

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

sizeInBytes

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

返回值

MCDNN_STATUS_SUCCESS

查询成功。

MCDNN_STATUS_BAD_PARAM

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

  • 以下任一参数为NULL:handle、xDesc、wDesc、convDesc、yDesc。

  • yDesc或wDesc张量与xDesc的维度不同。

  • xDesc,yDesc或wDesc张量的数据不全相同类型。

  • xDesc和wDesc中的特征图数量不同。

  • xDesc张量的维度小于3。

MCDNN_STATUS_NOT_SUPPORTED

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

4.2.1.19. mcdnnGetConvolutionGroupCount()

mcdnnStatus_t mcdnnGetConvolutionGroupCount(
      mcdnnConvolutionDescriptor_t convDesc,
      int                          *groupCount);

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

参数

convDesc

输入。卷积层描述符。

groupCount

Output。组数。

返回值

MCDNN_STATUS_SUCCESS

组计数返回成功。

MCDNN_STATUS_BAD_PARAM

提供的卷积描述符无效。

4.2.1.20. mcdnnGetConvolutionMathType()

mcdnnStatus_t mcdnnGetConvolutionMathType(
mcdnnConvolutionDescriptor_t    convDesc,
mcdnnMathType_t                 *mathType)

返回值

MCDNN_STATUS_SUCCESS

数学类型返回成功。

MCDNN_STATUS_BAD_PARAM

提供的卷积描述符无效。

4.2.1.21. mcdnnGetConvolutionNdDescriptor()

mcdnnStatus_t mcdnnGetConvolutionNdDescriptor(
const mcdnnConvolutionDescriptor_t  convDesc,
int                                 arrayLengthRequested,
int                                 *arrayLength,
int                                 padA[],
int                                 filterStrideA[],
int                                 dilationA[],
mcdnnConvolutionMode_t              *mode,
mcdnnDataType_t                     *dataType)

参数

convDesc

输入/输出。已创建的卷积描述符的句柄。

arrayLengthRequested

输入。期望的卷积描述符的维度。也是padA、filterStrideA、dilationA数组能够保存结果的的最小空间。

arrayLength

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

padA

输出。至少包含arrayLengthRequested维度的数组,由提供的卷积描述符中的padding参数填充。

filterStrideA

输出。至少包含arrayLengthRequested维度的数组,由提供的卷积描述符中的filter步幅填充。

dilationA

输出。至少包含arrayLengthRequested维度的数组,由提供的卷积描述符中的dilation参数填充。

mode

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

datatype

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

返回值

MCDNN_STATUS_SUCCESS

查询成功。

MCDNN_STATUS_BAD_PARAM

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

  • convDesc描述符为nil。

  • arrayLengthRequest为负值。

MCDNN_STATUS_NOT_SUPPORTED

arrayLengthRequested大于MCDNN_DIM_MAX - 2。

4.2.1.22. mcdnnGetConvolutionNdForwardOutputDim()

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

mcdnnStatus_t mcdnnGetConvolutionNdForwardOutputDim(
const mcdnnConvolutionDescriptor_t  convDesc,
const mcdnnTensorDescriptor_t       inputTensorDesc,
const mcdnnFilterDescriptor_t       filterDesc,
int                                 nbDims,
int                                 tensorOuputDimA[])

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

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

备注

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

参数

convDesc

输入。已创建的卷积描述符的句柄。

inputTensorDesc

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

filterDesc

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

nbDims

输入。输出张量的维度。

tensorOuputDimA

输出。nbDims维度数组,该数组包含此函数退出时输出张量的大小。

返回值

MCDNN_STATUS_BAD_PARAM

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

  • 以下任一参数为nil:convDesc、inputTensorDesc、filterDesc。

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

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

  • filterDesc卷积核描述符的特征图与inputTensorDesc输入张量描述符的特征图不同。

  • 扩张卷积核filterDesc的尺寸大于输入张量的填充尺寸。

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

MCDNN_STATUS_SUCCESS

函数退出成功。

4.2.1.23. mcdnnGetConvolutionReorderType()

mcdnnStatus_t mcdnnGetConvolutionReorderType(
      mcdnnConvolutionDescriptor_t convDesc,
      mcdnnReorderType_t           *reorderType)

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

参数

convDesc

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

reorderType

输出。检索到的重排序类型。更多信息,参见mcdnnReorderType_t。

返回值

MCDNN_STATUS_SUCCESS

已成功检索重排序类型。

MCDNN_STATUS_BAD_PARAM

此函数的任一输入无效。

4.2.1.24. mcdnnGetFoldedConvBackwardDataDescriptors()

此函数计算折叠描述符的反向数据梯度。将数据描述符和卷积描述符作为输入,并计算折叠数据描述符和折叠转换(folding transform)描述符。然后可以使用它们来执行实际的折叠转换。

mcdnnStatus_t
mcdnnGetFoldedConvBackwardDataDescriptors(const mcdnnHandle_t handle,
const mcdnnFilterDescriptor_t       filterDesc,
const mcdnnTensorDescriptor_t       diffDesc,
const mcdnnConvolutionDescriptor_t  convDesc,
const mcdnnTensorDescriptor_t       gradDesc,
const mcdnnTensorFormat_t           transformFormat,
mcdnnFilterDescriptor_t             foldedFilterDesc,
mcdnnTensorDescriptor_t             paddedDiffDesc,
mcdnnConvolutionDescriptor_t        foldedConvDesc,
mcdnnTensorDescriptor_t             foldedGradDesc,
mcdnnTensorTransformDescriptor_t    filterFoldTransDesc,
mcdnnTensorTransformDescriptor_t    diffPadTransDesc,
mcdnnTensorTransformDescriptor_t    gradFoldTransDesc,
mcdnnTensorTransformDescriptor_t    gradUnfoldTransDesc);

参数

handle

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

filterDesc

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

diffDesc

输入。折叠前的diff描述符。

convDesc

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

gradDesc

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

transformFormat

输入。用于折叠的转换格式。

foldedFilterDesc

输出。已折叠的卷积核描述符。

paddedDiffDesc

输出。已填充的diff描述符。

foldedConvDesc

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

foldedGradDesc

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

filterFoldTransDesc

输出。卷积核的折叠转换描述符。

diffPadTransDesc

输出。Desc的折叠转换描述符。

gradFoldTransDesc

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

gradUnfoldTransDesc

输出。已折叠梯度的展开转换描述符。

返回值

MCDNN_STATUS_SUCCESS

已成功计算折叠描述符。

MCDNN_STATUS_BAD_PARAM

如果任意输入参数为NULL或如果输入张量超过4个维度。

MCDNN_STATUS_EXECUTION_FAILED

计算折叠描述符失败。

4.2.1.25. mcdnnIm2Col()

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

mcdnnStatus_t mcdnnIm2Col(
mcdnnHandle_t                   handle,
mcdnnTensorDescriptor_t         srcDesc,
const void                      *srcData,
mcdnnFilterDescriptor_t         filterDesc,
mcdnnConvolutionDescriptor_t    convDesc,
void                            *colBuffer)

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

  • batch_size是srcDesc第一维

  • y_height和y_width是由mcdnnGetConvolutionNdForwardOutputDim()计算得出

  • input_channels是srcDesc第二维(在NCHW布局中)

  • filter_height和filter_width是wDesc第三和第四维

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

参数

handle

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

srcDesc

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

srcData

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

filterDesc

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

convDesc

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

colBuffer

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

返回值

MCDNN_STATUS_BAD_PARAM

srcData或colBuffer为NULL。

MCDNN_STATUS_NOT_SUPPORTED

srcDesc、filterDesc、convDesc的dataType为MCDNN_DATA_INT8,MCDNN_DATA_INT8x4,MCDNN_DATA_INT8或MCDNN_DATA_INT8x4。 convDesc的groupCount大于1。

MCDNN_STATUS_EXECUTION_FAILED

MXMACA内核执行失败。

MCDNN_STATUS_SUCCESS

输出数据组生成成功。

4.2.1.26. mcdnnReorderFilterAndBias

mcdnnReorderFilterAndBias()函数对数据类型为MCDNN_DATA_INT8x32且张量格式为MCDNN_TENSOR_NCHW_VECT_C的张量,进行卷积核和bias值的重排序。它可用于通过分离重排序操作与卷积来加速推理时间。当前仅支持2D卷积核(filter)。

mcdnnStatus_t mcdnnReorderFilterAndBias(
mcdnnHandle_t                   handle,
const mcdnnFilterDescriptor_t   filterDesc,
mcdnnReorderType_t              reorderType,
const void                      *filterData,
void                            *reorderedFilterData,
int                             reorderBias,
const void                      *biasData,
void                            *reorderedBiasData);

数据类型为MCDNN_DATA_INT8x32的卷积核和bias张量(也表示MCDNN_TENSOR_NCHW_VECT_C张量格式)需要进行输出通道轴置换,以便利用Tensor Core IMMA指令。当卷积描述符的reorder类型属性设置为MCDNN_DEFAULT_REORDER时,在每次mcdnnConvolutionForward()和mcdnnConvolutionBiasActivationForward()调用中完成此操作。用户可以避免重复的重排序内核调用,方法是首先使用此调用对卷积核和bias张量进行重排序,然后调用正向卷积API,重排序类型设置为MCDNN_NO_REORDER。 例如,多层神经网络中的卷积可能需要对每个层的内核进行重排序,这可能占用总推理时间的很大部分。使用此函数,可以对卷积核和bias数据进行一次重排序。 随后在多层执行卷积操作,从而加速推理时间。

参数

handle

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

filterDesc

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

reorderType

输入。设置是否执行重排序。更多信息,参见mcdnnReorderType_t。

filterData

输入。指针,指向设备内存中卷积核(内核)数据位置。

reorderedFilterData

输出。指针,指向通过此函数写入已重排序卷积核数据的位置(设备内存中)。此张量与filterData具有相同的维度。

reorderBias

输入。如果> 0,则也对bias数据执行重排序。如果<= 0,则不对bias数据执行重排序。

biasData

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

reorderedBiasData

输出。指针,指向通过此函数写入已重排序bias数据的位置(设备内存中)。此张量与biasData具有相同的维度。

返回值

MCDNN_STATUS_SUCCESS

重排序成功。

MCDNN_STATUS_EXECUTION_FAILED

卷积核和bias数据的重新排序失败。

MCDNN_STATUS_BAD_PARAM

句柄,卷积核描述符,卷积核数据或已重排序数据为NULL。或者,如果请求bias重排序(reorderBias > 0),bias数据或已重排序的bias数据为NULL。如果卷积核维度大小不是4,也会返回此状态。

MCDNN_STATUS_NOT_SUPPORTED

卷积核描述符数据类型不是MCDNN_DATA_INT8x32;卷积核描述符张量不是矢量化布局(MCDNN_TENSOR_NCHW_VECT_C)。

4.2.1.27. mcdnnSetConvolution2dDescriptor()

mcdnnStatus_t mcdnnSetConvolution2dDescriptor(
      mcdnnConvolutionDescriptor_t convDesc,
      int                          pad_h,
      int                          pad_w,
      int                          u,
      int                          v,
      int                          dilation_h,
      int                          dilation_w,
      mcdnnConvolutionMode_t       mode,
      mcdnnDataType_t              computeType)

此函数将已创建的卷积描述符对象初始化为二维相关(2D correlation)。此函数假定张量和卷积核描述符与正向卷积路径相对应,并检查其设置是否有效。同一卷积描述符可以在对应同一层的反向路径中重用。

参数

convDesc

输入/输出。已创建的卷积描述符的句柄。

pad_h

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

pad_w

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

u

输入。垂直卷积核步幅。

v

输入。水平卷积核步幅。

dilation_h

输入。卷积核高度扩张。

dilation_w

输入。卷积核宽度扩张。

mode

输入。在MCDNN_CONVOLUTION和MCDNN_CROSS_CORRELATION之间选择。

computeType

输入。计算精度。

返回值

MCDNN_STATUS_SUCCESS

目标设置成功。

MCDNN_STATUS_BAD_PARAM

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

  • convDesc描述符为nil。

  • pad_h或pad_w参数为小于0的负数。

  • u或v参数为负数或0。

  • dilation_h或dilation_w参数为负数或0。

  • mode参数具有无效的枚举值。

4.2.1.28. mcdnnSetConvolutionGroupCount()

mcdnnStatus_t mcdnnSetConvolutionGroupCount(
      mcdnnConvolutionDescriptor_t convDesc,
      int                          groupCount)

此函数允许用户指定要在关联卷积中使用的组数。

参数

groupCount

输入。组数。

convDesc

输出。卷积层描述符。

返回值

MCDNN_STATUS_SUCCESS

组数设置成功。

MCDNN_STATUS_BAD_PARAM

提供的卷积描述符无效。

4.2.1.29. mcdnnSetConvolutionMathType

此函数允许用户指定是否允许在与给定卷积描述符关联的库函数中使用op张量。

mcdnnStatus_t mcdnnSetConvolutionMathType(
mcdnnConvolutionDescriptor_t    convDesc,
mcdnnMathType_t                 mathType)

返回值

MCDNN_STATUS_SUCCESS

数学类型设置成功。

MCDNN_STATUS_BAD_PARAM

提供了无效的卷积描述符或指定了无效的数学类型。

4.2.1.30. mcdnnSetConvolutionNdDescriptor()

此函数将已创建的通用卷积描述符对象初始化为Nd相关。同一卷积描述符可以在对应同一层的反向路径中重用。卷积计算将以指定的dataType完成,这可能与输入/输出张量不同。

mcdnnStatus_t mcdnnSetConvolutionNdDescriptor(
mcdnnConvolutionDescriptor_t    convDesc,
int                             arrayLength,
const                           int padA[],
const                           int filterStrideA[],
const                           int dilationA[],
mcdnnConvolutionMode_t          mode,
mcdnnDataType_t                 dataType)

参数

convDesc

输入/输出。已创建的卷积描述符的句柄。

arrayLength

输入。卷积维度。

padA

输入。arrayLength维度的数组,包含每个维度的零填充大小。对于每个维度,在该维度每个元素的起始和结尾处,隐式连接的零的数量即为填充。

filterStrideA

输入。arrayLength维度的数组,包含每个维度的卷积核步幅。 对于每个维度,到达下一个点的过滤窗口的下一个起始处,要滑动的元素数量即为卷积核步幅。

dilationA

输入。arrayLength维度的数组,包含每个维度的扩张系数。

mode

输入。在MCDNN_CONVOLUTION和MCDNN_CROSS_CORRELATION之间选择。

datatype

输入。选择要进行计算的数据类型。

备注

不建议在mcdnnSetConvolutionNdDescriptor()中使用带有HALF_CONVOLUTION_BWD_FILTER的MCDNN_DATA_HALF,因为它对任何用于训练的实际用例都无用,并且在将来的mcDNN版本中将被视为被阻止。建议在mcdnnSetTensorNdDescriptor()中将MCDNN_DATA_HALF用于输入张量,在mcdnnSetConvolutionNdDescriptor()中使用带有HALF_CONVOLUTION_BWD_FILTER的MCDNN_DATA_FLOAT,并在许多通用深度学习框架中与自动混合精度(Automatic Mixed Precision,AMP)训练一起使用。

返回值

MCDNN_STATUS_SUCCESS

对象设置成功。

MCDNN_STATUS_BAD_PARAM

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

  • convDesc描述符为nil。

  • arrayLengthRequest为负值。

  • mode具有无效的枚举值。

  • datatype具有无效的枚举值。

  • padA中任一元素为小于0的负数。

  • strideA中任一元素为负数或0。

  • dilationA中任一元素为负数或0。

MCDNN_STATUS_NOT_SUPPORTED

需至少满足以下任一条件: arrayLengthRequest大于MCDNN_DIM_MAX。

4.2.1.31. mcdnnSetConvolutionReorderType()

mcdnnStatus_t mcdnnSetConvolutionReorderType(
      mcdnnConvolutionDescriptor_t convDesc,
      mcdnnReorderType_t           reorderType)

此函数对给定的卷积描述符设置卷积重排序类型。

参数

convDesc

输入。要为其设置重排序类型的卷积描述符。

reorderType

输入。将重排序类型设置为此值。更多信息,参见mcdnnReorderType_t。

返回值

MCDNN_STATUS_SUCCESS

已成功设置重排序类型。

MCDNN_STATUS_BAD_PARAM

不支持提供的重排序类型。