flâneur — a map of the web's best reading

wangzyon/NVIDIA_SGEMM_PRACTICE: Step-by-step optimization of CUDA SGEMM

github.com · 1,577 words · saved by 1 readers

Couldn't load subscription status.  Retry There was an error while loading. Please reload this page. There was an error while loading. Please reload this page. Step-by-step optimization of CUDA SGEMM There was an error while loading. Please reload this page. 面向NVIDIA GPU,使用CUDA编程逐步优化矩阵乘法运算性能: NVIDIA GeForce RTX 3090,矩阵尺寸5120 在CMakeLists.txt中修改set(CUDA_NVCC_FLAGS -arch=compute_70;-code=compute_70) 在sgemm.cu:16中修改size_len,建议初次运行设置为16,过大尺寸可能导致电源超负荷主机重启; python plot.py 0 1表示绘制CUBLAS和kernel_1计算效率对比图; Naive基础版矩阵乘法实现 将每个逻辑线程与矩阵C的每一个元素相对应,每个线程负责C中一个元素的计算; 未经过优化的矩阵乘法性能不足CUBLAS的1/10,具体分析如下; 全局内存访问延迟高(几百cycle),同时相同位置元素被重复读取(C中同一行元素计算共享A中同一行元素,C中同一列元素计算共享B中同一列元素),另一方面,较低的计算访存比无法有效隐藏访存延迟,因此,访存延迟和计算访存比是导致kernel 1效率低下的原因。 利用共享内存缓存减少全局内存访存量和访存延迟 访存延迟来自于全局内存的高延迟和全局内存的重复访问。共享内存是片上内存,具有较低的访存延迟(几十cycle),使用共享内存进行缓存可降低访存延迟; BM和BN表示block tile的高和宽,BK表示待缓存的全局内存的步长,即一个block的计算需要缓存K/BK次; 共享内存缓存全局内存A tile和B tile,完成C block中所有元素的FMA计算,不断滑动缓存区域,更新block; kernel 1受限于全局内存的访存延迟和重复访问,优化前全局访存量为

Explore this link on the map →

saved by

related reading