直观上来看,矩阵转置和卷积等操作不同,不存在数据共享(卷积窗口在输入数据上滑动的时候,相邻数据存在共享),因为仅仅是将数据换个位置存储而已。
但是NVIDIA在https://github.com/NVIDIA-developer-blog/code-samples.git实现了一种基于共享内存的转置算法,在某些场景实现了两倍以上的加速,示意如下图(从做到右依次是:输入,共享内存,输出):
其原理是,GPU访问连续连续的显存的时候,速度很快。而跨越式(stride)的方式访问,速度则很慢。如果没有中间的共享内存,输出或者输入,必有一方是跨越式访问的。