1.[深入分析CUTLASS系列] 0x02 cutlass 源码分析(一) --- block swizzle 和 tile iterator (附tvm等价code)
[深入分析CUTLASS系列] 0x02 cutlass 源码分析(一) --- block swizzle 和 tile iterator (附tvm等价code)
深入探讨CUTLASS系列之block swizzle和tile iterator
本文聚焦于block swizzle和tile iterator在CUTLASS中的资金资金作用。
block swizzle通过一定的存量存量查步长进行换行操作,其核心逻辑为取余操作。源码源码关注的资金资金关键文件包括cutlass/gemm/threadblock/threadblock_swizzle.h和cutlass/gemm/kernel/gemm.h。在GPU中,存量存量查java中shellfolder源码block的源码源码电脑设置密码源码发射顺序为x->y->z,通过位运算实现取余操作,资金资金相比直接取余,存量存量查位运算在开销上更小。源码源码
block swizzle的资金资金逻辑分析展示了其在计算过程中的作用,以一个 x x的存量存量查矩阵乘法为例,不进行block swizzle时,源码源码线程块按照n和m轴发射,资金资金docker源码分析 二导致在读取右矩阵的存量存量查global位置时存在差异,从而影响访存量。源码源码进行block swizzle后,单个tile的图灵易语言源码访存量变小,减少cache miss,提高性能。
tvm等价代码示例展示了block swizzle的实现方式,简洁明了。post 测试 php源码
tile iterator解决的问题在于提供左右矩阵的load/store方法。以conv2d的iterator为例,分析了如何在focus于某一分块时确定每个线程需要被load的位置。重点关注的文件包括cutlass/conv/threadblock/conv2d_fprop_activation_tile_access_iterator_analytic.h、cutlass/conv/threadblock/conv2d_fprop_activation_tile_access_iterator_optimized.h和cutlass/conv/threadblock/conv2d_tile_iterator.h。分析了shared memory的load过程,以及在不同iterator中的优化方法。
tile iterator的逻辑分析详细介绍了shared memory的load过程,包括warp的划分、最大访存指令的限制和kStride参数。进一步讨论了analytic和optimized iterator的实现差异,以及如何通过位运算减少scalar操作,提高性能。
本文总结了block swizzle和tile iterator在CUTLASS中的作用和优化方法,提供了深入理解的途径。希望对相关领域感兴趣的研究者和开发者有所启发。