2. mcdnn_ops_infer
此实体包含与mcDNN上下文创建和销毁,张量描述符管理,张量实用程序函数以及常见机器学习算法的推理部分相关的函数,例如批量归一化,softmax,丢弃等。
2.1. 数据类型参考
2.1.1. 不透明结构类型的指针
这些是指向mcdnn_ops_infer中不透明结构类型的指针。
2.1.1.1. mcdnnActivationDescriptor_t
mcdnnActivationDescriptor_t是指向不透明结构的指针,该结构包含激活操作的说明。mcdnnCreateActivationDescriptor()用于创建实例,且必须用mcdnnSetActivationDescriptor()来初始化此实例。
2.1.1.2. mcdnnCTCLossDescriptor_t
mcdnnCTCLossDescriptor_t是指向不透明结构的指针,该结构包含CTC损失操作的说明。mcdnnCreateCTCLossDescriptor()用于创建实例,mcdnnSetCTCLossDescriptor()用于初始化此实例,mcdnnDestroyCTCLossDescriptor()用于销毁此实例。
2.1.1.3. mcdnnDropoutDescriptor_t
mcdnnDropoutDescriptor_t是指向不透明结构的指针,该结构包含丢弃操作的说明。mcdnnCreateDropoutDescriptor()用于创建实例,mcdnnSetDropoutDescriptor()用于初始化此实例,mcdnnDestroyDropoutDescriptor()用于销毁此实例, mcdnnGetDropoutDescriptor()用于查询已初始化实例的字段, mcdnnRestoreDropoutDescriptor()用于将实例恢复到之前的已保存关闭状态。
2.1.1.4. mcdnnFilterDescriptor_t
mcdnnFilterDescriptor_t是指向不透明结构的指针,该结构包含卷积核(Filter)数据集的说明。mcdnnCreateFilterDescriptor()用于创建实例,且必须用mcdnnSetFilter4dDescriptor()或mcdnnSetFilterNdDescriptor()来初始化此实例。
2.1.1.5. mcdnnHandle_t
mcdnnHandle_t是指向不透明结构的指针,该结构包含mcDNN库的上下文。mcDNN库上下文必须使用mcdnnCreate()创建,并且返回的句柄必须传入所有后续库函数调用。需要在结束时使用mcdnnDestroy()销毁此上下文。上下文仅与一个GPU设备关联,即当前调用mcdnnCreate()时的设备。但是,在同一个GPU设备上可以创建多个上下文。
2.1.1.6. mcdnnLRNDescriptor_t
mcdnnLRNDescriptor_t是指向不透明结构的指针,该结构包含局部响应归一化(Local Response Normalization,LRN)的参数。mcdnnCreateLRNDescriptor()用于创建实例,且必须用mcdnnSetLRNDescriptor()来初始化此实例。
2.1.1.7. mcdnnOpTensorDescriptor_t
mcdnnOpTensorDescriptor_t用作mcdnnOpTensor()的参数,是指向不透明结构的指针,该结构包含Tensor Core操作的说明。mcdnnCreateOpTensorDescriptor()用于创建实例,且必须用mcdnnSetOpTensorDescriptor()来初始化此实例。
2.1.1.8. mcdnnPoolingDescriptor_t
mcdnnPoolingDescriptor_t是指向不透明结构的指针,该结构包含池化(Pooling)操作的说明。mcdnnCreatePoolingDescriptor()用于创建实例,且必须用mcdnnSetPoolingNdDescriptor()或mcdnnSetPooling2dDescriptor()来初始化此实例。
2.1.1.9. mcdnnReduceTensorDescriptor_t
mcdnnReduceTensorDescriptor_t用作mcdnnReduceTensor()的参数,是指向不透明结构的指针,该结构包含张量归约(Tensor Reduction)操作的说明。mcdnnCreateReduceTensorDescriptor()用于创建实例,且必须用mcdnnSetReduceTensorDescriptor()来初始化此实例。
2.1.1.10. mcdnnSpatialTransformerDescriptor_t
mcdnnSpatialTransformerDescriptor_t是指向不透明结构的指针,该结构包含空间转换操作的说明。mcdnnCreateSpatialTransformerDescriptor()用于创建实例,mcdnnSetSpatialTransformerNdDescriptor()用于初始化此实例,mcdnnDestroySpatialTransformerDescriptor()用于销毁此实例。
2.1.1.11. mcdnnTensorDescriptor_t
mcdnnTensorDescriptor_t是指向不透明结构的指针,该结构包含通用的N维数据集的说明。mcdnnCreateTensorDescriptor()用于创建实例,且必须用mcdnnSetTensorNdDescriptor()、mcdnnSetTensor4dDescriptor()或mcdnnSetTensor4dDescriptorEx()来初始化此实例。
2.1.1.12. mcdnnTensorTransformDescriptor_t
mcdnnTensorTransformDescriptor_t是指向不透明结构的指针,该结构包含张量转换的说明。mcdnnCreateTensorTransformDescriptor()用于创建实例,mcdnnDestroyTensorTransformDescriptor()用于销毁已创建的实例。
2.1.2. 枚举类型
这些是mcdnn_ops_infer中的枚举类型。
2.1.2.1. mcdnnActivationMode_t
mcdnnActivationMode_t是一种枚举类型,用于选择mcdnnActivationForward()、mcdnnActivationBackward()和mcdnnConvolutionBiasActivationForward()中使用的神经元激活(Neuron Activation)函数。
值
MCDNN_ACTIVATION_SIGMOID
选择sigmoid函数。
MCDNN_ACTIVATION_RELU
选择线性整流(ReLU)函数。
MCDNN_ACTIVATION_TANH
选择双曲正切(tanh)函数。
MCDNN_ACTIVATION_CLIPPED_RELU
选择裁剪ReLU(Clipped ReLU)函数。
MCDNN_ACTIVATION_ELU
选择指数线性(ELU)函数。
MCDNN_ACTIVATION_IDENTITY
选择恒等函数(Identity Function),用于绕过mcdnnConvolutionBiasActivationForward()中的激活步骤。(mcdnnConvolutionBiasActivationForward()函数必须使用MCDNN_CONVOLUTION_FWD_ALGO_IMPLICIT_PRECOMP_GEMM。)不能与mcdnnActivationForward()或mcdnnActivationBackward()一起使用。
MCDNN_ACTIVATION_SWISH
选择swish函数。
2.1.2.2. mcdnnBatchNormMode_t
mcdnnBatchNormMode_t是一种枚举类型,用于指定mcdnnBatchNormalizationForwardInference()、mcdnnBatchNormalizationForwardTraining()、mcdnnBatchNormalizationBackward()和mcdnnDeriveBNTensorDescriptor()函数中的操作模式。
值
MCDNN_BATCHNORM_PER_ACTIVATION
每次激活时执行规一化。该模式用于非卷积网络层之后。在这种模式下,bnBias和bnScale的张量维度以及mcdnnBatchNormalization函数中使用的参数均为1xCxHxW。
MCDNN_BATCHNORM_SPATIAL
在N+空间维度上执行归一化。该模式用于卷积层(需要空间不变)之后。在这种模式下,bnBias和bnScale的张量维度为1xCx1x1。
MCDNN_BATCHNORM_SPATIAL_PERSISTENT
该模式与MCDNN_BATCHNORM_SPATIAL类似,但在某些任务中可以更快。可以为以下MCDNN_DATA_FLOAT和MCDNN_DATA_HALF类型的规一化API调用选择优化路径:mcdnnBatchNormalizationForwardTraining()和mcdnnBatchNormalizationBackward()。对于mcdnnBatchNormalizationBackward(),savedMean和savedInvVariance参数不能为NULL。
本节的以下部分仅适用于NCHW模式:此模式可以使用具有确定性的原子整数缩减(Scaled Atomic Integer Reduction),但对输入数据范围增加了更多限制。当出现数值溢出时,算法可能会在输出缓冲区中生成NaN-s或Inf-s(无穷)。
当输入数据中存在Inf-s/NaN-s时,此模式下的输出与纯浮点实现中的输出相同。
对于有限但非常大的输入值,由于较低的动态范围,算法可能会更频繁地遇到溢出并发出Inf-s/NaN-s,而MCDNN_BATCHNORM_SPATIAL会生成有限的输出值。用户可以调用mcdnnQueryRuntimeError()来检查在此模式下是否发生了数值溢出。
2.1.2.3. mcdnnBatchNormOps_t
mcdnnBatchNormOps_t是一种枚举类型,用于指定mcdnnGetBatchNormalizationForwardTrainingExWorkspaceSize()、mcdnnBatchNormalizationForwardTrainingEx()、mcdnnGetBatchNormalizationBackwardExWorkspaceSize()、mcdnnBatchNormalizationBackwardEx()和mcdnnGetBatchNormalizationTrainingExReserveSpaceSize()函数中的操作模式。
值
MCDNN_BATCHNORM_OPS_BN
每次激活仅执行批量归一化。
MCDNN_BATCHNORM_OPS_BN_ACTIVATION
先执行批量归一化,然后执行激活。
MCDNN_BATCHNORM_OPS_BN_ADD_ACTIVATION
先执行批量归一化,然后执行元素级加法(Element-Wise Addition),再执行激活。
2.1.2.4. mcdnnCTCLossAlgo_t
mcdnnCTCLossAlgo_t是一种枚举类型,暴露可用于执行CTC损失操作的不同算法。
值
MCDNN_CTC_LOSS_ALGO_DETERMINISTIC
保证结果可重现。
MCDNN_CTC_LOSS_ALGO_NON_DETERMINISTIC
不保证结果可重现。
2.1.2.5. mcdnnDataType_t
mcdnnDataType_t是一种枚举类型,用于表明张量描述符或卷积核描述符引用的数据类型。
值
MCDNN_DATA_FLOAT
32-bit单精度浮点数据。
MCDNN_DATA_DOUBLE
64-bit双精度浮点数据。
MCDNN_DATA_HALF
16-bit浮点数据。
MCDNN_DATA_INT8
8-bit带符号的整数数据。
MCDNN_DATA_INT32
32-bit带符号的整数数据。
MCDNN_DATA_INT8x4
32-bit元素数据,每个元素由4个8-bit带符号的整数组成。此数据类型仅支持张量格式MCDNN_TENSOR_NCHW_VECT_C。
MCDNN_DATA_UINT8
8-bit无符号的整数数据。
MCDNN_DATA_UINT8x4
32-bit元素数据,每个元素由4个8-bit无符号的整数组成。此数据类型仅支持张量格式MCDNN_TENSOR_NCHW_VECT_C。
MCDNN_DATA_INT8x32
32元素向量数据,每个元素是一个8-bit带符号的整数。此数据类型仅支持张量格式MCDNN_TENSOR_NCHW_VECT_C。此外,此数据类型只能与algo 1一起使用,即MCDNN_CONVOLUTION_FWD_ALGO_IMPLICIT_PRECOMP_GEMM。更多信息,参见mcdnnConvolutionFwdAlgo_t。
MCDNN_DATA_BFLOAT16
16-bit数据,有7个mantissa位,8个指数位和1个符号位。
MCDNN_DATA_INT64
64-bit带符号的整数数据。
MCDNN_DATA_BOOLEAN
布尔型数据(bool)。
请注意,对于MCDNN_TYPE_BOOLEAN类型,元素应“压缩(Packed)”:即一个字节包含8个MCDNN_TYPE_BOOLEAN类型的元素。此外,在每个字节中,元素从最低有效位(Least Significant Bit)到最高有效位(Most Significant Bit)进行索引。例如,包含01001111的1维张量有8个元素,元素0到3的值为1,元素4和5的值为0,元素6的值为1,元素7的值为0。
具有8个以上元素的张量需要使用更多字节,其中顺序也从最低有效位到最高有效位。请注意,MXMACA是小端序(Little-Endian)模式,即最低有效位的内存地址较低。例如,16个元素01001111 11111100,元素0到3的值为1,元素4和5的值为0,元素6的值为1,元素7的值为0,元素8和9的值为0,元素10到15的值为1。
2.1.2.6. mcdnnDeterminism_t
mcdnnDeterminism_t是一种枚举类型,用于表明计算的结果是否具有确定性(可重现)。
值
MCDNN_NON_DETERMINISTIC
不保证结果可重现。
MCDNN_DETERMINISTIC
保证结果可重现。
2.1.2.7. mcdnnDivNormMode_t
mcdnnDivNormMode_t是一种枚举类型,用于表明mcdnnDivisiveNormalizationForward()和mcdnnDivisiveNormalizationBackward()中的操作模式。
值
MCDNN_DIVNORM_PRECOMPUTED_MEANS
均值张量数据指针应包含用户预计算得到的均值或其他内核卷积值。均值指针也可以是NULL,在这种情况下,均值指针被视为是用零填充的。相当于空间LRN。
备注
在反向传递中,均值被视为独立输入,且会独立计算均值梯度。在此模式下,要在整个局部对比度归一化(Local Contrastive Normalization,LCN)计算图上产生净梯度(Net Gradient),destDiffMeans结果应通过用户的均值层(可使用平均池化实现)反向传播,并添加到mcdnndivisionNormalizationBackward()生成的destDiffData张量中。
2.1.2.8. mcdnnErrQueryMode_t
mcdnnErrQueryMode_t是一种枚举类型,传入mcdnnQueryRuntimeError()以选择远程计算核错误查询模式。
值
MCDNN_ERRQUERY_RAWCODE
无论计算核完成状态如何,都读取错误存储位置。
MCDNN_ERRQUERY_NONBLOCKING
报告mcDNN句柄的用户流中所有任务是否已完成。如果未完全完成,报告远程计算核错误代码。
MCDNN_ERRQUERY_BLOCKING
等待用户流中的所有任务完成,然后再报告远程计算核错误代码。
2.1.2.9. mcdnnFoldingDirection_t
mcdnnFoldingDirection_t是用于选择折叠方向的枚举类型。更多信息,参见mcdnnTensorTransformDescriptor_t。
数据成员(Data Members)
MCDNN_TRANSFORM_FOLD
选择折叠。
MCDNN_TRANSFORM_UNFOLD
选择展开。
2.1.2.10. mcdnnIndicesType_t
mcdnnIndicesType_t是一种枚举类型,用于表明mcdnnReduceTensor()要计算的索引的数据类型。此枚举类型用作mcdnnReduceTensorDescriptor_t描述符的字段。
值
MCDNN_32BIT_INDICES
计算无符号int索引。
MCDNN_64BIT_INDICES
计算无符号长索引。
MCDNN_16BIT_INDICES
计算无符号短索引。
MCDNN_8BIT_INDICES
计算无符号字符索引。
2.1.2.11. mcdnnLRNMode_t
mcdnnLRNMode_t是一种枚举类型,用于表明mcdnnLRNCrossChannelForward()和mcdnnLRNCrossChannelBackward()中的操作模式。
值
- MCDNN_LRN_CROSS_CHANNEL_DIM1
LRN计算在张量的dimA[1]维中执行。
2.1.2.12. mcdnnMathType_t
mcdnnMathType_t是一种枚举类型,用于表明在给定库函数中是否允许使用Tensor Core操作。
值
MCDNN_DEFAULT_MATH
在曦云系列GPU设备上,支持Tensor Core TF32操作。
MCDNN_TENSOR_OP_MATH
允许使用Tensor Core操作,但不会主动在张量上执行数据类型向下转换来使用Tensor Core。
MCDNN_TENSOR_OP_MATH_ALLOW_CONVERSION
允许使用Tensor Core操作,并将在张量上主动执行数据类型向下转换,以使用Tensor Core。
MCDNN_FMA_MATH
仅限于使用乘积累加(Fused Multiply–accumulate,FMA)指令的内核。
2.1.2.13. mcdnnNanPropagation_t
mcdnnNanPropagation_t是一种枚举类型,用于表明给定函数是否要传播NaN数。此枚举类型用作mcdnnActivationDescriptor_t描述符和mcdnnPoolingDescriptor_t描述符的字段。
值
MCDNN_NOT_PROPAGATE_NAN
不传播NaN数。
MCDNN_PROPAGATE_NAN
传播NaN数。
2.1.2.14. mcdnnNormAlgo_t
mcdnnNormalAlgo_t是一种枚举类型,用于指定执行归一化操作的算法。
值
MCDNN_NORM_ALGO_STANDARD
执行标准归一化。
MCDNN_NORM_ALGO_PERSIST
该模式与MCDNN_NORM_ALGO_STANDARD类似,但仅支持MCDNN_NORM_PER_CHANNEL,且在某些任务中可以更快。
可以为以下MCDNN_DATA_FLOAT和MCDNN_DATA_HALF类型的规一化API调用选择优化路径:mcdnnNormalizationForwardTraining()和mcdnnNormalizationBackward()。对于mcdnnNormalizationBackward(),savedMean和savedInvVariance参数不能为NULL。
本节的以下部分仅适用于NCHW模式:此模式可以使用具有确定性的原子整数缩减(Scaled Atomic Integer Reduction),但对输入数据范围增加了更多限制。当发生数值溢出时,算法可能会在输出缓冲区中生成NaN-s或Inf-s(无穷)。
当输入数据中存在Inf-s/NaN-s时,此模式下的输出与纯浮点实现中的输出相同。
对于有限但非常大的输入值,由于较低的动态范围,算法可能会更频繁地遇到溢出并发出Inf-s/NaN-s,而MCDNN_NORM_ALGO_STANDARD会生成有限的输出值。用户可以调用mcdnnQueryRuntimeError()来检查在此模式下是否发生了数值溢出。
2.1.2.15. mcdnnNormMode_t
mcdnnNormMode_t是一种枚举类型,用于表明mcdnnNormalizationForwardInference()、mcdnnNormalizationForwardTraining()、mcdnnBatchNormalizationBackward()、mcdnnGetNormalizationForwardTrainingWorkspaceSize()、mcdnnGetNormalizationBackwardWorkspaceSize()和mcdnnGetNormalizationTrainingReserveSpaceSize()中的操作模式。
值
MCDNN_NORM_PER_ACTIVATION
每次激活时执行规一化。该模式用于非卷积网络层之后。在这种模式下,normBias和normScale的张量维度以及mcdnnNormalization函数中使用的参数均为1xCxHxW。
MCDNN_NORM_PER_CHANNEL
在N+空间维度的每一通道上执行归一化。该模式用于卷积层(需要空间不变)之后。在这种模式下,normBias和normScale的张量维度为1xCx1x1。
2.1.2.16. mcdnnNormOps_t
mcdnnNormOps_t是一种枚举类型,用于表明mcdnnGetNormalizationForwardTrainingWorkspaceSize()、mcdnnNormalizationForwardTraining()、mcdnnGetNormalizationBackwardWorkspaceSize()、mcdnnNormalizationBackward()和mcdnnGetNormalizationTrainingReserveSpaceSize()中的操作模式。
值
MCDNN_NORM_OPS_NORM
仅执行归一化。
MCDNN_NORM_OPS_NORM_ACTIVATION
先执行归一化,然后执行激活。
MCDNN_NORM_OPS_NORM_ADD_ACTIVATION
先执行归一化,然后执行元素级加法,再执行激活。
2.1.2.17. mcdnnOpTensorOp_t
mcdnnOpTensorOp_t是一种枚举类型,用于表明mcdnnOpTensor()要使用的Tensor Core操作。此枚举类型用作mcdnnOpTensorDescriptor_t描述符的字段。
值
MCDNN_OP_TENSOR_ADD
要执行的操作是加法(Addition)。
MCDNN_OP_TENSOR_MUL
要执行的操作是乘法(Multiplication)。
MCDNN_OP_TENSOR_MIN
要执行的操作是最小值比较(Minimum Comparison)。
MCDNN_OP_TENSOR_MAX
要执行的操作是最大值比较(Maximum Comparison)。
MCDNN_OP_TENSOR_SQRT
要执行的操作是平方根(Square Root),仅在A张量上执行。
MCDNN_OP_TENSOR_NOT
要执行的操作是否定(Negation),仅在A张量上执行。
2.1.2.18. mcdnnPoolingMode_t
mcdnnPoolingMode_t是一种枚举类型,传入mcdnnSetPooling2dDescriptor()以选择mcdnnPoolingForward()和mcdnnPoolingBackward()要使用的池化方式。
值
MCDNN_POOLING_MAX
使用池化窗口中的最大值。
MCDNN_POOLING_AVERAGE_COUNT_INCLUDE_PADDING
对池化窗口中的值求平均值。用于计算平均值的元素数包括位于填充区域中的空间位置。
MCDNN_POOLING_AVERAGE_COUNT_EXCLUDE_PADDING
对池化窗口中的值求平均值。用于计算平均值的元素数不包括位于填充区域中的空间位置。
MCDNN_POOLING_MAX_DETERMINISTIC
使用池化窗口中的最大值。使用的算法具有确定性。
2.1.2.19. mcdnnReduceTensorIndices_t
mcdnnReduceTensorIndices_t是一种枚举类型,用于表明mcdnnReduceTensor()是否需要计算索引。此枚举类型用作mcdnnReduceTensorDescriptor_t描述符的字段。
值
MCDNN_REDUCE_TENSOR_NO_INDICES
不计算索引。
MCDNN_REDUCE_TENSOR_FLATTENED_INDICES
计算索引。计算得到的索引是相关且平展的。
2.1.2.20. mcdnnReduceTensorOp_t
mcdnnReduceTensorOp_t是一种枚举类型,用于表明mcdnnReduceTensor()要使用的Tensor Core操作。此枚举类型用作mcdnnReduceTensorDescriptor_t描述符的字段。
值
MCDNN_REDUCE_TENSOR_ADD
要执行的操作是加法(Addition)。
MCDNN_REDUCE_TENSOR_MUL
要执行的操作是乘法(Multiplication)。
MCDNN_REDUCE_TENSOR_MIN
要执行的操作是最小值比较(Minimum Comparison)。
MCDNN_REDUCE_TENSOR_MAX
要执行的操作是最大值比较(Maximum Comparison)。
MCDNN_REDUCE_TENSOR_AMAX
要执行的操作是最大绝对值比较。
MCDNN_REDUCE_TENSOR_AVG
要执行的操作是求均值(Averaging)。
MCDNN_REDUCE_TENSOR_NORM1
要执行的操作是绝对值相加。
MCDNN_REDUCE_TENSOR_NORM2
要执行的操作是求平方和的平方根。
MCDNN_REDUCE_TENSOR_MUL_NO_ZEROS
要执行的操作是乘法,不包括值为零的元素。
2.1.2.21. mcdnnRNNAlgo_t
mcdnnRNNAlgo_t是一种枚举类型,用于指定mcdnnRNNForwardInference(),mcdnnRNNForwardTrain(),mcdnnRNNBackwardData()和mcdnnRNNBackwardWeights()函数中使用的算法。
值
MCDNN_RNN_ALGO_STANDARD
每个RNN层作为一个操作序列执行。该算法在各种网络参数中具有强大的性能。
MCDNN_RNN_ALGO_PERSIST_STATIC
使用持久内核(Persistent Kernel)方法执行网络的循环部分。 当输入张量的第一个维度很小(即小批量,Minibatch)时,这种方法会很快。
MCDNN_RNN_ALGO_PERSIST_DYNAMIC
使用持久内核(Persistent Kernel)方法执行网络的循环部分。 当输入张量的第一个维度很小(即小批量,Minibatch)时,这种方法会很快。使用MCDNN_RNN_ALGO_PRESERT_DYNAMIC时,会在运行时准备持久内核,并能够使用网络和运行中GPU的特定参数进行优化。因此,在使用MCDNN_RNN_ALGO_PERSIST_DYNAMIC时,必须执行一次性计划准备阶段。然后,可以使用相同的模型参数重复调用这些计划。 使用MCDNN_RNN_ALGO_PRESERT_DYNAMIC时,所支持的隐藏单元(Hidden Unit)最大数量限制远高于使用MCDNN_RNN_ALGO_PRESERT_STATIC时的限制,但是如果超过MCDNN_RNN_ALGO_PRESERT_STATIC支持的最大值,吞吐量可能会大大降低。即便如此,在某些情况下,此方法仍优于MCDNN_RNN_ALGO_STANDARD。
2.1.2.22. mcdnnSamplerType_t
mcdnnSamplerType_t是一种枚举类型,传入mcdnnSetSpatialTransformerNdDescriptor()以选择mcdnnSpatialTfSamplerForward()和mcdnnSpatialTfSamplerBackward()要使用的采样器(Sampler)类型。
值
MCDNN_SAMPLER_BILINEAR
选择双线性采样器(Bilinear Sampler)。
2.1.2.23. mcdnnSeverity_t
mcdnnSeverity_t是一种枚举类型,传入自定义回调函数以记录用户可以设置的日志。此枚举描述项目的严重性级别,因此自定义的记录回调可能会有不同的反应。
值
- MCDNN_SEV_FATAL
此值表示mcDNN发出一条致命错误。
- MCDNN_SEV_ERROR
此值表示mcDNN发出一条一般错误。
- MCDNN_SEV_WARNING
此值指示mcDNN发出一条警告。
- MCDNN_SEV_INFO
此值表示mcDNN发出一条信息(例如,API日志)。
2.1.2.24. mcdnnSoftmaxAlgorithm_t
mcdnnSoftmaxAlgorithm用于选择mcdnnSoftmaxForward()和mcdnnSoftmaxBackward()中使用的softmax函数的实现。
值
MCDNN_SOFTMAX_FAST
此实现应用简单的softmax运算。
MCDNN_SOFTMAX_ACCURATE
此实现将softmax输入域的每个点按其最大值进行缩放,以避免softmax求值中可能存在的浮点溢出。
MCDNN_SOFTMAX_LOG
此条目执行日志softmax运算,按MCDNN_SOFTMAX_ACCURATE中的比例缩放输入域中的每个点来避免溢出。
2.1.2.25. mcdnnSoftmaxMode_t
mcdnnSoftmaxMode_t用于选择mcdnnSoftmaxForward()和mcdnnSoftmaxBackward()正在计算其结果的数据。
值
MCDNN_SOFTMAX_MODE_INSTANCE
softmax运算根据C、H、W维度上的图像(N)进行计算。
MCDNN_SOFTMAX_MODE_CHANNEL
softmax运算根据维度C上每个图像(N)的空间位置(H,W)计算。
2.1.2.26. mcdnnStatus_t
mcdnnStatus_t是用于返回函数状态的枚举类型。所有mcDNN库函数返回其状态,状态可以是以下值之一:
值
MCDNN_STATUS_SUCCESS
运算已成功完成。
MCDNN_STATUS_NOT_INITIALIZED
未正确初始化mcDNN库。当调用mcdnnCreate()失败或在调用另一个mcDNN函数之前未调用mcdnnCreate()时,通常会返回此错误。前一种情况,通常是由于mcdnnCreate()调用的MXMACA运行时API中存在错误或硬件安装中存在错误。
MCDNN_STATUS_ALLOC_FAILED
mcDNN库中的资源分配失败。这通常是由内部mcMalloc()故障引起的。 要解决此问题,在函数调用之前,应尽可能多地释放先前分配的内存。
MCDNN_STATUS_BAD_PARAM
传入函数的值或参数不正确。 要解决此问题,请确保所有要传入的参数都具有有效值。
MCDNN_STATUS_ARCH_MISMATCH
当前GPU设备不支持此函数需要的功能。
MCDNN_STATUS_MAPPING_ERROR
访问GPU内存空间失败,这通常是由于绑定纹理(Texture)失败导致的。 要解决此问题,在函数调用之前,取消绑定所有已绑定的纹理。 否则,这可能表示库中存在内部错误。
MCDNN_STATUS_EXECUTION_FAILED
GPU程序执行失败。这通常是由于无法在GPU上启动某些mcDNN内核导致的,内核启动失败可能是多种原因造成的。 要解决此问题,请检查硬件,正确版本的驱动程序以及mcDNN库是否已正确安装。 否则,这可能表示库中存在内部错误。
MCDNN_STATUS_INTERNAL_ERROR
mcDNN内部操作失败。
MCDNN_STATUS_NOT_SUPPORTED
mcDNN目前不支持请求的功能。
MCDNN_STATUS_LICENSE_ERROR
请求的功能需要一些许可,并且在尝试检查当前许可时检测到错误。
MCDNN_STATUS_RUNTIME_PREREQUISITE_MISSING
在预定义的搜索路径中找不到mcDNN所需的运行时库。
MCDNN_STATUS_RUNTIME_IN_PROGRESS
用户流中的某些任务未完成。
MCDNN_STATUS_RUNTIME_FP_OVERFLOW
GPU内核执行期间出现数值溢出。
2.1.2.27. mcdnnTensorFormat_t
mcdnnTensorFormat_t是一种枚举类型,用于mcdnnSetTensor4dDescriptor()创建具有预定义布局的张量。
值
MCDNN_TENSOR_NCHW
此张量格式指定数据按以下顺序排列:批大小(Batch Size),特征图,行,列。步幅(Stride)的隐式定义方式是:数据在内存中是连续的,图像,特征图,行和列之间没有填充;列是内部维度,图像是最外侧维度。
MCDNN_TENSOR_NHWC
此张量格式指定数据按以下顺序排列:批大小,行,列,特征图。步幅的隐式定义方式是:数据在内存中是连续的,图像,行,列和特征图之间没有填充;特征图是内部维度,图像是最外侧维度。
MCDNN_TENSOR_NCHW_VECT_C
此张量格式指定数据按以下顺序排列:批大小(Batch Size),特征图,行,列。但是,张量的每个元素都是一个多特征图的向量。向量的长度由张量的数据类型携带。步幅(Stride)的隐式定义方式是:数据在内存中是连续的,图像,特征图,行和列之间没有填充;列是内部维度,图像是最外侧维度。此格式仅在以下张量数据类型中支持:MCDNN_DATA_INT8x4、MCDNN_DATA_INT8x32和MCDNN_DATA_UINT8x4。 MCDNN_Tensor_NCH_VECT_C也可以按以下方式解析:NCHW INT8x32格式实际上是N x (C/32) x H x W x 32(32 Cs/W),类似于NCHW INT8x4格式是N x (C/4) x H x W x 4(4 Cs/W)。因此,VECT_C名称-每个W都是一个Cs的向量(4或32)。
2.2. API参考
2.2.1. API函数
以下为mcdnn_ops_infer.h中的API函数。
2.2.1.1. mcdnnActivationForward()
此函数以逐元素(Element-Wise)的方式在每个输入值上应用指定的神经元激活函数。
mcdnnStatus_t mcdnnActivationForward(mcdnnHandle_t handle,
mcdnnActivationDescriptor_t activationDesc,
const void *alpha,
const mcdnnTensorDescriptor_t xDesc,
const void *x,
const void *beta,
const mcdnnTensorDescriptor_t yDesc,
void *y)
该函数支持就地操作(In-place Operation),这意味着xData和yData指针可以相等。但是,这要求xDesc描述符和yDesc描述符必须相同(特别是输入和输出的步幅必须匹配,才能支持就地操作)。所有张量格式都支持4维和5维。但是,当xDesc和yDesc的步幅相等且都为HW-packed时,可以获得最佳性能。对于超过5维的张量,必须压缩其空间维度。
参数
handle
输入。已创建的mcDNN上下文的句柄。更多信息,参见mcdnnHandle_t。
activationDesc
输入。激活描述符。更多信息,参见mcdnnActivationDescriptor_t。
alpha, beta
输入。指向缩放系数(主机内存中)的指针,用于将计算结果与输出层中的先验值混合,如下所示: dstValue = alpha[0]*result + beta[0]*priorDstValue。
xDesc
输入。已初始化的输入张量描述符的句柄。更多信息,参见mcdnnTensorDescriptor_t。
x
输入。数据指针,指向与张量描述符xDesc关联的GPU内存。
yDesc
输入。已初始化的输出张量描述符的句柄。
y
输出。数据指针,指向与输出张量描述符yDesc关联的GPU内存。
返回值
MCDNN_STATUS_SUCCESS
此函数启用成功。
MCDNN_STATUS_NOT_SUPPORTED
此函数不支持已提供的配置。
MCDNN_STATUS_BAD_PARAM
需至少满足以下任一条件:
mode参数具有无效的枚举值。
输入张量和输出张量的n,c,h,w维度不同。
输入张量和输出张量的数据类型不同。
输入张量和输出张量的nStride,cStride,hStride,wStride步幅不同,并使用就地操作(即x和y指针相等)。
MCDNN_STATUS_EXECUTION_FAILED
此函数在GPU上启用失败。
2.2.1.2. mcdnnAddTensor()
该函数将一个bias张量的缩放值添加到另一个张量。bias张量A的每个维度必须与目标张量C的相应维度匹配,或者必须等于1。在后一种情况下,bias张量中维度的值将与张量C中对应的值混合。
mcdnnStatus_t mcdnnAddTensor(
mcdnnHandle_t handle,
const void *alpha,
const mcdnnTensorDescriptor_t aDesc,
const void *A,
const void *beta,
const mcdnnTensorDescriptor_t cDesc,
void *C)
仅支持4D和5D张量。如果超过这些维度,则不支持此函数。
参数
handle
输入。已创建的mcDNN上下文的句柄。更多信息,参见mcdnnHandle_t。
alpha, beta
输入。指向缩放系数(主机内存中)的指针,用于将源数值与目标张量中的先验值混合,如下所示: dstValue = alpha[0]*srcValue + beta[0]*priorDstValue。
aDesc
输入。已初始化的张量描述符的句柄。更多信息,参见mcdnnTensorDescriptor_t。
A
输入。指针,指向aDesc描述符描述的张量数据。
cDesc
输入。已初始化的张量描述符的句柄。
C
输入/输出。指针,指向cDesc描述符描述的张量数据。
返回值
MCDNN_STATUS_SUCCESS
此函数执行成功。
MCDNN_STATUS_NOT_SUPPORTED
此函数不支持已提供的配置。
MCDNN_STATUS_BAD_PARAM
bias张量的维度是指与输出张量维度不兼容的数据量,或者两个张量描述符的dataType不同。
MCDNN_STATUS_EXECUTION_FAILED
此函数在GPU上启用失败。
2.2.1.3. mcdnnBatchNormalizationForwardInference()
此函数在推理阶段执行正向BN层计算。对于BN层,可参见Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift。
mcdnnStatus_t mcdnnBatchNormalizationForwardInference(
mcdnnHandle_t handle,
mcdnnBatchNormMode_t mode,
const void *alpha,
const void *beta,
const mcdnnTensorDescriptor_t xDesc,
const void *x,
const mcdnnTensorDescriptor_t yDesc,
void *y,
const mcdnnTensorDescriptor_t bnScaleBiasMeanVarDesc,
const void *bnScale,
const void *bnBias,
const void *estimatedMean,
const void *estimatedVariance,
double epsilon)
仅支持4D和5D张量。 此函数执行的输入转换定义如下: y = beta*y + alpha * (bnBias + (bnScale * (x-estimatedMean)/sqrt(epsilon + estimatedVariance))。
有关训练阶段的信息,请参见mcdnnBatchNormalizationForwardTraining()。 当所有x和dx都使用HW-packed张量时,可以获得更佳的性能。 有关此函数中使用的参数的辅助张量描述符生成信息,请参见mcdnnDeriveBNTensorDescriptor()。
参数
handle
输入。已创建的mcDNN库描述符的句柄。更多信息,参见mcdnnHandle_t。
mode
输入。操作模式(spatial或per-activation)。更多信息,参见mcdnnBatchNormMode_t。
alpha, beta
输入。指向缩放系数(主机内存中)的指针,用于将层输出值与目标张量中的先验值混合,如下所示: dstValue = alpha[0]*resultValue + beta[0]*priorDstValue。
xDesc, yDesc
输入。已初始化的张量描述符的句柄。
x
输入。数据指针,指向与张量描述符xDesc关联的GPU内存,用于层的x输入数据。
y
输入/输出。数据指针,指向与张量描述符yDesc关联的GPU内存,用于BN层的y输出。
bnScaleBiasMeanVarDesc, bnScale, bnBias
输入。设备内存中用于BN scale和bias参数的张量描述符和指针。
estimatedMean, estimatedVariance
输入。均值和方差张量(与bias和scale张量具有相同的描述符)。在mcdnnBatchNormalizationForwardTraining()调用的训练阶段累积的resultRunningMean和resultRunningVariance,此处作为输入传入。
epsilon
输入。BN公式中使用的Epsilon值。其值应等于或大于mcdnn.h中为MCDNN_BN_MIN_EPSILON定义的值。
支持的配置
此函数支持多种描述符的以下数据类型组合。
数据类型配置 |
xDesc |
bnScaleBias MeanVarDesc |
alpha, beta |
yDesc |
|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
返回值
MCDNN_STATUS_SUCCESS
计算已成功执行。
MCDNN_STATUS_NOT_SUPPORTED
此函数不支持已提供的配置。
MCDNN_STATUS_BAD_PARAM
需至少满足以下任一条件:
alpha,beta,x,y,bnScale, bnBias,estimatedMean,estimatedInvVariance中任一指针为NULL。
xDesc或yDesc张量描述符维数不在[4,5]范围内(仅支持4D和5D张量。)
spatial模式下,4D张量中bnScaleBiasMeanVarDesc的维度不是1xCx1x1,5D张量中不是1xCx1x1x1;per-activation模式下,4D张量中不是1xCxHxW,5D张量中不是1xCxDxHxW。
epsilon值小于MCDNN_BN_MIN_EPSILON。
xDesc和yDesc的维度或数据类型不匹配。
2.2.1.4. mcdnnCopyAlgorithmDescriptor()
2.2.1.5. mcdnnCreate()
该函数用于初始化mcDNN库并创建一个不透明结构的句柄,该结构存放mcDNN库上下文。该函数在主机和设备上分配硬件资源,必须在调用其他任何mcDNN库之前对其进行调用。
mcdnnStatus_t mcdnnCreate(mcdnnHandle_t *handle)
mcDNN库句柄与当前MXMACA设备(上下文)绑定。 要在多个设备上使用库,需要为每个设备创建一个mcDNN句柄。 对于给定设备,可以创建多个具有不同配置的mcDNN句柄(例如,不同的当前MXMACA流)。 由于mcdnnCreate()分配一些内部资源,因此通过调用mcdnnDestroy()来释放这些资源将隐式调用mcDeviceSynchronize();因此,建议的最佳做法是在performance-critical代码路径之外调用mcdnnCreate/mcdnnDestroy。对于使用相同设备但来自不同线程的多线程应用,推荐使用的编程模型是为每个线程创建一个(或几个)mcDNN句柄,并在线程的整个生命周期中使用该mcDNN句柄。
参数
handle
输出。指向将地址存储到分配的mcDNN句柄的指针。更多信息,参见mcdnnHandle_t。
返回值
MCDNN_STATUS_BAD_PARAM
提供的输入指针无效(NULL)。
MCDNN_STATUS_NOT_INITIALIZED
未找到兼容的GPU,未安装或禁用MXMACA驱动程序,MXMACA运行时API初始化失败。
MCDNN_STATUS_ARCH_MISMATCH
MetaX GPU架构太旧。
MCDNN_STATUS_ALLOC_FAILED
主机内存分配失败。
MCDNN_STATUS_INTERNAL_ERROR
MXMACA资源分配失败。
MCDNN_STATUS_LICENSE_ERROR
mcDNN许可验证失败(仅当启用此功能时)。
MCDNN_STATUS_SUCCESS
已成功创建mcDNN句柄。
2.2.1.6. mcdnnCreateActivationDescriptor()
mcdnnStatus_t mcdnnCreateActivationDescriptor(
mcdnnActivationDescriptor_t *activationDesc)
此函数通过分配保存激活描述符不透明结构所需内存的方式,创建激活描述符对象。更多信息,参见mcdnnActivationDescriptor_t。
返回值
MCDNN_STATUS_SUCCESS
已成功创建对象。
MCDNN_STATUS_ALLOC_FAILED
资源无法分配。
2.2.1.7. mcdnnCreateAlgorithmDescriptor()
此函数通过分配保存算法描述符不透明结构所需内存的方式,创建算法描述符对象。
mcdnnStatus_t mcdnnCreateAlgorithmDescriptor(
mcdnnAlgorithmDescriptor_t *algoDesc)
返回值
MCDNN_STATUS_SUCCESS
已成功创建对象。
MCDNN_STATUS_ALLOC_FAILED
资源无法分配。
2.2.1.8. mcdnnCreateAlgorithmPerformance()
此函数通过分配保存多个算法性能不透明结构所需内存的方式,创建多个算法性能对象。
mcdnnStatus_t mcdnnCreateAlgorithmPerformance(
mcdnnAlgorithmPerformance_t *algoPerf,
int numberToCreate)
返回值
MCDNN_STATUS_SUCCESS
已成功创建对象。
MCDNN_STATUS_ALLOC_FAILED
资源无法分配。
2.2.1.9. mcdnnCreateDropoutDescriptor()
mcdnnStatus_t mcdnnCreateDropoutDescriptor(
mcdnnDropoutDescriptor_t *dropoutDesc)
此函数通过分配保存丢弃描述符不透明结构所需内存的方式,创建通用丢弃描述符对象。 更多信息,参见mcdnnDropoutDescriptor_t。
返回值
MCDNN_STATUS_SUCCESS
已成功创建对象。
MCDNN_STATUS_ALLOC_FAILED
资源无法分配。
2.2.1.10. mcdnnCreateFilterDescriptor()
此函数通过分配保存卷积核描述符不透明结构所需内存的方式,创建卷积核描述符对象。更多信息,参见mcdnnFilterDescriptor_t。
mcdnnStatus_t mcdnnCreateFilterDescriptor(
mcdnnFilterDescriptor_t *filterDesc)
返回值
MCDNN_STATUS_SUCCESS
已成功创建对象。
MCDNN_STATUS_ALLOC_FAILED
资源无法分配。
2.2.1.11. mcdnnCreateLRNDescriptor()
此函数分配内存,用于存储LRN和DivisionNormalization层操作所需的数据。并返回一个描述符,用于后续层正向和反向调用。
mcdnnStatus_t mcdnnCreateLRNDescriptor(
mcdnnLRNDescriptor_t *poolingDesc)
返回值
MCDNN_STATUS_SUCCESS
已成功创建对象。
MCDNN_STATUS_ALLOC_FAILED
资源无法分配。
2.2.1.12. mcdnnCreateOpTensorDescriptor()
此函数用于创建张量逐点数学运算(Pointwise Math)描述符。更多信息,参见mcdnnOpTensorDescriptor_t。
mcdnnStatus_t mcdnnCreateOpTensorDescriptor(
mcdnnOpTensorDescriptor_t* opTensorDesc)
参数
opTensorDesc
输出。指针,指向保存张量逐点数学运算(如加法,乘法等)描述的结构。
返回值
MCDNN_STATUS_SUCCESS
此函数返回成功。
MCDNN_STATUS_BAD_PARAM
传入函数的张量逐点数学运算描述符无效。
MCDNN_STATUS_ALLOC_FAILED
此张量逐点数学运算描述符的内存分配失败。
2.2.1.13. mcdnnCreatePoolingDescriptor()
mcdnnStatus_t mcdnnCreatePoolingDescriptor(
mcdnnPoolingDescriptor_t *poolingDesc)
此函数通过分配保存池化描述符不透明结构所需内存的方式,创建池化描述符对象。
返回值
MCDNN_STATUS_SUCCESS
已成功创建对象。
MCDNN_STATUS_ALLOC_FAILED
资源无法分配。
2.2.1.14. mcdnnCreateReduceTensorDescriptor()
此函数通过分配保存归约张量描述符不透明结构所需内存的方式,创建归约张量描述符对象。
mcdnnStatus_t mcdnnCreateReduceTensorDescriptor(
mcdnnReduceTensorDescriptor_t* reduceTensorDesc)
返回值
MCDNN_STATUS_SUCCESS
已成功创建对象。
MCDNN_STATUS_BAD_PARAM
reduceTensorDesc是一个NULL指针。
MCDNN_STATUS_ALLOC_FAILED
资源无法分配。
2.2.1.15. mcdnnCreateSpatialTransformerDescriptor()
此函数通过分配保存空间转换描述符不透明结构所需内存的方式,创建通用空间转换描述符对象。
mcdnnStatus_t mcdnnCreateSpatialTransformerDescriptor(
mcdnnSpatialTransformerDescriptor_t *stDesc)
返回值
MCDNN_STATUS_SUCCESS
已成功创建对象。
MCDNN_STATUS_ALLOC_FAILED
资源无法分配。
2.2.1.16. mcdnnCreateTensorDescriptor()
mcdnnStatus_t mcdnnCreateTensorDescriptor(
mcdnnTensorDescriptor_t *tensorDesc)
此函数通过分配保存通用张量描述符不透明结构所需内存的方式,创建通用张量描述符对象。数据初始化为全零。
参数
tensorDesc
输入。指向指针的指针,其中分配的张量描述符对象的地址应减少张量。
返回值
MCDNN_STATUS_BAD_PARAM
输入参数无效。
MCDNN_STATUS_ALLOC_FAILED
资源无法分配。
MCDNN_STATUS_SUCCESS
已成功创建对象。
2.2.1.17. mcdnnCreateTensorTransformDescriptor()
此函数通过分配保存通用张量转换描述符不透明结构所需内存的方式,创建张量转换描述符对象。张量数据初始化为全零。使用mcdnnSetTensorTransformDescriptor()函数初始化此函数创建的描述符。
mcdnnStatus_t mcdnnCreateTensorTransformDescriptor(
mcdnnTensorTransformDescriptor_t *transformDesc);
参数
transformDesc
输出。指向未初始化张量转换描述符的指针。
返回值
MCDNN_STATUS_SUCCESS
已成功创建描述符对象。
MCDNN_STATUS_BAD_PARAM
transformDesc为NULL。
MCDNN_STATUS_ALLOC_FAILED
内存分配失败。
2.2.1.18. mcdnnDeriveBNTensorDescriptor()
该函数从层的x数据描述符中获取BN scale,invVariance,bnBias和bnScale子张量的辅助张量描述符。
mcdnnStatus_t mcdnnDeriveBNTensorDescriptor(
mcdnnTensorDescriptor_t derivedBnDesc,
const mcdnnTensorDescriptor_t xDesc,
mcdnnBatchNormMode_t mode)
此函数创建的张量描述符的使用,同mcdnnBatchNormalizationForwardInference()和mcdnnBatchNormalizationForwardTraining()函数中的bnScaleBiasMeanVarDesc参数,以及mcdnnBatchNormalizationBackward()函数中的bnScaleBiasDiffDesc参数。 得到的结果维度:
在BATCHNORM_MODE_SPATIAL模式下,4D张量中为1xCx1x1,5D张量中为1xCx1x1x1。目前不支持5D。
在BATCHNORM_MODE_PER_ACTIVATION模式下,4D张量中为1xCxHxW,5D张量中为1xCxDxHxW。目前不支持5D。
对于HALF输入数据类型,生成的张量描述符具有FLOAT类型。对于其他数据类型,则具有与输入数据相同的类型。
备注
仅支持4D和5D张量。 应首先使用mcdnnCreateTensorDescriptor()创建deredBnDesc。 xDesc是层的x数据描述符,在调用此函数之前,必须对xDesc设置正确的维度。
参数
derivedBnDesc
输出。已创建的张量描述符的句柄。
xDesc
输入。已创建和初始化的层的x数据描述符句柄。
mode
输入。BN层操作模式。
返回值
MCDNN_STATUS_SUCCESS
计算已成功执行。
MCDNN_STATUS_BAD_PARAM
BN模式无效。
2.2.1.19. mcdnnDeriveNormTensorDescriptor()
该函数从层的x数据描述符和norm模式获取归一化,均值,invariance,normBias和normScale子张量的描述符。归一化,均值和invariance共享一个描述符,normBias和normScale共享一个描述符。
mcdnnStatus_t MCDNNWINAPI
mcdnnDeriveNormTensorDescriptor(mcdnnTensorDescriptor_t derivedNormScaleBiasDesc,
mcdnnTensorDescriptor_t derivedNormMeanVarDesc,
const mcdnnTensorDescriptor_t xDesc,
mcdnnNormMode_t mode,
int groupCnt)
此函数创建的张量描述符的使用,同mcdnnNormalizationForwardInference()和mcdnnNormalizationForwardTraining()函数中的normScaleBiasDesc或normMeanVarDesc参数,以及mcdnnNormalizationBackward()函数中的dNormScaleBiasDesc和normMeanVarDesc参数。
- 得到的结果维度:
在MCDNN_NORM_PER_ACTIVATION模式下,4D张量中为1xCx1x1,5D张量中为1xCx1x1x1
在MCDNN_NORM_PER_CHANNEL模式下,4D张量中为1xCxHxW,5D张量中为1xCxDxHxW
对于HALF输入数据类型,生成的张量描述符具有FLOAT类型。对于其他数据类型,则具有与输入数据相同的类型。
仅支持4D和5D张量。
应首先使用mcdnnCreateTensorDescriptor()创建derivedNormScaleBiasDesc和derivedNormMeanVarDesc。
xDesc是层的x数据描述符,在调用此函数之前,必须对xDesc设置正确的维度。
参数
derivedNormScaleBiasDesc
输出。已创建的张量描述符的句柄。
derivedNormMeanVarDesc
输出。已创建的张量描述符的句柄。
xDesc
输入。已创建和初始化的层的x数据描述符句柄。
mode
输入。BN层操作模式。
groupCnt
输入。分组卷积数。当前仅支持1。
返回值
MCDNN_STATUS_SUCCESS
计算已成功执行。
MCDNN_STATUS_BAD_PARAM
BN模式无效。
2.2.1.20. mcdnnDestroy()
mcdnnStatus_t mcdnnDestroy(mcdnnHandle_t handle)
此函数释放mcDNN句柄使用的资源。此函数通常是使用mcDNN句柄的特定句柄进行的最后一次调用。由于mcdnnCreate()分配一些内部资源,因此通过调用mcdnnDestroy()来释放这些资源将隐式调用macaDeviceSynchronize;因此,建议的最佳做法是在performance-critical代码路径之外调用mcdnnCreate/mcdnnDestroy。
参数
handle
输入。要销毁的mcDNN句柄
返回值
MCDNN_STATUS_SUCCESS
mcDNN上下文已销毁成功。
MCDNN_STATUS_BAD_PARAM
提供的指针无效(NULL)。
2.2.1.21. mcdnnDestroyActivationDescriptor()
mcdnnStatus_t mcdnnDestroyActivationDescriptor(
mcdnnActivationDescriptor_t activationDesc)
此函数用于销毁已创建的激活描述符对象。
返回值
MCDNN_STATUS_SUCCESS
对象已销毁成功。
2.2.1.22. mcdnnDestroyAlgorithmDescriptor()
此函数用于销毁已创建的算法描述符对象。
mcdnnStatus_t mcdnnDestroyAlgorithmDescriptor(
mcdnnActivationDescriptor_t algorithmDesc)
返回值
MCDNN_STATUS_SUCCESS
对象已销毁成功。
2.2.1.23. mcdnnDestroyAlgorithmPerformance()
此函数用于销毁已创建的算法描述符对象。
mcdnnStatus_t mcdnnDestroyAlgorithmPerformance(
mcdnnAlgorithmPerformance_t algoPerf)
返回值
MCDNN_STATUS_SUCCESS
对象已销毁成功。
2.2.1.24. mcdnnDestroyDropoutDescriptor()
mcdnnStatus_t mcdnnDestroyDropoutDescriptor(
mcdnnDropoutDescriptor_t dropoutDesc)
此函数用于销毁已创建的丢弃描述符对象。
返回值
MCDNN_STATUS_SUCCESS
已成功创建对象。
2.2.1.25. mcdnnDestroyFilterDescriptor()
此函数用于销毁卷积核描述符对象。
mcdnnStatus_t mcdnnDestroyFilterDescriptor(
mcdnnFilterDescriptor_t filterDesc)
返回值
MCDNN_STATUS_SUCCESS
已成功创建对象。
2.2.1.26. mcdnnDestroyLRNDescriptor()
此函数用于销毁已创建的LRN描述符对象。
mcdnnStatus_t mcdnnDestroyLRNDescriptor(
mcdnnLRNDescriptor_t lrnDesc)
返回值
MCDNN_STATUS_SUCCESS
已成功创建对象。
2.2.1.27. mcdnnDestroyOpTensorDescriptor()
此函数用于删除张量逐点数学运算描述符对象。
mcdnnStatus_t mcdnnDestroyOpTensorDescriptor(
mcdnnOpTensorDescriptor_t opTensorDesc)
参数
opTensorDesc
输入。指针,指向保存了要删除的张量逐点数学运算描述符的结构。
返回值
MCDNN_STATUS_SUCCESS
此函数返回成功。
2.2.1.28. mcdnnDestroyPoolingDescriptor()
mcdnnStatus_t mcdnnDestroyPoolingDescriptor(
mcdnnPoolingDescriptor_t poolingDesc)
此函数用于销毁已创建的池化描述符对象。
返回值
MCDNN_STATUS_SUCCESS
对象已销毁成功。
2.2.1.29. mcdnnDestroyReduceTensorDescriptor()
此函数用于销毁已创建的归约张量描述符对象。当输入指针为NULL时,该函数不执行销毁操作。
mcdnnStatus_t mcdnnDestroyReduceTensorDescriptor(
mcdnnReduceTensorDescriptor_t tensorDesc)
参数
tensorDesc
输入。指向要销毁的归约张量描述符对象的指针。
返回值
MCDNN_STATUS_SUCCESS
对象已销毁成功。
2.2.1.30. mcdnnDestroySpatialTransformerDescriptor()
此函数用于销毁已创建的空间转换描述符对象。
mcdnnStatus_t mcdnnDestroySpatialTransformerDescriptor(
mcdnnSpatialTransformerDescriptor_t stDesc)
返回值
MCDNN_STATUS_SUCCESS
对象已销毁成功。
2.2.1.31. mcdnnDestroyTensorDescriptor()
mcdnnStatus_t mcdnnDestroyTensorDescriptor(mcdnnTensorDescriptor_t tensorDesc)
此函数用于销毁已创建的张量描述符对象。当输入指针为NULL时,该函数不执行销毁操作。
参数
tensorDesc
输入。指向要销毁的张量描述符对象的指针。
返回值
MCDNN_STATUS_SUCCESS
对象已销毁成功。
2.2.1.32. mcdnnDestroyTensorTransformDescriptor()
mcdnnStatus_t mcdnnDestroyTensorTransformDescriptor(
mcdnnTensorTransformDescriptor_t transformDesc);
此函数用于销毁已创建的张量转换描述符。
参数
transformDesc
输入。要销毁的张量转换描述符。
返回值
MCDNN_STATUS_SUCCESS
描述符已销毁成功。
2.2.1.33. mcdnnDivisiveNormalizationForward()
该函数执行正向空间DivisiveNormalization层计算。它将层中的每个值除以其空间近邻的标准偏差。 请注意,DivisiveNormalization仅实现计算的x/max(c, sigma_x)部分,其中sigma_x是x的空间邻域上的方差。
mcdnnStatus_t mcdnnDivisiveNormalizationForward(
mcdnnHandle_t handle,
mcdnnLRNDescriptor_t normDesc,
mcdnnDivNormMode_t mode,
const void *alpha,
const mcdnnTensorDescriptor_t xDesc,
const void *x,
const void *means,
void *temp,
void *temp2,
const void *beta,
const mcdnnTensorDescriptor_t yDesc,
void *y)
完整的LCN计算可以作为两步进程实现: x_m = x-mean(x); y = x_m/max(c, sigma(x_m));
x-mean(x)通常被称为计算的“减法归一化(Subtractive Normalization)”部分,可以使用mcDNN平均池化层实现,然后调用addTensor。
备注
支持的张量格式为NCHW(适用于4D)和NCDHW(适用于5D),具有任意非重叠非负值步幅。仅支持4D和5D张量。
参数
handle
输入。已创建的mcDNN库描述符的句柄。
normDesc
输入。已初始化的LRN参数描述符的句柄。此描述符用于LRN和DivisiveNormalization层。
divNormMode
输入。DivisiveNormalization层操作模式。目前仅支持实现MCDNN_DIVNORM_PRECOMPUTED_MEANS。归一化是使用用户要预计算的均值输入张量来执行的。
alpha, beta
输入。指向缩放系数(主机内存中)的指针,用于将层输出值与目标张量中的先验值混合,如下所示:
dstValue = alpha[0]*resultValue + beta[0]*priorDstValue
xDesc, yDesc
输入。输入和输出张量的张量描述符对象。请注意,x、means、temp、temp2张量共享xDesc。
x
输入。设备内存中的输入张量数据指针。
means
输入。设备内存中的输入均值张量数据指针。请注意,此张量可以为NULL(在这种情况下,其值在计算过程中假定为零)。此张量也可以不包含均值,其值可以为任何值,常用的变量是具有归一化正态内核(如高斯)卷积的结果。
temp, temp2
Workspace. 设备内存中的临时张量。这些张量用于在正向传递过程中计算中间值。但不需要保留为从正向传递到反向传递的输入。正向和反向传递都使用xDesc作为其描述符。
y
输出。设备内存中的指针,指向用于正向DivisiveNormalization计算的张量。
返回值
MCDNN_STATUS_SUCCESS
计算已成功执行。
MCDNN_STATUS_BAD_PARAM
需至少满足以下任一条件:
x,y,temp和temp2中任一张量指针为NULL。
输入张量或输出张量的维数不在[4,5]范围内。
任意两个输入或输出张量之间的维度不匹配。
对于指针x == y时的就地计算,输入数据和输出数据张量之间的步幅不匹配。
Alpha或beta指针为NULL。
LRN描述符参数超出其有效范围。
任意张量步幅均为负的。
MCDNN_STATUS_UNSUPPORTED
该函数不支持已提供的配置,例如,不支持输入和输出张量之间的步幅不匹配(同一维度下)。
2.2.1.34. mcdnnDropoutForward()
mcdnnStatus_t mcdnnDropoutForward(
mcdnnHandle_t handle,
const mcdnnDropoutDescriptor_t dropoutDesc,
const mcdnnTensorDescripter_t xdesc,
const void *x,
const mcdnnTensorDescripter_t ydesc,
void *y,
void *reserveSpace,
size_t reserveSpaceSizeInBytes)
此函数以x执行正向丢弃操作,以y返回结果。如果dropout用作mcdnnSetDropoutDescriptor()的参数,则x被丢弃的值将替换为0,其余部分将按1/(1-dropout)进行缩放。此函数不应与使用相同状态的另一个mcdnnDropoutForward()函数同时运行。
备注
对于fully packed的张量,性能更好,并且该函数不能在推理过程中调用。
参数
handle
输入。已创建的mcDNN上下文的句柄。
dropoutDesc
输入。已创建的丢弃描述符对象。
xDesc
输入。已初始化的张量描述符的句柄。
x
输入。指针,指向xDesc描述符描述的张量数据。
yDesc
输入。已初始化的张量描述符的句柄。
y
输出。指针,指向yDesc描述符描述的张量数据。
reserveSpace
输出。指针,指向此函数使用的用户分配的GPU内存。reserveSpace的内容不会在mcdnnDropoutForward()和mcdnnDropoutBackward()调用之间发生变化。
reserveSpaceSizeInBytes
输入。reserveSpace的大小。
返回值
MCDNN_STATUS_SUCCESS
调用成功。
MCDNN_STATUS_NOT_SUPPORTED
此函数不支持已提供的配置。
MCDNN_STATUS_BAD_PARAM
需至少满足以下任一条件:
输入张量和输出张量的元素数不同。
输入张量和输出张量的数据类型不同。
输入张量和输出张量的步幅不同,并使用就地操作(即x和y指针相等)。
提供的reserveSpaceSizeInBytes小于mcdnnDropoutGetReserveSpaceSize()返回的值。
没有在带有非NULL状态参数的dropoutDesc上调用mcdnnSetDropoutDescriptor()。
MCDNN_STATUS_EXECUTION_FAILED
此函数在GPU上启用失败。
2.2.1.35. mcdnnDropoutGetReserveSpaceSize()
mcdnnStatus_t mcdnnDropoutGetReserveSpaceSize(
mcdnnTensorDescripter_t xDesc,
size_t *sizeInBytes)
此函数用于查询使用xDesc给出的输入维度运行丢弃所需的预留量。同一预留空间将传入mcdnnDropoutForward()和mcdnnDropoutBackward(),并且其内容在mcdnnDropoutForward()和mcdnnDropoutBackward()调用之间保持不变。
参数
- xDesc
输入。已初始化的张量描述符的句柄,描述丢弃操作的输入。
sizeInBytes
输出。使用xDesc指定的输入张量描述符运行丢弃所需的GPU内存量,作为预留空间。
返回值
MCDNN_STATUS_SUCCESS
查询成功。
2.2.1.36. mcdnnDropoutGetStatesSize()
mcdnnStatus_t mcdnnDropoutGetStatesSize(
mcdnnHandle_t handle,
size_t *sizeInBytes)
此函数用于查询存储mcdnnDropoutForward()函数使用的随机数生成器状态所需的空间量。
参数
handle
输入。已创建的mcDNN上下文的句柄。
sizeInBytes
输出。存储随机数生成器状态所需的GPU内存量。
返回值
MCDNN_STATUS_SUCCESS
查询成功。
2.2.1.37. mcdnnGetActivationDescriptor()
mcdnnStatus_t mcdnnGetActivationDescriptor(
const mcdnnActivationDescriptor_t activationDesc,
mcdnnActivationMode_t *mode,
mcdnnNanPropagation_t *reluNanOpt,
double *coef)
此函数用于查询已初始化的通用激活描述符对象。
参数
activationDesc
输入。已创建的激活描述符的句柄。
mode
输出。指定激活模式的枚举。
reluNanOpt
输出。指定NaN传播模式的枚举。
coef
输出。浮点数,用于在激活模式设置为MCDNN_ACTIVATION_CHIPPED_RELU时指定裁剪阈值,或在激活模式设置为MCDNN_ACTIVATION_ELU时指定alpha系数。
返回值
MCDNN_STATUS_SUCCESS
对象查询成功。
2.2.1.38. mcdnnGetActivationDescriptorSwishBeta()
mcdnnStatus_t mcdnnGetActivationDescriptorSwishBeta(
mcdnnActivationDescriptor_t activationDesc,
double* swish_beta)
此函数用于查询当前为Swish激活设置的beta参数。目前不支持。
参数
activationDesc
输入。已创建的激活描述符的句柄。
swish_beta
输出。指针,指向接收当前配置的Swish beta参数的双精度值。
返回值
MCDNN_STATUS_SUCCESS
beta参数查询成功。
MCDNN_STATUS_BAD_PARAM
activationDesc或swish_beta中任一个为NULL。
2.2.1.39. mcdnnGetAlgorithmDescriptor()
此函数用于查询已初始化的通用算法描述符对象。
mcdnnStatus_t mcdnnGetAlgorithmDescriptor(
const mcdnnAlgorithmDescriptor_t algoDesc,
mcdnnAlgorithm_t *algorithm)
参数
algorithmDesc
输入。已创建的算法描述符的句柄。
algorithm
输入。指定算法的结构。
返回值
MCDNN_STATUS_SUCCESS
对象查询成功。
2.2.1.40. mcdnnGetAlgorithmPerformance()
此函数用于查询已初始化的通用算法性能对象。
mcdnnStatus_t mcdnnGetAlgorithmPerformance(
const mcdnnAlgorithmPerformance_t algoPerf,
mcdnnAlgorithmDescriptor_t* algoDesc,
mcdnnStatus_t* status,
float* time,
size_t* memory)
参数
algoPerf
输入/输出。已创建的算法性能对象的句柄。
algoDesc
输出。性能结果描述的算法描述符。
status
输出。运行algoDesc算法返回的mcDNN状态。
timecoef
输出。GPU运行algoDesc算法消耗的时间。
memory
输出。运行algoDesc算法所需的GPU内存。
返回值
MCDNN_STATUS_SUCCESS
对象查询成功。
2.2.1.41. mcdnnGetAlgorithmSpaceSize()
此函数用于查询调用mcdnnSaveAlgorithm()所需的主机内存量,类似于使用获取工作空间大小的函数查询所需的设备内存量。
mcdnnStatus_t mcdnnGetAlgorithmSpaceSize(
mcdnnHandle_t handle,
mcdnnAlgorithmDescriptor_t algoDesc,
size_t* algoSpaceSizeInBytes)
参数
handle
输入。已创建的mcDNN上下文的句柄。
algoDesc
输入。已创建的算法描述符。
algoSpaceSizeInBytes
输出。作为工作空间所需的主机内存量,以便能够从指定的algoDesc中保存元数据。
返回值
MCDNN_STATUS_SUCCESS
此函数启用成功。
MCDNN_STATUS_BAD_PARAM
至少有一个参数为NULL。
2.2.1.42. mcdnnGetCallback()
此函数用于查询mcDNN错误报告功能的内部状态。
mcdnnStatus_t mcdnnGetCallback(
unsigned mask,
void **udata,
mcdnnCallback_t fptr)
参数
mask
输出。指针,指向输出当前内部错误报告消息位掩码的地址。
udata
输出。指针,指向当前内部存储udata的地址。
fptr
输出。指针,指向当前内部存储回调函数指针的地址。使用内置的默认回调函数时,将输出NULL。
返回值
MCDNN_STATUS_SUCCESS
此函数启用成功。
MCDNN_STATUS_BAD_PARAM
任意输入参数为NULL。
2.2.1.43. mcdnnGetMacartVersion()
给定的同一版本mcDNN库可以根据不同的MXMACA工具包版本进行编译。此函数返回编译当前使用的mcDNN库所依据的MXMACA工具包版本。
2.2.1.44. mcdnnGetDropoutDescriptor()
mcdnnStatus_t mcdnnGetDropoutDescriptor(
mcdnnDropoutDescriptor_t dropoutDesc,
mcdnnHandle_t handle,
float *dropout,
void **states,
unsigned long long *seed)
此函数用于查询已初始化的丢弃描述符的字段。
参数
dropoutDesc
输入。已初始化的丢弃描述符。
handle
输入。已创建的mcDNN上下文的句柄。
dropout
输出。在丢弃层输入值设置为0的概率。
states
输出。指向用户分配的GPU内存的指针,该内存将保存随机数生成器状态。
seed
输出。用于初始化随机数生成器状态的种子(Seed)。
返回值
MCDNN_STATUS_SUCCESS
调用成功。
MCDNN_STATUS_BAD_PARAM
一个或多个参数是无效指针。
2.2.1.45. mcdnnGetErrorString()
此函数用于将mcDNN状态代码转换为空字符结尾的(ASCIIZ)静态字符串。例如,当输入参数为MCDNN_STATUS_SUCCESS时,返回的字符串为MCDNN_STATUS_SUCCESS。将无效的状态值传入此函数时,返回的字符串为MCDNN_UNKNOWN_STATUS。
const char * mcdnnGetErrorString(mcdnnStatus_t status)
参数
status
输入。 mcDNN枚举状态代码。
返回值
指针,指向带有状态名称的空字符结尾字符串。
2.2.1.46. mcdnnGetFilter4dDescriptor()
此函数用于查询已初始化的Filter4d描述符对象的参数。
mcdnnStatus_t mcdnnGetFilter4dDescriptor(
const mcdnnFilterDescriptor_t filterDesc,
mcdnnDataType_t *dataType,
mcdnnTensorFormat_t *format,
int *k,
int *c,
int *h,
int *w)
参数
filterDesc
输入。已创建的卷积核描述符的句柄。
datatype
输出。数据类型。
format
输出。格式类型。
k
输出。输出特征图的数量。
c
输出。输入特征图的数量。
h
输出。每个卷积核的高度。
w
输出。每个卷积核的宽度。
返回值
MCDNN_STATUS_SUCCESS
对象设置成功。
2.2.1.47. mcdnnGetFilterNdDescriptor()
此函数用于查询已初始化的FilterNd描述符对象。
mcdnnStatus_t mcdnnGetFilterNdDescriptor(
const mcdnnFilterDescriptor_t wDesc,
int nbDimsRequested,
mcdnnDataType_t *dataType,
mcdnnTensorFormat_t *format,
int *nbDims,
int filterDimA[])
参数
wDesc
输入。已初始化的卷积核描述符的句柄。
nbDimsRequested
输入。期望卷积核描述符的维度。也是filterDimA数组能够保存结果所需的最小空间。
datatype
输出。数据类型。
format
输出。格式类型。
nbDims
输出。卷积核的实际维度。
filterDimA
输出。至少包含nbDimsRequested维度的数组,由提供的卷积核描述符中的filter参数填充。
返回值
MCDNN_STATUS_SUCCESS
对象设置成功。
MCDNN_STATUS_BAD_PARAM
nbDimsRequested参数为负值。
2.2.1.48. mcdnnGetFilterSizeInBytes()
该函数返回内存中关于给定描述符的卷积核张量的大小。它可以用来了解分配用于保存卷积核张量的GPU内存量。
mcdnnStatus_t
mcdnnGetFilterSizeInBytes(const mcdnnFilterDescriptor_t filterDesc, size_t *size) ;
参数
filterDesc
输入。已初始化的卷积核描述符的句柄。
size
输出。保存张量所需的GPU内存大小(以字节为单位)。
返回值
MCDNN_STATUS_SUCCESS
filterDesc有效。
MCDNN_STATUS_BAD_PARAM
filerDesc无效。
2.2.1.49. mcdnnGetLRNDescriptor()
此函数用于检索存储在已初始化的LRN描述符对象中的值。
mcdnnStatus_t mcdnnGetLRNDescriptor(
mcdnnLRNDescriptor_t normDesc,
unsigned *lrnN,
double *lrnAlpha,
double *lrnBeta,
double *lrnK)
参数
normDesc
输入。已创建的LRN描述符的句柄。
lrnN, lrnAlpha, lrnBeta, lrnK
输出。指针,用于接收存储在描述符对象中的参数值。更多信息,参见mcdnnSetLRNDescriptor()。这些指针中的任意一个都可以为NULL(不会为相应的参数返回任何值)。
返回值
MCDNN_STATUS_SUCCESS
函数已成功完成。
2.2.1.50. mcdnnGetOpTensorDescriptor()
该函数返回传入的张量逐点数学运算描述符的配置。
mcdnnStatus_t mcdnnGetOpTensorDescriptor(
const mcdnnOpTensorDescriptor_t opTensorDesc,
mcdnnOpTensorOp_t *opTensorOp,
mcdnnDataType_t *opTensorCompType,
mcdnnNanPropagation_t *opTensorNanOpt)
参数
opTensorDesc
输入。传入张量逐点数学运算描述符以获取配置。
opTensorOp
输出。指针,指向与此张量逐点数学运算描述符关联的张量逐点数学运算类型。
opTensorCompType
输出。指针,指向与此张量逐点数学运算描述符关联的mcDNN数据类型。
opTensorNanOpt
输出。指针,指向与此张量逐点数学运算描述符关联的NaN传播选项。
返回值
MCDNN_STATUS_SUCCESS
此函数返回成功。
MCDNN_STATUS_BAD_PARAM
传入的输入张量逐点数学运算描述符无效。
2.2.1.51. mcdnnGetPooling2dDescriptor()
mcdnnStatus_t mcdnnGetPooling2dDescriptor(
const mcdnnPoolingDescriptor_t poolingDesc,
mcdnnPoolingMode_t *mode,
mcdnnNanPropagation_t *maxpoolingNanOpt,
int *windowHeight,
int *windowWidth,
int *verticalPadding,
int *horizontalPadding,
int *verticalStride,
int *horizontalStride)
此函数用于查询已创建的2D池化描述符对象。
参数
poolingDesc
输入。已创建的池化描述符的句柄。
mode
输出。指定池化模式的枚举。
maxpoolingNanOpt
输出。指定NaN传播模式的枚举。
windowHeight
输出。池化窗口的高度。
windowWidth
输出。池化窗口的宽度。
verticalPadding
输出。垂直填充的大小。
horizontalPadding
输出。水平填充的大小。
verticalStride
输出。池化垂直步幅。
horizontalStride
输出。池化水平步幅。
返回值
MCDNN_STATUS_SUCCESS
对象设置成功。
2.2.1.52. mcdnnGetPooling2dForwardOutputDim()
mcdnnStatus_t mcdnnGetPooling2dForwardOutputDim(
const mcdnnPoolingDescriptor_t poolingDesc,
const mcdnnTensorDescriptor_t inputDesc,
int *outN,
int *outC,
int *outH,
int *outW)
该函数用于提供应用2D池化后张量的输出维度。 输出图像的各维度h和w计算如下:
outputDim = 1 + (inputDim + 2*padding - windowDim)/poolingStride;
参数
poolingDesc
输入。已初始化的池化描述符的句柄。
inputDesc
输入。已初始化的输入张量描述符的句柄。
N
输出。输出的图像数。
C
输出。输出的通道(channel)数。
H
输出。输出的图像高度。
W
输出。输出的图像宽度。
返回值
MCDNN_STATUS_SUCCESS
此函数启用成功。
MCDNN_STATUS_BAD_PARAM
需至少满足以下任一条件:
尚未初始化poolingDesc。
poolingDesc或inputDesc具有无效的维数(分别需要为2和4)。
2.2.1.53. mcdnnGetPoolingNdDescriptor()
mcdnnStatus_t mcdnnGetPoolingNdDescriptor(
const mcdnnPoolingDescriptor_t poolingDesc,
int nbDimsRequested,
mcdnnPoolingMode_t *mode,
mcdnnNanPropagation_t *maxpoolingNanOpt,
int *nbDims,
int windowDimA[],
int paddingA[],
int strideA[])
此函数用于查询已初始化的通用池化描述符对象。
参数
poolingDesc
输入。已创建的池化描述符的句柄。
nbDimsRequested
输入。期望池化描述符的维度。也是windowDimA、paddingA、strideA数组能够保存结果所需的最小空间。
mode
输出。指定池化模式的枚举。
maxpoolingNanOpt
输入。指定NaN传播模式的枚举。
nbDims
输出。池化描述符的实际维度。
windowDimA
输出。至少包含nbDimsRequested维度的数组,由提供的池化描述符中的window参数填充。
paddingA
输出。至少包含nbDimsRequested维度的数组,由提供的池化描述符中的padding参数填充。
strideA
输出。至少包含nbDimsRequested维度的数组,由提供的池化描述符中的stride参数填充。
返回值
MCDNN_STATUS_SUCCESS
对象查询成功。
MCDNN_STATUS_NOT_SUPPORTED
参数nbDimsRequested大于MCDNN_DIM_MAX。
2.2.1.54. mcdnnGetPoolingNdForwardOutputDim()
mcdnnStatus_t mcdnnGetPoolingNdForwardOutputDim(
const mcdnnPoolingDescriptor_t poolingDesc,
const mcdnnTensorDescriptor_t inputDesc,
int nbDims,
int outDimA[])
该函数用于提供应用Nd池化后张量的输出维度。 输出张量的(nbDims-2)-D图像的每个维度计算如下:
outputDim = 1 + (inputDim + 2*padding - windowDim)/poolingStride;
参数
poolingDesc
输入。已初始化的池化描述符的句柄。
inputDesc
输入。已初始化的输入张量描述符的句柄。
nbDims
输入。要应用池化的维数。
outDimA
输出。nbDims输出维度数组。
返回值
MCDNN_STATUS_SUCCESS
此函数启用成功。
MCDNN_STATUS_BAD_PARAM
需至少满足以下任一条件:
尚未初始化poolingDesc。
nbDims的值与poolingDesc和inputDesc的维数不一致。
2.2.1.55. mcdnnGetProperty()
此函数用于将mcDNN库版本号的特定部分写入提供的主机存储中。
mcdnnStatus_t mcdnnGetProperty(
libraryPropertyType type,
int *value)
参数
type
输入。指示函数报告mcDNN主要版本,次要版本或补丁级别数值的枚举类型。
value
输出。应写入版本信息的主机指针。
返回值
MCDNN_STATUS_INVALID_VALUE
type参数的值无效。
MCDNN_STATUS_SUCCESS
版本信息已成功存储在提供的地址中。
2.2.1.56. mcdnnGetReduceTensorDescriptor()
此函数用于查询已初始化的归约张量描述符对象。
mcdnnStatus_t mcdnnGetReduceTensorDescriptor(
const mcdnnReduceTensorDescriptor_t reduceTensorDesc,
mcdnnReduceTensorOp_t *reduceTensorOp,
mcdnnDataType_t *reduceTensorCompType,
mcdnnNanPropagation_t *reduceTensorNanOpt,
mcdnnReduceTensorIndices_t *reduceTensorIndices,
mcdnnIndicesType_t *reduceTensorIndicesType)
参数
reduceTensorDesc
输入。指向已初始化的归约张量描述符对象的指针。
reduceTensorOp
输出。指定归约张量操作的枚举。
reduceTensorCompType
输出。指定归约计算数据类型的枚举。
reduceTensorNanOpt
输出。指定NaN传播模式的枚举。
reduceTensorIndices
输出。指定归约张量索引的枚举。
reduceTensorIndicesType
输出。指定归约张量索引类型的枚举。
返回值
MCDNN_STATUS_SUCCESS
对象查询成功。
MCDNN_STATUS_BAD_PARAM
ReduceTensorDesc为NULL。
2.2.1.57. mcdnnGetReductionIndicesSize()
这是一个辅助函数,用于返回要传入归约(给定输入和输出张量)的最小索引空间。
mcdnnStatus_t mcdnnGetReductionIndicesSize(
mcdnnHandle_t handle,
const mcdnnReduceTensorDescriptor_t reduceDesc,
const mcdnnTensorDescriptor_t aDesc,
const mcdnnTensorDescriptor_t cDesc,
size_t *sizeInBytes)
参数
handle
输入。已创建的mcDNN库描述符的句柄。
reduceDesc
输入。指向已初始化的归约张量描述符对象的指针。
aDesc
输入。指向输入张量描述符的指针。
cDesc
输入。指向输出张量描述符的指针。
sizeInBytes
输出。要传入归约的最小索引空间。
返回值
MCDNN_STATUS_SUCCESS
成功返回索引空间大小。
2.2.1.58. mcdnnGetReductionWorkspaceSize()
这是一个辅助函数,用于返回要传入归约(给定输入和输出张量)的最小工作空间。
mcdnnStatus_t mcdnnGetReductionWorkspaceSize(
mcdnnHandle_t handle,
const mcdnnReduceTensorDescriptor_t reduceDesc,
const mcdnnTensorDescriptor_t aDesc,
const mcdnnTensorDescriptor_t cDesc,
size_t *sizeInBytes)
参数
handle
输入。已创建的mcDNN库描述符的句柄。
reduceDesc
输入。指向已初始化的归约张量描述符对象的指针。
aDesc
输入。指向输入张量描述符的指针。
cDesc
输入。指向输出张量描述符的指针。
sizeInBytes
输出。要传入归约的最小索引空间。
返回值
MCDNN_STATUS_SUCCESS
成功返回工作空间大小。
2.2.1.59. mcdnnGetStream()
此函数检索在mcDNN句柄中编程的用户MXMACA流。未在mcDNN句柄中设置用户的MXMACA流时,此函数将报告nullstream。
mcdnnStatus_t mcdnnGetStream(
mcdnnHandle_t handle,
mcStream_t *streamId)
参数
handle
输入。指向mcDNN句柄的指针。
streamID
输出。存储来自mcDNN句柄的当前MXMACA流的指针。
返回值
MCDNN_STATUS_BAD_PARAM
无效(NULL)句柄。
MCDNN_STATUS_SUCCESS
已成功检索流标识符。
2.2.1.60. mcdnnGetTensor4dDescriptor()
此函数用于查询已初始化的Tensor4d描述符对象的参数。
mcdnnStatus_t mcdnnGetTensor4dDescriptor(
const mcdnnTensorDescriptor_t tensorDesc,
mcdnnDataType_t *dataType,
int *n,
int *c,
int *h,
int *w,
int *nStride,
int *cStride,
int *hStride,
int *wStride)
参数
tensorDesc
输入。已初始化的张量描述符的句柄。
datatype
输出。数据类型。
n
输出。图像数量。
c
输出。每个图像的特征图数量。
h
输出。每个特征图的高度。
w
输出。每个特征图的宽度。
nStride
输出。两个连续图像之间的步幅。
cStride
输出。两个连续特征图之间的步幅。
hStride
输出。两个连续行之间的步幅。
wStride
输出。两个连续列之间的步幅。
返回值
MCDNN_STATUS_SUCCESS
操作成功。
2.2.1.61. mcdnnGetTensorNdDescriptor()
此函数用于检索存储在已初始化的TensorNd描述符对象中的值。
mcdnnStatus_t mcdnnGetTensorNdDescriptor(
const mcdnnTensorDescriptor_t tensorDesc,
int nbDimsRequested,
mcdnnDataType_t *dataType,
int *nbDims,
int dimA[],
int strideA[])
参数
tensorDesc
输入。已初始化的张量描述符的句柄。
nbDimsRequested
输入。从给定张量描述符中提取的维数。它也是dimA和strideA数组的最小尺寸。如果该数字大于得到的nbDims[0],则只返回nbDims[0]个维度。
datatype
输出。数据类型。
nbDims
输出。张量的实际维数将以nbDims[0]返回。
dimA
输出。至少包含nbDimsRequested维度的数组,由提供的张量描述符的维度填充。
strideA
输出。至少包含nbDimsRequested维度的数组,由提供的张量描述符的步幅填充。
返回值
MCDNN_STATUS_SUCCESS
已成功返回结果。
MCDNN_STATUS_BAD_PARAM
tensorDesc或nbDims指针为NULL。
2.2.1.62. mcdnnGetTensorSizeInBytes()
该函数返回内存中关于给定描述符的张量的大小。 它可以用来了解分配用于保存该张量的GPU内存量。
mcdnnStatus_t mcdnnGetTensorSizeInBytes(
const mcdnnTensorDescriptor_t tensorDesc,
size_t *size)
参数
tensorDesc
输入。已初始化的张量描述符的句柄。
size
输出。保存张量所需的GPU内存大小(以字节为单位)。
返回值
MCDNN_STATUS_SUCCESS
已成功返回结果。
2.2.1.63. mcdnnGetTensorTransformDescriptor()
此函数用于返回存储在已初始化的张量转换描述符中的值。
mcdnnStatus_t mcdnnGetTensorTransformDescriptor(
mcdnnTensorTransformDescriptor_t transformDesc,
uint32_t nbDimsRequested,
mcdnnTensorFormat_t *destFormat,
int32_t padBeforeA[],
int32_t padAfterA[],
uint32_t foldA[],
mcdnnFoldingDirection_t *direction);
参数
transformDesc
输入。已初始化的张量转换描述符。
nbDimsRequested
输入。需要的维数。更多信息,参见张量描述符。
destFormat
输出。将返回的转换格式。
padBeforeA[]
输出。用每个维度前添加的padding量填充的数组。此padBeforeA[]参数的维度等于nbDimsRequested。
padAfterA[]
输出。用每个维度后添加的padding量填充的数组。此padAfterA[]参数的维度等于nbDimsRequested。
foldA[]
输出。用每个空间维度的folding参数填充的数组。 foldA[]数组的维度为nbDimsRequested-2。
direction
输出。选择折叠或展开的设置。更多信息,参见mcdnnFoldingDirection_t。
返回值
MCDNN_STATUS_SUCCESS
已成功获取结果。
MCDNN_STATUS_BAD_PARAM
transformDesc为NULL,或nbDimsRequested小于3或大于MCDNN_DIM_MAX。
2.2.1.64. mcdnnGetVersion()
此函数返回mcDNN库的版本号。它返回mcdnn.h头文件中定义的MCDNN_VERSION。该函数可用于动态标识应用程序当前使用的mcDNN库。定义的MCDNN_VERSION可用于使用条件编译语句将同一应用程序链接到不同的mcDNN版本。
size_t mcdnnGetVersion()
2.2.1.65. mcdnnInitTransformDest()
此函数用于初始化并返回张量转换操作的目标张量描述符destDesc。完成初始化所需的参数,请参见mcdnnTensorDescriptor_t。
mcdnnStatus_t mcdnnInitTransformDest(
const mcdnnTensorTransformDescriptor_t transformDesc,
const mcdnnTensorDescriptor_t srcDesc,
mcdnnTensorDescriptor_t destDesc,
size_t *destSizeInBytes);
备注
返回的张量描述符会被压缩。
参数
transformDesc
输入。已初始化的张量转换描述符的句柄。
srcDesc
输入。已初始化的张量描述符的句柄。
destDesc
输出。要初始化并返回的张量描述符的句柄。
destSizeInBytes
输出。保存新张量大小(以字节为单位)的指针。
返回值
MCDNN_STATUS_SUCCESS
张量描述符已初始化成功。
MCDNN_STATUS_BAD_PARAM
srcDesc或destDesc为NULL,或者张量描述符的nbDims不正确。 更多信息,参见张量描述符。
MCDNN_STATUS_NOT_SUPPORTED
提供的配置不是4D。
MCDNN_STATUS_EXECUTION_FAILED
此函数在GPU上启用失败。
2.2.1.66. mcdnnLRNCrossChannelForward()
该函数执行正向LRN层计算。
mcdnnStatus_t mcdnnLRNCrossChannelForward(
mcdnnHandle_t handle,
mcdnnLRNDescriptor_t normDesc,
mcdnnLRNMode_t lrnMode,
const void *alpha,
const mcdnnTensorDescriptor_t xDesc,
const void *x,
const void *beta,
const mcdnnTensorDescriptor_t yDesc,
void *y)
备注
支持的格式包括:positive-strided,NCHW和NHWC(适用于4D x和y),以及5D中仅支持NCDHW DHW-packed(适用于x和y)。仅支持非重叠4D和5D张量。使用NCHW布局,性能更优。
参数
handle
输入。已创建的mcDNN库描述符的句柄。
normDesc
输入。已初始化的LRN参数描述符的句柄。
lrnMode
输入。LRN层操作模式。目前仅支持实现MCDNN_LRN_CROSS_CHANNEL_DIM1。归一化在张量的dimA[1]维中执行。
alpha, beta
输入。指向缩放系数(主机内存中)的指针,用于将层输出值与目标张量中的先验值混合,如下所示:
dstValue = alpha[0]*resultValue + beta[0]*priorDstValue
xDesc, yDesc
输入。输入和输出张量的张量描述符对象。
x
输入。设备内存中的输入张量数据指针。
y
输出。设备内存中的输出张量数据指针。
返回值
MCDNN_STATUS_SUCCESS
计算已成功执行。
MCDNN_STATUS_BAD_PARAM
需至少满足以下任一条件:
x和y中任一张量指针为NULL。
输入张量维数小于或等于2。
LRN描述符参数超出其有效范围。
任一张量参数为5D,但不是NCDHW DHW-packed格式。
MCDNN_STATUS_NOT_SUPPORTED
此函数不支持已提供的配置。不受支持的配置示例如下:
任意输入张量数据类型都与输出张量数据类型不同。
X和y张量维度不匹配。
任意张量参数步幅均为负的。
2.2.1.67. mcdnnNormalizationForwardInference()
此函数在推理阶段执行正向归一化层计算。关于per-channel归一化层,可参见Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift。
mcdnnStatus_t
mcdnnNormalizationForwardInference(mcdnnHandle_t handle,
mcdnnNormMode_t mode,
mcdnnNormOps_t normOps,
mcdnnNormAlgo_t algo,
const void *alpha,
const void *beta,
const mcdnnTensorDescriptor_t xDesc,
const void *x,
const mcdnnTensorDescriptor_t normScaleBiasDesc,
const void *normScale,
const void *normBias,
const mcdnnTensorDescriptor_t normMeanVarDesc,
const void *estimatedMean,
const void *estimatedVariance,
const mcdnnTensorDescriptor_t zDesc,
const void *z,
mcdnnActivationDescriptor_t activationDesc,
const mcdnnTensorDescriptor_t yDesc,
void *y,
double epsilon,
int groupCnt);
仅支持4D和5D张量。 此函数执行的输入转换定义如下:
y = beta*y + alpha *[normBias + (normScale * (x-estimatedMean)/sqrt(epsilon + estimatedVariance)]
在训练,反向传播和推理过程中的epsilon值必须相同。 有关训练阶段的信息,请参见mcdnnNormalizationForwardTraining()。 当所有x和y都使用HW-packed张量时,可以获得更高的性能。
参数
handle
输入。已创建的mcDNN库描述符的句柄。更多信息,参见mcdnnHandle_t。
mode
输入。操作模式(per-channel或per-activation)。更多信息,参见mcdnnNormMode_t。
normOps
输入。post-operative模式。目前不支持MCDNN_NORM_OPS_NORM_ACTIVATION和MCDNN_NORM_OPS_NORM_ADD_ACTIVATION。
algo
输入。要执行的算法。更多信息,参见mcdnnNormAlgo_t。
alpha, beta
输入。指向缩放系数(主机内存中)的指针,用于将层输出值与目标张量中的先验值混合,如下所示:
dstValue = alpha[0]*resultValue + beta[0]*priorDstValue
xDesc, yDesc
输入。已初始化的张量描述符的句柄。
x
输入。数据指针,指向与张量描述符xDesc关联的GPU内存,用于层的x输入数据。
y
输出。数据指针,指向与张量描述符yDesc关联的GPU内存,用于归一化层的y输出。
zDesc, z
输入。在激活之前,设备内存中用于归一化运算结果残差相加(Residual Addition)的张量描述符和指针。zDesc和z是可选的,仅当normOps为MCDNN_NORM_OPS_NORM_ADD_ACTIVATION时使用,否则用户可以传入NULL。使用时,z的维度应与x和最终输出y的维度完全相同。更多信息,参见mcdnnTensorDescriptor_t。 由于仅支持normOps为MCDNN_NORM_OPS_NORM,目前可以将其设置为NULL。
normScaleBiasDesc, normScale, normBias
输入。设备内存中用于归一化scale和bias参数的张量描述符和指针。
normMeanVarDesc, estimatedMean, estimatedVariance
输入。均值和方差张量及其张量描述符。在mcdnnNormalizationForwardTraining()调用的训练阶段累积的estimatedMean和estimatedVariance输入,此处作为输入传入。
activationDesc
输入。激活操作的描述符。
当normOps输入设置为MCDNN_NORM_OPS_NORM_ACTIVATION或MCDNN_NORM_OPS_NORM_ADD_ACTIVATION时,将使用此激活,否则用户可以传入NULL。由于仅支持normOps为MCDNN_NORM_OPS_NORM,目前可以将其设置为NULL。
epsilon
输入。归一化公式中使用的Epsilon值。其值应等于或大于零。
groupCnt
输入。分组卷积数。当前仅支持1。
返回值
MCDNN_STATUS_SUCCESS
计算已成功执行。
MCDNN_STATUS_NOT_SUPPORTED
不支持选择的计算或数据类型,或者选择了未知的算法类型。
MCDNN_STATUS_BAD_PARAM
需至少满足以下任一条件:
alpha,beta,x,y,normScale, normBias,estimatedMean和estimatedInvVariance中任一指针为NULL。
xDesc或yDesc张量描述符维数不在[4,5]范围内(仅支持4D和5D张量)。
per-channel模式下,4D张量中normScaleBiasDesc和normMeanVarDesc的维度不是1xCx1x1,5D张量中不是1xCx1x1x1;per-activation模式下,4D张量中不是1xCxHxW,5D张量中不是1xCxDxHxW。
epsilon的值小于0。
xDesc和yDesc的维度或数据类型不匹配。
MCDNN_STATUS_NOT_SUPPORTED
选择了浮点以外的计算或数据类型,或者选择了未知算法类型。
MCDNN_STATUS_EXECUTION_FAILED
此函数在GPU上启用失败。
2.2.1.68. mcdnnOpsInferVersionCheck()
此函数是一系列相应函数中的第一个函数,这些函数检查不同模块的DLL文件之间的库版本是否一致。
mcdnnStatus_t mcdnnOpsInferVersionCheck(void)
返回值
MCDNN_STATUS_SUCCESS
此DLL文件的版本与它所依赖的mcDNN DLL一致。
MCDNN_STATUS_VERSION_MISMATCH
此DLL文件的版本与它所依赖的mcDNN DLL的版本不匹配。
2.2.1.69. mcdnnOpTensor()
该函数实现了公式C = op(alpha1[0] * A, alpha2[0] * B) + beta[0] * C,给定张量A、B、C以及缩放系数alpha1、alpha2、beta。要使用的op由描述符mcdnnOpTensorDescriptor_t表示,即opTensorDesc的类型。当前支持的op由mcdnnOpTensorOp_t枚举列出。
mcdnnStatus_t mcdnnOpTensor(
mcdnnHandle_t handle,
const mcdnnOpTensorDescriptor_t opTensorDesc,
const void *alpha1,
const mcdnnTensorDescriptor_t aDesc,
const void *A,
const void *alpha2,
const mcdnnTensorDescriptor_t bDesc,
const void *B,
const void *beta,
const mcdnnTensorDescriptor_t cDesc,
void *C)
输入和目标张量有以下限制:
输入张量A的每个维度必须与目标张量C的相应维度匹配,输入张量B的每个维度必须与目标张量C的相应维度匹配,或者必须等于1。在后一种情况下,输入张量B各维度的值将与张量C中对应的值混合。
输入张量A和B以及目标张量C的数据类型必须满足下表
支持的数据类型
opTensorDesc 中 的 opTensorComp Type |
|
|
|
|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
备注
不支持MCDNN_TENSOR_NCHW_VECT_C 作为输入张量格式。支持维度大于5的所有张量。此函数不支持超出这些维度的张量格式。
参数
handle
输入。已创建的mcDNN上下文的句柄。
opTensorDesc
输入。已初始化的op张量描述符的句柄。
alpha1, alpha2, beta
输入。指向缩放系数(主机内存中)的指针,用于将源数值与目标张量中的先验值混合,如下所示:
dstValue = alpha[0]*resultValue + beta[0]*priorDstValue
aDesc, bDesc, cDesc
输入。已初始化的张量描述符的句柄。
A, B
输入。指针,分别指向由aDesc和bDesc描述符描述的张量数据。
C
输入/输出。指向cDesc描述符描述的张量数据的指针。
返回值
MCDNN_STATUS_SUCCESS
此函数执行成功。
MCDNN_STATUS_NOT_SUPPORTED
此函数不支持已提供的配置。不受支持的配置示例如下:
bias张量和输出张量的维度大于5。
opTensorCompType未按上述方式设置。
MCDNN_STATUS_BAD_PARAM
无法识别目标张量C的数据类型,或者不符合上述对输入和目标张量的限制。
MCDNN_STATUS_EXECUTION_FAILED
此函数在GPU上启用失败。
2.2.1.70. mcdnnPoolingForward()
此函数计算输入值池化(即多个相邻值的最大值或平均值),以生成高度和/或宽度较小的输出。
mcdnnStatus_t mcdnnPoolingForward(
mcdnnHandle_t handle,
const mcdnnPoolingDescriptor_t poolingDesc,
const void *alpha,
const mcdnnTensorDescriptor_t xDesc,
const void *x,
const void *beta,
const mcdnnTensorDescriptor_t yDesc,
void *y)
支持所有张量格式,使用HW-packed张量时性能最佳。只支持2个和3个空间维度。仅支持具有2个空间维度的向量化张量。 输出张量yDesc的维度可以小于或大于mcdnnGetPooling2dForwardOutputDim()或mcdnnGetPoolingNdForwardOutputDim()函数建议的维度。 对于平均池化,即使是整数输入和输出数据类型,计算类型也是浮点型。如果超出范围,则输出向最近偶数舍入,并保持在负数最小值和正数最大值之间。
参数
handle
输入。已创建的mcDNN上下文的句柄。
poolingDesc
输入。已初始化的池化描述符的句柄。
alpha, beta
输入。指向缩放系数(主机内存中)的指针,用于将计算结果与输出层中的先验值混合,如下所示: dstValue = alpha[0]*resultValue + beta[0]*priorDstValue。
xDesc
输入。已初始化的输入张量描述符的句柄。类型必须为FLOAT,DOUBLE,HALF,INT8,INT8x4,INT8x32或BFLOAT16。更多信息,参见mcdnnDataType_t。
x
输入。数据指针,指向与张量描述符xDesc关联的GPU内存。
yDesc
输入。已初始化的输出张量描述符的句柄。类型必须为FLOAT,DOUBLE,HALF,INT8,INT8x4,INT8x32或BFLOAT16。更多信息,参见mcdnnDataType_t。
y
输出。数据指针,指向与输出张量描述符yDesc关联的GPU内存。
返回值
MCDNN_STATUS_SUCCESS
此函数启用成功。
MCDNN_STATUS_BAD_PARAM
需至少满足以下任一条件:
输入张量和输出张量的n,c维度不同。
输入张量和输出张量的数据类型不同。
MCDNN_STATUS_NOT_SUPPORTED
此函数不支持已提供的配置。
MCDNN_STATUS_EXECUTION_FAILED
此函数在GPU上启用失败。
2.2.1.71. mcdnnQueryRuntimeError()
mcDNN库函数在启动GPU内核之前执行广泛的输入参数检查。最后一步是验证GPU内核是否实际启动。当内核启动失败时,相应的API调用将返回MCDNN_STATUS_EXECTION_FAILED。 通常,在GPU内核启动后,内核本身不会执行运行时检查-数值结果仅会写入输出缓冲区。
mcdnnStatus_t mcdnnQueryRuntimeError(
mcdnnHandle_t handle,
mcdnnStatus_t *rstatus,
mcdnnErrQueryMode_t mode,
mcdnnRuntimeTag_t *tag)
当在mcdnnBatchNormalizationForwardTraining()或mcdnnBatchNormalizationBackward()中选择MCDNN_BATCHNORM_SPATICATE_PERSISTENT模式时,算法可能会遇到数值溢出,其中MCDNN_BATCHNORM_SPATICAL执行得很好,尽管速度较慢。用户可以调用mcdnnQueryRuntimeError(),以确保内核执行期间不会发生数值溢出。这些问题由执行计算的内核报告。 mcdnnQueryRuntimeError()可以用于轮询和阻塞软件控制流。有两种轮询模式(MCDNN_ERRQUERY_RAWCODE和MCDNN_ERRQUERY_NONBLOCKED)和一种阻塞模式MCDNN_ERRQUERY_BLOCKED。 无论内核完成状态如何,MCDNN_ERRQUERY_RAWCODE都读取错误存储位置。内核甚至可能无法启动,并且错误存储(按mcDNN句柄分配)可能由先前的调用使用。
MCDNN_ERRQUERY_NONBLOCKED检查用户流中的所有任务是否已完成。 如果用户流中的某些任务处于待处理状态,mcdnnQueryRuntimeError()函数将立即返回并在rstatus中报告MCDNN_STATUS_RUNTIME_IN_PROGRESS。否则,函数会将远程内核错误代码复制到rstatus。 在阻塞模式(MCDNN_ERRQUERY_BLOCKEG)中,该函数等待用户流中的所有任务结束,再报告远程内核错误代码。可以通过调用带有macaDeviceScheduleSpin,macaDeviceScheduleYield或macaDeviceScheduleBlockingSync标记的macaSetDeviceFlags来进一步调整阻塞样式。
在mcDNN句柄中更改用户流时,不应使用MCDNN_ERRQUERY_NONBLOCKING和MCDNN_ERRQUERY_BLOCKING模式。即,在报告运行时内核错误的函数和mcdnnQueryRuntimeError()函数之间调用mcdnnSetStream()。
rstatus中报告的远程错误状态可以设置为:MCDNN_STATUS_SUCCESS,MCDNN_STATUS_RUNTIME_IN_PROGRESS或MCDNN_STATUS_RUNTIME_FP_OVERFLOW。mcdnnQueryRuntimeError()会自动清除远程内核错误。
备注
当mcdnnBatchNormalMode_t参数为MCDNN_BATCHNORM_SPATIATION_PERSISTENT时,mcdnnQueryRuntimeError()函数应与mcdnnBatchNormalizationForwardTraining()和mcdnnBatchNormalizationBackward()一起使用。
参数
handle
输入。已创建的mcDNN上下文的句柄。
rstatus
输出。指向用户错误代码存储的指针。
mode
输入。远程错误查询模式。
tag
输入/输出。当前,此参数应为NULL。
返回值
MCDNN_STATUS_SUCCESS
未检测到错误(rstatus保留一个有效值)。
MCDNN_STATUS_BAD_PARAM
输入参数无效。
MCDNN_STATUS_INTERNAL_ERROR
阻塞同步流或非阻塞流查询失败。
MCDNN_STATUS_MAPPING_ERROR
设备无法访问零拷贝内存来报告内核错误。
2.2.1.72. mcdnnReduceTensor()
该函数通过实现公式C = alpha * reduce op ( A )+ beta * C来归约张量A,给定张量A和C以及缩放系数alpha和beta。 要使用的归约op由reduceTensorDesc描述符表示。当前支持的op由mcdnnReduceTensorOp_t枚举列出。
mcdnnStatus_t mcdnnReduceTensor(
mcdnnHandle_t handle,
const mcdnnReduceTensorDescriptor_t reduceTensorDesc,
void *indices,
size_t indicesSizeInBytes,
void *workspace,
size_t workspaceSizeInBytes,
const void *alpha,
const mcdnnTensorDescriptor_t aDesc,
const void *A,
const void *beta,
const mcdnnTensorDescriptor_t cDesc,
void *C)
输出张量C的每个维度必须与输入张量A的相应维度匹配,或者必须等于1。等于1的维度表示张量A要归约的维度。
此实现仅为最小和最大op生成索引,如reduceTensorDesc的mcdnnReduceTensorIndices_t枚举所示。请求其他归约op的索引会导致错误。索引的数据类型由mcdnnIndicesType_t枚举表示;当前仅支持32位(无符号int)类型。
返回的索引不是绝对索引,而是相对于归约维度的索引。索引也是平展的,即不是坐标元组。
如果类型为double,则张量A和C的数据类型必须匹配。在这种情况下,alpha和beta以及reduceTensorDesc的计算枚举都假定为double类型。
HALF和INT8数据类型可以与FLOAT数据类型混合。在这些情况下,reduceTensorDesc的计算枚举必须为FLOAT数据类型。
备注
维度不超过8时,支持所有张量格式。如果超过这些维度,则不支持此函数。
参数
handle
输入。已创建的mcDNN上下文的句柄。
reduceTensorDesc
输入。已初始化的归约张量描述符的句柄。
indices
输出。已分配用于写入索引的空间的句柄。
indicesSizeInBytes
输入。上述已分配空间的大小。
workspace
输入。已分配用于实现归约的空间的句柄。
workspaceSizeInBytes
输入。上述已分配空间的大小。
alpha, beta
输入。指向缩放系数(主机内存中)的指针,用于将源数值与目标张量中的先验值混合,如下所示:
dstValue = alpha[0]*resultValue + beta[0]*priorDstValue
aDesc, cDesc
输入。已初始化的张量描述符的句柄。
A
输入。指针,指向aDesc描述符描述的张量数据。
C
输入/输出。指针,指向cDesc描述符描述的张量数据。
返回值
MCDNN_STATUS_SUCCESS
此函数执行成功。
MCDNN_STATUS_NOT_SUPPORTED
此函数不支持已提供的配置。不受支持的配置示例如下:
输入张量和输出张量的维度大于8。
reduceTensorCompType未按上述方式设置。
MCDNN_STATUS_BAD_PARAM
输入和输出张量的相应维度均匹配,或者未满足上述中的条件。
MCDNN_INVALID_VALUE
索引或工作空间的分配不足。
MCDNN_STATUS_EXECUTION_FAILED
此函数在GPU上启用失败。
2.2.1.73. mcdnnRestoreAlgorithm()
此函数从algoSpace中用户提供的主机内存空间读取算法元数据,允许用户使用从之前的mcDNN session中查找的RNN结果。
mcdnnStatus_t mcdnnRestoreAlgorithm(
mcdnnHandle_t handle,
void* algoSpace,
size_t algoSpaceSizeInBytes,
mcdnnAlgorithmDescriptor_t algoDesc)
参数
handle
输入。已创建的mcDNN上下文的句柄。
algoDesc
输入。已创建的算法描述符。
algoSpace
输入。指向要读取的主机内存的指针。
algoSpaceSizeInBytes
输入。作为工作空间所需的主机内存量,以便能够从指定的algoDesc中保存元数据。
返回值
MCDNN_STATUS_SUCCESS
此函数启用成功。
MCDNN_STATUS_NOT_SUPPORTED
元数据来自不同的mcDNN版本。
MCDNN_STATUS_BAD_PARAM
需至少满足以下任一条件:
任一参数为NULL。
元数据已损坏。
2.2.1.74. mcdnnRestoreDropoutDescriptor()
mcdnnStatus_t mcdnnRestoreDropoutDescriptor(
mcdnnDropoutDescriptor_t dropoutDesc,
mcdnnHandle_t handle,
float dropout,
void *states,
size_t stateSizeInBytes,
unsigned long long seed)
此函数将丢弃描述符还原到之前的已保存关闭状态。
参数
dropoutDesc
输入/输出。已创建的丢弃描述符。
handle
输入。已创建的mcDNN上下文的句柄。
dropout
输入。执行丢弃时,输入张量值设置为0的概率。
states
输入。指向GPU内存的指针,该内存保存由先前的mcdnnSetDropoutDescriptor()调用初始化的随机数生成器状态。
stateSizeInBytes
输入。保存随机数生成器状态的缓冲区大小(以字节为单位)。
seed
输入。在先前的mcdnnSetDropoutDescriptor()调用中,用于初始化状态缓冲区的种子。使用与此不同的种子不会产生任何影响。通过调用mcdnnSetDropoutDescriptor(),可以更改种子并随后更新随机数生成器状态。
返回值
MCDNN_STATUS_SUCCESS
调用成功。
MCDNN_STATUS_INVALID_VALUE
状态缓冲区(如stateSizeInBytes中所示)太小。
2.2.1.75. mcdnnSaveAlgorithm()
此函数从algoSpace中用户提供的主机内存空间写入算法元数据,允许用户在退出mcDNN后保留查找的RNN结果。
mcdnnStatus_t mcdnnSaveAlgorithm(
mcdnnHandle_t handle,
mcdnnAlgorithmDescriptor_t algoDesc,
void* algoSpace
size_t algoSpaceSizeInBytes)
参数
handle
输入。已创建的mcDNN上下文的句柄。
algoDesc
输入。已创建的算法描述符。
algoSpace
输入。指向要写入的主机内存的指针。
algoSpaceSizeInBytes
输入。作为工作空间所需的主机内存量,以便能够从指定的algoDesc中保存元数据。
返回值
MCDNN_STATUS_SUCCESS
此函数启用成功。
MCDNN_STATUS_BAD_PARAM
需至少满足以下任一条件:
任一参数为NULL。
algoSpaceSizeInBytes太小。
2.2.1.76. mcdnnScaleTensor()
mcdnnStatus_t mcdnnScaleTensor(
mcdnnHandle_t handle,
const mcdnnTensorDescriptor_t yDesc,
void *y,
const void *alpha)
该函数按给定系数缩放张量的所有元素。
参数
handle
输入。已创建的mcDNN上下文的句柄。
yDesc
输入。已初始化的张量描述符的句柄。
y
输入/输出。指针,指向yDesc描述符描述的张量数据。
alpha
输入。主机内存中指向单个值的指针,张量的所有元素都将按该值进行缩放。。
返回值
MCDNN_STATUS_SUCCESS
此函数启用成功。
MCDNN_STATUS_NOT_SUPPORTED
此函数不支持已提供的配置。
MCDNN_STATUS_BAD_PARAM
任一已提供的指针为nil。
MCDNN_STATUS_EXECUTION_FAILED
此函数在GPU上启用失败。
2.2.1.77. mcdnnSetActivationDescriptor()
mcdnnStatus_t mcdnnSetActivationDescriptor(
mcdnnActivationDescriptor_t activationDesc,
mcdnnActivationMode_t mode,
mcdnnNanPropagation_t reluNanOpt,
double coef)
此函数用于初始化已创建的通用激活描述符对象。
参数
activationDesc
输入/输出。已创建的激活描述符的句柄。
mode
输入。指定激活模式的枚举。
reluNanOpt
输入。指定NaN传播模式的枚举。
coef
输入。浮点数。当激活模式(请参见mcdnnActivationMode_t)设置为MCDNN_ACTIVATION_CHIPPED_RELU时,此输入指定裁剪阈值;当激活模式设置为MCDNN_ACTIVATION_RELU时,此输入指定上限。
返回值
MCDNN_STATUS_SUCCESS
对象设置成功。
MCDNN_STATUS_BAD_PARAM
mode或reluNanOpt具有无效的枚举值。
2.2.1.78. mcdnnSetActivationDescriptorSwishBeta()
mcdnnStatus_t mcdnnSetActivationDescriptorSwishBeta(
mcdnnActivationDescriptor_t activationDesc,
double swish_beta)
此函数用于将Swish激活函数的beta参数设置为swish_beta。
参数
activationDesc
输入/输出。已创建的激活描述符的句柄。
swish_beta
输入。设置为Swish激活函数beta参数的值。
返回值
MCDNN_STATUS_SUCCESS
值设置成功。
MCDNN_STATUS_BAD_PARAM
此激活描述符是一个NULL指针。
2.2.1.79. mcdnnSetAlgorithmDescriptor()
此函数用于初始化已创建的通用算法描述符对象。
mcdnnStatus_t mcdnnSetAlgorithmDescriptor(
mcdnnAlgorithmDescriptor_t algorithmDesc,
mcdnnAlgorithm_t algorithm)
参数
algorithmDesc
输入/输出。已创建的算法描述符的句柄。
algorithm
输入。指定算法的结构。
返回值
MCDNN_STATUS_SUCCESS
对象设置成功。
2.2.1.80. mcdnnSetAlgorithmPerformance()
此函数用于初始化已创建的通用算法性能对象。
mcdnnStatus_t mcdnnSetAlgorithmPerformance(
mcdnnAlgorithmPerformance_t algoPerf,
mcdnnAlgorithmDescriptor_t algoDesc,
mcdnnStatus_t status,
float time,
size_t memory)
参数
algoPerf
输入/输出。已创建的算法性能对象的句柄。
algoDesc
输入。性能结果描述的算法描述符。
status
输入。运行algoDesc算法返回的mcDNN状态。
time
输入。GPU运行algoDesc算法消耗的时间。
memory
输入。运行algoDesc算法所需的GPU内存。
返回值
MCDNN_STATUS_SUCCESS
对象设置成功。
MCDNN_STATUS_BAD_PARAM
mode或reluNanOpt具有无效的枚举值。
2.2.1.81. mcdnnSetCallback()
此函数用于设置mcDNN错误报告功能的内部状态。
mcdnnStatus_t mcdnnSetCallback(
unsigned mask,
void *udata,
mcdnnCallback_t fptr)
参数
mask
输入。无符号整数。此无符号整数的四个LSB用于打开和关闭不同级别的错误报告消息。这适用于默认回调和自定义回调。该比特位与mcdnnSeverity_t枚举对应。用户可以使用预定义的MCDNN_SEV_ERROR_EN,MCDNN_SEV_WARNING_EN和MCDNN_SEV_INFO_EN宏来组成位掩码。当一个bit设置为1时,将启用相应的消息通道。
例如,当bit 3设置为1时,将启用API日志记录。目前,仅支持MCDNN_SEV_INFO级别的日志输出;其他输出尚未实现。 当使用默认回调打开和关闭日志记录时,用户可以将NULL传入udata和fptr。此外,必须设置环境变量MCDNN_LOGDEST_DBG。。
MCDNN_SEV_INFO_EN= 0b1000(功能已实现)。
MCDNN_SEV_ERROR_EN= 0b0010(功能暂未实现)。
MCDNN_SEV_WARNING_EN= 0b0100(功能暂未实现)。
MCDNN_SEV_FATAL的输出始终处于启用状态且不能禁用。
udata
输入。用户提供的指针。此指针将传入用户的自定义日志记录回调函数。它所指向的数据不会被读取,mcDNN也不会更改。此指针可以有多种用途,例如在互斥锁(mutex)或通信套接字(communication socket)中用于用户的日志记录回调函数。如果用户正在使用默认的回调函数,或者不想在自定义的回调函数中使用此输入,可以传入NULL。
fptr
输入。指向用户提供的回调函数的指针。将NULL传入该指针时,mcDNN切换回内置的缺省回调函数。用户提供的回调函数原型必须类似于以下内容(也在头文件中定义):
void customizedLoggingCallback (mcdnnSeverity_t sev, void *udata, const
mcdnnDebug_t *dbg, const char *msg);
在头文件中定义了mcdnnDebug_t结构。它提供了用户可以选择打印或存储在自定义回调中的元数据,如时间,自启动以来的时间,流ID,进程和线程ID。
变量msg是mcDNN生成的日志消息。此消息的每一行都由0终止,消息的结尾由00终止。用户可以选择需要在日志中显示的内容,也可以重新格式化字符串。
返回值
MCDNN_STATUS_SUCCESS
此函数启用成功。
2.2.1.82. mcdnnSetDropoutDescriptor()
mcdnnStatus_t mcdnnSetDropoutDescriptor(mcdnnDropoutDescriptor_t dropoutDesc,
mcdnnHandle_t handle,
float dropout,
void *states,
size_t stateSizeInBytes,
unsigned long long seed)
此函数用于初始化已创建的丢弃描述符对象。如果states参数等于NULL,则不会初始化随机数生成器状态,并且只会设置dropout值。在计算期间,用户不应更改states所指向的内存。
当states参数不为NULL时,mcdnnSetDropoutDescriptor()调用一个随机初始化内核。此内核需要大量GPU内存用于堆栈。内核完成时释放内存。当没有足够的内存可用于GPU堆栈时,将返回MCDNN_STATUS_ALLOC_FAILED状态。
参数
dropoutDesc
输入/输出。已创建的丢弃描述符对象。
handle
输入。已创建的mcDNN上下文的句柄。
dropout
输入。在丢弃层输入值设置为0的概率。
states
输出。指向用户分配的GPU内存的指针,该内存将保存随机数生成器状态。
stateSizeInBytes
输入。指定为states所提供内存的大小(以字节为单位)。
seed
输入。用于初始化随机数生成器状态的种子(Seed)。
返回值
MCDNN_STATUS_SUCCESS
调用成功。
MCDNN_STATUS_INVALID_VALUE
sizeInBytes参数小于mcdnnDropoutGetStatesSize()返回的值。
MCDNN_STATUS_ALLOC_FAILED
此函数临时扩展GPU堆栈失败。
MCDNN_STATUS_EXECUTION_FAILED
此函数在GPU上启用失败。
MCDNN_STATUS_INTERNAL_ERROR
内部使用的MXMACA函数返回错误状态。
2.2.1.83. mcdnnSetFilter4dDescriptor()
mcdnnStatus_t mcdnnSetFilter4dDescriptor(
mcdnnFilterDescriptor_t filterDesc,
mcdnnDataType_t dataType,
mcdnnTensorFormat_t format,
int k,
int c,
int h,
int w)
此函数将已创建的卷积核描述符对象初始化为4D卷积核。卷积核的布局在内存中必须是连续的。 张量格式MCDNN_TENSOR_NHWC在mcdnnConvolutionForward(),mcdnnConvolutionBackwardData()和mcdnnConvolutionBackwardFilter()中的支持有限。
参数
filterDesc
输入/输出。已创建的卷积核描述符的句柄。
datatype
输入。数据类型。
format
输入。卷积核布局格式的类型。如果将此输入设置为MCDNN_TENSOR_NCHW(mcdnnTensorFormat_t描述符支持的枚举值之一),则卷积核的布局采用KCRS的形式,其中:
K是输出特征图的数量
C是输入特征图的数量
R是每个卷积核的行数
S是每个卷积核的列数
如果此输入设置为MCDNN_TENSOR_NHWC,则卷积核的布局采用KRSC的形式。 更多信息,参见mcdnnTensorFormat_t。
k
输入。输出特征图的数量。
c
输入。输入特征图的数量。
h
输入。每个卷积核的高度。
w
输入。每个卷积核的宽度。
返回值
MCDNN_STATUS_SUCCESS
对象设置成功。
MCDNN_STATUS_BAD_PARAM
k,c,h,w参数中至少有一个为负值,或者dataType或format具有无效的枚举值。
2.2.1.84. mcdnnSetFilterNdDescriptor()
mcdnnStatus_t mcdnnSetFilterNdDescriptor(
mcdnnFilterDescriptor_t filterDesc,
mcdnnDataType_t dataType,
mcdnnTensorFormat_t format,
int nbDims,
const int filterDimA[])
此函数用于初始化已创建的卷积核描述符对象。卷积核的布局在内存中必须是连续的。 张量格式MCDNN_TENSOR_NHWC在mcdnnConvolutionForward(),mcdnnConvolutionBackwardData()和mcdnnConvolutionBackwardFilter()中的支持有限。
参数
filterDesc
输入/输出。已创建的卷积核描述符的句柄。
datatype
输入。数据类型。
format
输入。卷积核布局格式的类型。如果将此输入设置为MCDNN_TENSOR_NCHW(mcdnnTensorFormat_t描述符支持的枚举值之一),则卷积核的布局如下:
N=4时,即4D卷积核描述符,卷积核布局采用KCRS的形式:
K是输出特征图的数量
C是输入特征图的数量
R是每个卷积核的行数
S是每个卷积核的列数
N=3时,即3D卷积核描述符,将省略数字S(每个卷积核的列数)。
N=5及更大时,更高维度的布局立即遵循RS。
另外,如果此输入设置为MCDNN_TENSOR_NHWC,则卷积核的布局如下:
N=4时,即4D卷积核描述符,卷积核布局采用KRSC的形式。
N=3时,即3D卷积核描述符,将省略数字S(每个卷积核的列数),且C的布局立即遵循R。
N=5及更大时,更高维度的布局插入在S和C之间。
更多信息,参见mcdnnTensorFormat_t。
nbDims
输入。卷积核的维度。
filterDimA
输入。nbDims维度的数组,包含每个维度的卷积核大小。
返回值
MCDNN_STATUS_SUCCESS
对象设置成功。
MCDNN_STATUS_BAD_PARAM
filterDimA数组中至少有一个元素为负值,或者dataType或format具有无效的枚举值。
MCDNN_STATUS_NOT_SUPPORTED
nbDims参数大于MCDNN_DIM_MAX。
2.2.1.85. mcdnnSetLRNDescriptor()
此函数用于初始化已创建的LRN描述符对象。
mcdnnStatus_t mcdnnSetLRNDescriptor(
mcdnnLRNDescriptor_t normDesc,
unsigned lrnN,
double lrnAlpha,
double lrnBeta,
double lrnK)
备注
mcdnn.h中定义的MCDNN_LRN_MIN_N,MCDNN_LRN_MAX_N,MCDNN_LRN_MIN_K,MCDNN_LRN_MIN_BETA宏指定参数的有效范围。
在计算过程中,双精度参数的值将向下转换(cast down)为张量数据类型。
参数
normDesc
输出。已创建的LRN描述符的句柄。
lrnN
输入。元素中的归一化窗口宽度。LRN层使用一个[centerlookBehind, center+Lookahead]窗口,其中lookBehind = floor( (lrnN-1)/2 ),lookAhead = lrnN-lookBehind-1。因此,对于n=10,窗口为[k-4…k..k+5],共有10个样本。对于DivisiveNormalization层,窗口在所有空间维度(dimA[2],dimA[3],dimA[4])中具有与上述相同的范围。默认情况下,lrnN在mcdnnCreateLRNDescriptor()中设置为5。
lrnAlpha
输入。归一化公式中alpha方差缩放参数的值。在库代码中,此值在LRN层除以窗宽,在DivisiveNormalization层中除以(窗宽)^#spatialDimensions。 默认情况下,此值在mcdnnCreateLRNDescriptor()中设置为1e-4。
lrnBeta
输入。归一化公式中beta power参数的值。默认情况下,此值在mcdnnCreateLRNDescriptor()中设置为0.75。
lrnK
输入。归一化公式中k参数的值。默认情况下,此值设置为2.0。
返回值
MCDNN_STATUS_SUCCESS
对象设置成功。
MCDNN_STATUS_BAD_PARAM
其中一个输入参数超出上述有效范围。
2.2.1.86. mcdnnSetOpTensorDescriptor()
mcdnnStatus_t mcdnnSetOpTensorDescriptor(
mcdnnOpTensorDescriptor_t opTensorDesc,
mcdnnOpTensorOp_t opTensorOp,
mcdnnDataType_t opTensorCompType,
mcdnnNanPropagation_t opTensorNanOpt)
此函数用于初始化张量逐点数学运算描述符。
参数
opTensorDesc
输出。指针,指向包含张量逐点数学运算描述符的结构。
opTensorOp
输入。此张量逐点数学运算描述符的张量逐点数学运算。
opTensorCompType
输入。此张量逐点数学运算描述符的计算数据类型。
opTensorNanOpt
输入。NaN传播策略。
返回值
MCDNN_STATUS_SUCCESS
此函数返回成功。
MCDNN_STATUS_BAD_PARAM
传入的输入参数至少有一个是无效的。
2.2.1.87. mcdnnSetPooling2dDescriptor()
mcdnnStatus_t mcdnnSetPooling2dDescriptor(
mcdnnPoolingDescriptor_t poolingDesc,
mcdnnPoolingMode_t mode,
mcdnnNanPropagation_t maxpoolingNanOpt,
int windowHeight,
int windowWidth,
int verticalPadding,
int horizontalPadding,
int verticalStride,
int horizontalStride)
此函数将已创建的通用池化描述符对象初始化为2D描述符。
参数
poolingDesc
输入/输出。已创建的池化描述符的句柄。
mode
输入。指定池化模式的枚举。
maxpoolingNanOpt
输入。指定NaN传播模式的枚举。
windowHeight
输入。池化窗口的高度。
windowWidth
输入。池化窗口的宽度。
verticalPadding
输入。垂直填充的大小。
horizontalPadding
输入。水平填充的大小。
verticalStride
输入。池化垂直步幅。
horizontalStride
输入。池化水平步幅。
返回值
MCDNN_STATUS_SUCCESS
对象设置成功。
MCDNN_STATUS_BAD_PARAM
windowHeight、windowWidth、verticalStride、horizontalStride参数中至少有一个为负值,或者mode或maxpoolingNanOpt具有无效的枚举值。
2.2.1.88. mcdnnSetPoolingNdDescriptor()
mcdnnStatus_t mcdnnSetPoolingNdDescriptor(
mcdnnPoolingDescriptor_t poolingDesc,
const mcdnnPoolingMode_t mode,
const mcdnnNanPropagation_t maxpoolingNanOpt,
int nbDims,
const int windowDimA[],
const int paddingA[],
const int strideA[])
此函数用于初始化已创建的通用池化描述符对象。
参数
poolingDesc
输入/输出。已创建的池化描述符的句柄。
mode
输入。指定池化模式的枚举。
maxpoolingNanOpt
输入。指定NaN传播模式的枚举。
nbDims
输入。池化操作的维度。必须大于零。
windowDimA
输入。nbDims维度的数组,包含每个维度的窗口大小。数组元素的值必须大于零。
paddingA
输入。nbDims维度的数组,包含每个维度的填充大小。允许负填充。
strideA
输入。nbDims维度的数组,包含每个维度的步幅大小。数组元素的值必须大于零(即不允许负的步幅)。
返回值
MCDNN_STATUS_SUCCESS
对象初始化成功。
MCDNN_STATUS_NOT_SUPPORTED
如果 (nbDims > MCDNN_DIM_MAX-2)。
MCDNN_STATUS_BAD_PARAM
nbDims,或者windowDimA或strideA数组中至少有一个元素为负值。或者mode或maxpoolingNanOpt具有无效的枚举值。
2.2.1.89. mcdnnSetReduceTensorDescriptor()
mcdnnStatus_t mcdnnSetReduceTensorDescriptor(
mcdnnReduceTensorDescriptor_t reduceTensorDesc,
mcdnnReduceTensorOp_t reduceTensorOp,
mcdnnDataType_t reduceTensorCompType,
mcdnnNanPropagation_t reduceTensorNanOpt,
mcdnnReduceTensorIndices_t reduceTensorIndices,
mcdnnIndicesType_t reduceTensorIndicesType)
此函数用于初始化已创建的归约张量描述符对象。
参数
reduceTensorDesc
输入/输出。已创建的归约张量描述符的句柄。
reduceTensorOp
输入。指定归约张量操作的枚举。
reduceTensorCompType
输入。指定归约计算数据类型的枚举。
reduceTensorNanOpt
输入。指定NaN传播模式的枚举。
reduceTensorIndices
输入。指定归约张量索引的枚举。
reduceTensorIndicesType
输入。指定归约张量索引类型的枚举。
返回值
MCDNN_STATUS_SUCCESS
对象设置成功。
MCDNN_STATUS_BAD_PARAM
reduceTensorDesc为NULL(reduceTensorOp,reduceTensorCompType,reduceTensorNanOpt,reduceTensorIndices或reduceTensorIndicesType具有无效的枚举值)。
2.2.1.90. mcdnnSetSpatialTransformerNdDescriptor()
此函数用于初始化已创建的通用空间转换描述符对象。
mcdnnStatus_t mcdnnSetSpatialTransformerNdDescriptor(
mcdnnSpatialTransformerDescriptor_t stDesc,
mcdnnSamplerType_t samplerType,
mcdnnDataType_t dataType,
const int nbDims,
const int dimA[])
参数
stDesc
输入/输出。已创建的空间转换描述符对象。
samplerType
输入。指定采样器类型的枚举。
dataType
输入。数据类型。
nbDims
输入。转换张量的维度。
dimA
输入。nbDims维度的数组,包含每个维度的转换张量大小。
返回值
MCDNN_STATUS_SUCCESS
调用成功。
MCDNN_STATUS_BAD_PARAM
需至少满足以下任一条件:
stDesc或dimA为NULL。
dataType或samplerType具有无效的枚举值。
2.2.1.91. mcdnnSetStream()
此函数在mcDNN句柄中设置用户MXMACA流。新的流将用于启动mcDNN GPU内核或在内部流中启动mcDNN内核时同步到此流。如果未设置mcDNN库流,则所有内核都使用默认的(NULL)流。在mcDNN句柄中设置用户流可确保在同一流中启动的mcDNN调用和其他GPU计算核的执行顺序。
mcdnnStatus_t mcdnnSetStream(
mcdnnHandle_t handle,
mcStream_t streamId)
内部流与上次调用此函数时设置的流具有相同的优先级。
参数
handle
输入。指向mcDNN句柄的指针。
streamID
输入。要写入mcDNN句柄的新MXMACA流。
返回值
MCDNN_STATUS_BAD_PARAM
无效(NULL)句柄。
MCDNN_STATUS_MAPPING_ERROR
用户流和mcDNN句柄上下文之间不匹配。
MCDNN_STATUS_SUCCESS
新流设置成功。
2.2.1.92. mcdnnSetTensor()
mcdnnStatus_t mcdnnSetTensor(
mcdnnHandle_t handle,
const mcdnnTensorDescriptor_t yDesc,
void *y,
const void *valuePtr)
该函数将张量所有元素设置为一个给定值。
参数
handle
输入。已创建的mcDNN上下文的句柄。
yDesc
输入。已初始化的张量描述符的句柄。
y
输入/输出。指针,指向yDesc描述符描述的张量数据。
valuePtr
输入。主机内存中指向单个值的指针。y张量的所有元素都将设置为value[0]。value[0]中元素的数据类型必须与y张量的数据类型匹配。
返回值
MCDNN_STATUS_SUCCESS
此函数启用成功。
MCDNN_STATUS_NOT_SUPPORTED
此函数不支持已提供的配置。
MCDNN_STATUS_BAD_PARAM
任一已提供的指针为nil。
MCDNN_STATUS_EXECUTION_FAILED
此函数在GPU上启用失败。
2.2.1.93. mcdnnSetTensor4dDescriptor()
mcdnnStatus_t mcdnnSetTensor4dDescriptor(
mcdnnTensorDescriptor_t tensorDesc,
mcdnnTensorFormat_t format,
mcdnnDataType_t dataType,
int n,
int c,
int h,
int w)
此函数将已创建的通用张量描述符对象初始化为4D张量。 从format参数推断出四个维度的步幅,并以这样的方式设置:数据在内存中是连续的,在维度之间没有填充。
参数
tensorDesc
输入/输出。已创建的张量描述符的句柄。
format
输入。格式类型。
datatype
输入。数据类型。
n
输入。图像数量。
c
输入。每个图像的特征图数量。
h
输入。每个特征图的高度。
w
输入。每个特征图的宽度。
返回值
MCDNN_STATUS_SUCCESS
对象设置成功。
MCDNN_STATUS_BAD_PARAM
n,c,h,w参数中至少有一个为负值,或者format或dataType具有无效的枚举值。
MCDNN_STATUS_NOT_SUPPORTED
张量描述符的总大小超过最大限制2 Giga-elements。
2.2.1.94. mcdnnSetTensor4dDescriptorEx()
该函数将已创建的通用张量描述符对象初始化为4D张量,类似于mcdnnSetTensor4dDescriptor(),但将步幅作为参数显式传递。这可用于以任何顺序排列4D张量,或仅定义维度之间的间隙。
mcdnnStatus_t mcdnnSetTensor4dDescriptorEx(
mcdnnTensorDescriptor_t tensorDesc,
mcdnnDataType_t dataType,
int n,
int c,
int h,
int w,
int nStride,
int cStride,
int hStride,
int wStride)
目前,某些mcDNN函数对步幅的支持有限。如果使用了步幅不受支持的4D张量对象,则这些函数将返回MCDNN_STATUS_NOT_SUPPORTED。mcdnnTransformTensor()可用于将数据转换为支持的布局。 一个张量的总大小(包括维度之间的潜在填充)限制为2 Giga-elements的dataType。
参数
tensorDesc
输入/输出。已创建的张量描述符的句柄。
datatype
输入。数据类型。
n
输入。图像数量。
c
输入。每个图像的特征图数量。
h
输入。每个特征图的高度。
w
输入。每个特征图的宽度。
nStride
输入。两个连续图像之间的步幅。
cStride
输入。两个连续特征图之间的步幅。
hStride
输入。两个连续行之间的步幅。
wStride
输入。两个连续列之间的步幅。
返回值
MCDNN_STATUS_SUCCESS
对象设置成功。
MCDNN_STATUS_BAD_PARAM
n,c,h,w参数中或nStride,cStride,hStride,wStride中至少有一个为负值,或者dataType具有无效的枚举值。
MCDNN_STATUS_NOT_SUPPORTED
张量描述符的总大小超过最大限制2 Giga-elements。
2.2.1.95. mcdnnSetTensorNdDescriptor()
此函数用于初始化已创建的通用张量描述符对象。
mcdnnStatus_t mcdnnSetTensorNdDescriptor(
mcdnnTensorDescriptor_t tensorDesc,
mcdnnDataType_t dataType,
int nbDims,
const int dimA[],
const int strideA[])
一个张量的总大小(包括维度之间的潜在填充)限制为该数据类型的元素个数问2G。张量必须至少有4个维度,至多有MCDNN_DIM_MAX个维度(在mcdnn.h中定义)。使用低维数据时,建议用户创建4D张量,并将未使用维度的大小设置为1。
参数
tensorDesc
输入/输出。已创建的张量描述符的句柄。
datatype
输入。数据类型。
nbDims
输入。张量的维度。
备注
请勿使用2维。更多信息,参见mcdnnGetRNNLinLayerBiasParams()。
dimA
输入。nbDims维度的数组,包含每个维度的张量大小。未使用维度的大小应设置为1。根据惯例,数组中的维度顺序遵循[N, C, D, H, W]格式, 其中W占数组中最小的索引。
strideA
输入。nbDims维度的数组,包含每个维度的张量步幅。 根据惯例,数组中的步幅顺序遵循[Nstride, Cstride, Dstride, Hstride, Wstride]格式,其中Wstride占数组中最小的索引。
返回值
MCDNN_STATUS_SUCCESS
对象设置成功。
MCDNN_STATUS_BAD_PARAM
dimA数组中至少有一个元素为负值或0,或者dataType具有无效的枚举值。
MCDNN_STATUS_NOT_SUPPORTED
参数nbDims超出[4, MCDNN_DIM_MAX]范围,或张量描述符的总大小超过最大限制2 Giga-elements。
2.2.1.96. mcdnnSetTensorNdDescriptorEx()
mcdnnStatus_t mcdnnSetTensorNdDescriptorEx(
mcdnnTensorDescriptor_t tensorDesc,
mcdnnTensorFormat_t format,
mcdnnDataType_t dataType,
int nbDims,
const int dimA[])
此函数用于初始化n-D张量描述符。
参数
tensorDesc
输出。指针,指向要初始化的张量描述符结构。
format
输入。张量格式。
dataType
输入。张量数据类型。
nbDims
输入。张量的维度。
备注
请勿使用2维。更多信息,参见mcdnnGetRNNLinLayerBiasParams()。
dimA
输入。包含每个维度大小的数组。
返回值
MCDNN_STATUS_SUCCESS
此函数执行成功。
MCDNN_STATUS_BAD_PARAM
张量描述符分配不正确;或输入参数设置不正确。
MCDNN_STATUS_NOT_SUPPORTED
请求的维度尺寸大于支持的最大尺寸。
2.2.1.97. mcdnnSetTensorTransformDescriptor()
mcdnnStatus_t mcdnnSetTensorTransformDescriptor(
mcdnnTensorTransformDescriptor_t transformDesc,
const uint32_t nbDims,
const mcdnnTensorFormat_t destFormat,
const int32_t padBeforeA[],
const int32_t padAfterA[],
const uint32_t foldA[],
const mcdnnFoldingDirection_t direction);
此函数用于初始化张量转换描述符,此描述符是已使用mcdnnCreateTensorTransformDescriptor()函数创建的。
参数
transformDesc
输出。要初始化的张量转换描述符。
nbDims
输入。转换操作对象的维度。必须大于2。更多信息,参见张量描述符。
destFormat
输入。需要的目标格式。
padBeforeA[]
输入。包含每个维度前应添加填充量的数组。设置为NULL,不进行填充。
padAfterA[]
输入。包含每个维度后应添加填充量的数组。设置为NULL,不进行填充。
foldA[]
输入。包含每个空间维度(2维及以上)folding参数的数组。设置为NULL,不进行折叠。
direction
输入。选择折叠或展开。当folding参数全部<=1时,此输入无效。更多信息,参见mcdnnFoldingDirection_t。
返回值
MCDNN_STATUS_SUCCESS
此函数启用成功。
MCDNN_STATUS_BAD_PARAM
若direction无效或nbDims<=2,transformDesc参数为NULL。
MCDNN_STATUS_NOT_SUPPORTED
如果请求的维度尺寸大于支持的最大尺寸(即其中一个nbDims大于MCDNN_DIM_MAX),或者destFrom不是NCHW或NHWC。
2.2.1.98. mcdnnSoftmaxForward()
此函数计算softmax函数。
mcdnnStatus_t mcdnnSoftmaxForward(
mcdnnHandle_t handle,
mcdnnSoftmaxAlgorithm_t algo,
mcdnnSoftmaxMode_t mode,
const void *alpha,
const mcdnnTensorDescriptor_t xDesc,
const void *x,
const void *beta,
const mcdnnTensorDescriptor_t yDesc,
void *y)
所有张量格式都支持4D和5D张量的所有模式和算法。NCHW完全压缩格式(fully packed)张量的性能最佳。超过5个维度的张量,必须在其空间维度中进行压缩。
数据类型
此函数支持以下数据类型:
MCDNN_DATA_FLOAT
MCDNN_DATA_DOUBLE
MCDNN_DATA_HALF
MCDNN_DATA_BFLOAT16
MCDNN_DATA_INT8
参数
handle
输入。已创建的mcDNN上下文的句柄。
algorithm
输入。指定softmax算法的枚举。
mode
输入。指定softmax模式的枚举。
alpha, beta
输入。指向缩放系数(主机内存中)的指针,用于将计算结果与输出层中的先验值混合,如下所示:
dstValue = alpha[0]*result + beta[0]*priorDstValue
xDesc
输入。已初始化的输入张量描述符的句柄。
x
输入。数据指针,指向与张量描述符xDesc关联的GPU内存。
yDesc
输入。已初始化的输出张量描述符的句柄。
y
输出。数据指针,指向与输出张量描述符yDesc关联的GPU内存。
返回值
MCDNN_STATUS_SUCCESS
此函数启用成功。
MCDNN_STATUS_NOT_SUPPORTED
此函数不支持已提供的配置。
MCDNN_STATUS_BAD_PARAM
需至少满足以下任一条件:
输入张量和输出张量的n,c,h,w维度不同。
输入张量和输出张量的数据类型不同。
algorithm参数或mode参数具有无效的枚举值。
MCDNN_STATUS_EXECUTION_FAILED
此函数在GPU上启用失败。
2.2.1.99. mcdnnSpatialTfGridGeneratorForward()
该函数在输入张量中生成一个坐标网格,对应于输出张量中的每个像素。
mcdnnStatus_t mcdnnSpatialTfGridGeneratorForward(
mcdnnHandle_t handle,
const mcdnnSpatialTransformerDescriptor_t stDesc,
const void *theta,
void *grid)
仅支持2D转换。
参数
handle
输入。已创建的mcDNN上下文的句柄。
stDesc
输入。已创建的空间转换描述符对象。
theta
输入。仿射变换矩阵。对于2D转换,其大小应为n*2*3,其中n是stDesc中指定的图像数。
grid
输出。坐标网格。对于2D转换,其大小应为n*h*w*2,其中n,h,w是stDesc中指定的。在第四维中,第一个坐标为x,第二个坐标为y。
返回值
MCDNN_STATUS_SUCCESS
调用成功。
MCDNN_STATUS_BAD_PARAM
需至少满足以下任一条件:
handle为NULL。
grid参数或theta参数任一为NULL。
MCDNN_STATUS_NOT_SUPPORTED
此函数不支持已提供的配置。不受支持的配置示例如下:
stDesc中指定的转换张量的维度> 4。
MCDNN_STATUS_EXECUTION_FAILED
此函数在GPU上启用失败。
2.2.1.100. mcdnnSpatialTfSamplerForward()
此函数执行采样器操作,并使用网格生成器提供的网格生成输出张量。
mcdnnStatus_t mcdnnSpatialTfSamplerForward(
mcdnnHandle_t handle,
const mcdnnSpatialTransformerDescriptor_t stDesc,
const void *alpha,
const mcdnnTensorDescriptor_t xDesc,
const void *x,
const void *grid,
const void *beta,
mcdnnTensorDescriptor_t yDesc,
void *y)
仅支持2D转换。
参数
handle
输入。已创建的mcDNN上下文的句柄。
stDesc
输入。已创建的空间转换描述符对象。
alpha, beta
输入。指向缩放系数(主机内存中)的指针,用于将源数值与目标张量中的先验值混合,如下所示: dstValue = alpha[0]*srcValue + beta[0]*priorDstValue
xDesc
输入。已初始化的输入张量描述符的句柄。
x
输入。数据指针,指向与张量描述符xDesc关联的GPU内存。
grid
输入。由mcdnnSpatialTfGridGeneratorForward()生成的坐标网格。
yDesc
输入。已初始化的输出张量描述符的句柄。
y
输出。数据指针,指向与输出张量描述符yDesc关联的GPU内存。
返回值
MCDNN_STATUS_SUCCESS
调用成功。
MCDNN_STATUS_BAD_PARAM
需至少满足以下任一条件:
handle为NULL。
x、y、grid参数任一为NULL。
MCDNN_STATUS_NOT_SUPPORTED
此函数不支持已提供的配置。不受支持的配置示例如下:
转换张量的维度> 4。
MCDNN_STATUS_EXECUTION_FAILED
此函数在GPU上启用失败。
2.2.1.101. mcdnnTransformFilter()
此函数根据描述在不同格式、数据类型或维度之间转换卷积核。它可用于将布局格式不受支持的卷积核转换为布局格式受支持的卷积核。
mcdnnStatus_t mcdnnTransformFilter(
mcdnnHandle_t handle,
const mcdnnTensorTransformDescriptor_t transDesc,
const void *alpha,
const mcdnnFilterDescriptor_t srcDesc,
const void *srcData,
const void *beta,
const mcdnnFilterDescriptor_t destDesc,
void *destData);
此函数将缩放数据从srcDesc输入卷积核复制到具有不同布局的destDesc输出张量。如果srcDesc和destDesc卷积核描述符具有不同的维度,它们的折叠和填充量以及transDesc中指定的顺序必须一致。
srcDesc和destDesc张量不能以任何方式重叠(即,张量不能就地转换)。
备注
执行折叠转换或零填充转换时,缩放系数(alpha,beta)应设置为(1,0)。但是,非折叠转换支持任何(alpha,beta)值。此函数是线程安全的。
参数
handle
输入。已创建的mcDNN上下文的句柄。更多信息,参见mcdnnHandle_t。
transDesc
输入。包含请求的卷积核转换详细信息的描述符。更多信息,参见mcdnnTensorTransformDescriptor_t。
alpha, beta
输入。指针,指向用于缩放srcDesc输入张量数据的缩放系数,位于主机内存中。 beta用于缩放目标张量,alpha用于缩放源张量。 在折叠和零填充情况下,不接受beta缩放值。非折叠支持任何(alpha,beta)值。
srcDesc, destDesc
输入。已启用的卷积核描述符的句柄。srcDesc和destDesc不能重叠。更多信息,参见mcdnnTensorDescriptor_t。
srcData
输入。指针,指向由srcDesc描述的张量数据,位于主机内存中。
destData
输出。指针,指向由destDesc描述的张量数据,位于主机内存中。
返回值
MCDNN_STATUS_SUCCESS
此函数启用成功。
MCDNN_STATUS_BAD_PARAM
参数未初始化或初始化不正确,或者srcDesc和destDesc的维数不同。
MCDNN_STATUS_NOT_SUPPORTED
此函数不支持已提供的配置。此外,在折叠和填充路径中,除A=1和B=0之外的任何值都将导致MCDNN_STATUS_NOT_SUPPORTED。
MCDNN_STATUS_EXECUTION_FAILED
此函数在GPU上启用失败。
2.2.1.102. mcdnnTransformTensor()
mcdnnStatus_t mcdnnTransformTensor(
mcdnnHandle_t handle,
const void *alpha,
const mcdnnTensorDescriptor_t xDesc,
const void *x,
const void *beta,
const mcdnnTensorDescriptor_t yDesc,
void *y)
此函数将缩放数据从一个张量复制到具有不同布局的另一个张量。这些描述符需要具有相同的维度,但可以有不同的步幅。 输入和输出张量不能以任何方式重叠(即,张量不能就地转换)。该函数可用于将格式不受支持的张量转换为格式受支持的张量。
参数
handle
输入。已创建的mcDNN上下文的句柄。
alpha, beta
输入。指向缩放系数(主机内存中)的指针,用于将源数值与目标张量中的先验值混合,如下所示: dstValue = alpha[0]*srcValue + beta[0]*priorDstValue。
xDesc
输入。已初始化的张量描述符的句柄。更多信息,参见mcdnnTensorDescriptor_t。
x
输入。指针,指向xDesc描述符描述的张量数据。
yDesc
输入。已初始化的张量描述符的句柄。更多信息,参见mcdnnTensorDescriptor_t。
y
输出。指针,指向yDesc描述符描述的张量数据。
返回值
MCDNN_STATUS_SUCCESS
此函数启用成功。
MCDNN_STATUS_NOT_SUPPORTED
此函数不支持已提供的配置。
MCDNN_STATUS_BAD_PARAM
两个张量描述符的n、c、h、w维度或dataType不同。
MCDNN_STATUS_EXECUTION_FAILED
此函数在GPU上启用失败。
2.2.1.103. mcdnnTransformTensorEx()
mcdnnStatus_t mcdnnTransformTensorEx(
mcdnnHandle_t handle,
const mcdnnTensorTransformDescriptor_t transDesc,
const void *alpha,
const mcdnnTensorDescriptor_t srcDesc,
const void *srcData,
const void *beta,
const mcdnnTensorDescriptor_t destDesc,
void *destData);
此函数在不同格式之间转换张量布局。它可用于将布局格式不受支持的张量转换为布局格式受支持的张量。 此函数将缩放数据从srcDesc输入张量复制到具有不同布局的destDesc输出张量。srcDesc和destDesc的张量描述符需要具有相同的维度,但可以有不同的步幅。 srcDesc和destDesc张量不能以任何方式重叠(即,张量不能就地转换)。
备注
执行折叠转换或零填充转换时,缩放系数(alpha,beta)应设置为(1,0)。但是,非折叠转换支持任何(alpha,beta)值。此函数是线程安全的。
参数
handle
输入。已创建的mcDNN上下文的句柄。更多信息,参见mcdnnHandle_t。
transDesc
输入。包含请求的张量转换详细信息的描述符。更多信息,参见mcdnnTensorTransformDescriptor_t。
alpha, beta
输入。指针,指向用于缩放srcDesc输入张量数据的缩放系数,位于主机内存中。 beta用于缩放目标张量,alpha用于缩放源张量。 在折叠和零填充情况下,不接受beta缩放值。非折叠支持任何(alpha,beta)值。
srcDesc, destDesc
输入。已启用的张量描述符的句柄。srcDesc和destDesc不能重叠。更多信息,参见mcdnnTensorDescriptor_t。
srcData
输入。指针,指向由srcDesc描述的张量数据,位于主机内存中。
destData
输出。指针,指向由destDesc描述的张量数据,位于主机内存中。
返回值
MCDNN_STATUS_SUCCESS
此函数启用成功。
MCDNN_STATUS_BAD_PARAM
参数未初始化或初始化不正确,或者srcDesc和destDesc的维数不同。
MCDNN_STATUS_NOT_SUPPORTED
此函数不支持已提供的配置。此外,在折叠和填充路径中,除A=1和B=0之外的任何值都将导致MCDNN_STATUS_NOT_SUPPORTED。
MCDNN_STATUS_EXECUTION_FAILED
此函数在GPU上启用失败。