cuDNN目前提供以下几种卷积算法的实现方式[1]
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变换完成卷积计算。需要额外申请内存空间,保存中间结果。
-
cudnnConvolutionFwdAlgo_t https://docs.nvidia.com/deeplearning/cudnn/api/index.html#cudnnConvolutionFwdAlgo_t ↩