cuda加速:memory coalescing
- 1.memory coalescing
- 2.Shared Memory Bank Conflicts
- 参考文献
1.memory coalescing
参考【1】中给出的定义:一个warp中,thread 0到thread 31访问连续的内存空间,则这些线程的访问被合并为一次访问。
2.Shared Memory Bank Conflicts
实际的共享内存由32个bank组成,warp由32个线程组成。这里仅用4个bank(A、B、C、D)以及4个thread来进行说明。
下图两种情况均能保证一个thread访问不同的bank,不会造成bank conflict。
不同的线程访问同一个bank,会导致串行访问,这称之为bank conflict。
- 2-way conflict
- 4-way conflict
- 解决办法:padding
pad操作之后,就可以保证线程访问的是不同的bank,以此来规避bank conflict。
参考文献
[1] Memory Coalescing Techniques
[2] ■■■■ 3-Multidimensional Grids & Shared Memory for CUDA
[3] 2- Custom CUDA Kernels in Python with Numba🔥