卷积逻辑上只有一种理解,但硬件实现为了加速和节约空间有各种不同的实现。cudnn上有8种实现,我用的cudnn7,CUDNN_CONVOLUTION_FWD_ALGO_DIRECT在cudnn上没有实现。
在输入为[1,200,200,3],卷积核为[3,3,3,3],stride为1,pad为1时,各个运算时间,gpu显存消耗,workspace size 为
0.000003S | 233M | 0M |
---|---|---|
0.0000026S | 233M | 0.228M |
0.0000036S | 233M | 4.1198M |
not supoort in cudnn7 | ||
0.0000073S | 233M | 7.546M |
0.0000471S | 233M | 0.134M |
0.0000066S | 233M | 0.0159M |
0.0000036S | 233M | 32.96M |
可见在nvidia卡上,速度最快的CUDNN_CONVOLUTION_FWD_ALGO_IMPLICIT_PRECOMP_GEMM,而且所需的work space极少。WINOGRAD更适合fpga平台。