CUDA编程-通用算子的CUDA并行优化

继续啃

参考资料:https://github.com/DefTruth/CUDA-Learn-Notes 自己的一些相关实现:https://github.com/bear-zd/CuCal

目前为止实现了一些简单的算子操作。

首先是gpu_puzzles,这个适合入门理解(前提是对CUDA有一定的理解了)

接着就是从element-wise操作到复杂的一个过程。

  • 1_add是逐点的求和
  • 2_reduce是规约求和,如果不了解线程、线程束、同步机制会复杂一点。而且后续也会频繁用到
  • 3_rgb2gray逐点转rgb到灰度,这时候还是遇不到需要读写共享内存的问题的
  • 4_histogram直方图统计,这个学习一下atomicadd操作
  • 5_common_activation常见激活函数,绝大多数都是逐点操作的,所以不复杂,学习一下宏
  • 6_yareduce yet another reduce,简短但是非常厉害的reduce操作,基于洗牌操作
  • 7_dot_product 点积操作,算是reduce+乘法稍微结合一下
  • 8_softmax softmax函数实现,逐点操作倒是不复杂
  • 9_more_softmax safe softmax, online softmax的实现,整体来说上了难度了,需要兼顾读写和优化。
  • 10_layernrom 不复杂,有点像是点积操作
  • 11_RMS_norm root Mean Square layernorm,算是对layernorm层的一个升级,验证可知是均值为0的情况但是计算难度下降且速度上升。
  • 12_mat_transpose 矩阵转置,在第一个较难的地方的前置,实现二维线程束、线程块的索引组织
  • 13_gemm_part1 矩阵乘法,有了前面的积累,尝试实现naive、基于shared memory和tile+float4的矩阵乘法,难度上升了一个大档次。整体参考这个图来:
    image-20241005202459402
    image-20241005202459402
  • [not done] 14_gemm_part2 矩阵乘法继续升级,前面只是对矩阵乘法进行组织,可以基于bank conflict和buffer实现进一步的优化。
  • [further more]…
  • [more ops]
  • [llm ops]
  • [sass]
Licensed under CC BY-NC-SA 4.0