常用数据类型和API函数(持续更新中...)
本篇列举在darknet代码研读过程中遇到的常用数据类型和API函数。
2021.08.08更新
数据类型:cudnnDataType_t
cudnnDataType_t是darknet的cudnn_convolutional_setup()函数中出现的一个数据类型。
它是一个枚举型,指示张量描述符(tensor descriptor)或筛选器描述(filter descriptor)符所引用的数据类型。
值 | 说明 |
---|---|
CUDNN_DATA_FLOAT | 32位单精度浮点数 |
CUDNN_DATA_DOUBLE | 64位双精度浮点数 |
CUDNN_DATA_HALF | 16位浮点数 |
CUDNN_DATA_INT8 | 8位有符号整型 |
CUDNN_DATA_UINT8 | 8位无符号整型 |
CUDNN_DATA_INT32 | 32位有符号整型 |
CUDNN_DATA_INT8x4 | 32位元素,包含4个8位有符号整形。此数据类型仅支持张量格式CUDNN_TENSOR_NCHW_VECT_C |
CUDNN_DATA_INT8x32 | 32位元素向量,每个元素包含4个8位有符号整形。此数据类型仅支持张量格式CUDNN_TENSOR_NCHW_VECT_C,而且此数据类型只能用于algo 1,即CUDNN_CONVOLUTION_FWD_ALGO_IMPLICIT_PRECOMP_GEMM。关于更多信息参考cudnnConvolutionFwdAlgo_t数据类型。 |
CUDNN_DATA_UINT8x4 | 32位元素,包含4个8位无符号整形。此数据类型仅支持张量格式 |
数据类型:cudnnConvolutionFwdAlgo_t
cudnnConvolutionFwdAlgo_t 是一个枚举型,是一种枚举类型,表示可用于执行前向卷积运算的不同算法。都是用于执行卷积,可以根据卷积数据的实际情况选择合适的类型。
卷积的计算经常需要一个工作区,即workspace,来存储输入、输出、索引、中间量等数据。
值 | 说明 |
---|---|
CUDNN_CONVOLUTION_FWD_ALGO_IMPLICIT_GEMM | 该算法将卷积表示为矩阵积,而并不实际显式地构造一个保存输入张量数据的矩阵。 |
CUDNN_CONVOLUTION_FWD_ALGO_IMPLICIT_PRECOMP_GEMM | 该算法将卷积表示为矩阵积,而并不实际显式地构造保存输入张量数据的矩阵,但仍需要一些内存工作空间来预先计算索引,以便隐式构造保存输入张量数据的矩阵。 |
CUDNN_CONVOLUTION_FWD_ALGO_GEMM | 该算法将卷积表示为显式矩阵积。需要一个内存工作区来存储保存输入张量数据的矩阵。 |
CUDNN_CONVOLUTION_FWD_ALGO_DIRECT | 该算法将卷积表示为直接卷积(例如,它并不隐式或显式执行矩阵乘法)。 |
CUDNN_CONVOLUTION_FWD_ALGO_FFT | 该算法使用快速傅里叶变换方法计算卷积。需要一个重要的内存工作区来存储中间结果。 |
CUDNN_CONVOLUTION_FWD_ALGO_FFT_TILING | 该算法使用快速傅里叶变换方法,但将输入分割成块。存储中间结果需要一个重要的内存工作空间,但对于大尺寸图像,该工作空间小于CUDNN_CONVOLUTION_FWD_ALGO_FFT |
CUDNN_CONVOLUTION_FWD_ALGO_WINOGRAD | 该算法使用Winograd变换方法来计算卷积。需要一个大小合理的工作空间来存储中间结果。 |
CUDNN_CONVOLUTION_FWD_ALGO_WINOGRAD_NONFUSED | 该算法使用Winograd变换方法来计算卷积。可能需要一个较大的专门的工作空间来存储中间结果。 |
API函数:cudnnGetConvolutionForwardWorkspaceSize()
此函数返回用户需要分配的GPU内存工作空间的尺寸,以便能够使用指定的算法调用cudnnColutionForward()。
cudnnStatus_t cudnnGetConvolutionForwardWorkspaceSize(
cudnnHandle_t handle,//输入量:前期创建的cuDNN句柄
const