cuDNN目前提供以下幾種卷積算法的實現(xiàn)方式[1]
CUDNN_CONVOLUTION_FWD_ALGO_IMPLICIT_GEMM
該實現(xiàn)方式將卷積隱式轉(zhuǎn)換成矩陣乘法,完成計算。不需要顯式將輸入張量數(shù)據(jù)轉(zhuǎn)換成矩陣形式保存。
CUDNN_CONVOLUTION_FWD_ALGO_IMPLICIT_PRECOMP_GEMM
該實現(xiàn)方式將卷積隱式轉(zhuǎn)換成矩陣乘法,完成計算。但是需要一些額外的內(nèi)存空間去保存預計算得到的索引值,以便隱式地將輸入張量數(shù)據(jù)轉(zhuǎn)換成矩陣形式。
CUDNN_CONVOLUTION_FWD_ALGO_GEMM
該實現(xiàn)方式將卷積顯式轉(zhuǎn)換成矩陣乘法,完成計算。在顯式完成矩陣乘法過程中,需要額外申請內(nèi)存空間,將輸入轉(zhuǎn)換成矩陣形式。
CUDNN_CONVOLUTION_FWD_ALGO_DIRECT
該實現(xiàn)方式即直接完成卷積計算,不會隱式或顯式的將卷積轉(zhuǎn)換成矩陣乘法。
CUDNN_CONVOLUTION_FWD_ALGO_FFT
該實現(xiàn)方式利用快速傅里葉變換完成卷積計算。需要額外申請內(nèi)存空間,保存中間結(jié)果。
CUDNN_CONVOLUTION_FWD_ALGO_FFT_TILING
該實現(xiàn)方式利用快速傅里葉變換完成卷積計算,但是需要對輸入進行分塊。同樣需要額外申請內(nèi)存空間,保存中間結(jié)果,但是對大尺寸的輸入,所需內(nèi)存空間小于CUDNN_CONVOLUTION_FWD_ALGO_FFT算法
CUDNN_CONVOLUTION_FWD_ALGO_WINOGRAD
該實現(xiàn)方式利用Winograd變換完成卷積計算。需要額外申請內(nèi)存空間,保存中間結(jié)果。
CUDNN_CONVOLUTION_FWD_ALGO_WINOGRAD_NONFUSED
該實現(xiàn)方式利用Winograd變換完成卷積計算。需要額外申請內(nèi)存空間,保存中間結(jié)果。
-
cudnnConvolutionFwdAlgo_t https://docs.nvidia.com/deeplearning/cudnn/api/index.html#cudnnConvolutionFwdAlgo_t ?