wangzyon/NVIDIA_SGEMM_PRACTICE: Step-by-step optimization of CUDA SGEMM
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受限于全局内存的访存延迟和重复访问,优化前全局访存量为
概述 面向NVIDIA GPU,使用CUDA编程逐步优化矩阵乘法运算性能: 核函数 描述 GFLOPS 自定义核函数/CUBLAS(%) CUBLAS 官方库函数 14448.69 基准 kernel_1 朴素实现 2262.168 15.65657 kernel_2 共享内存缓存 4216.536 29.18283 kernel_3 一维Thread Tile并行优化 7809.629 54.05078 kernel_4 二维Thread Tile并行优化 12251.3 84.79179 kernel_5 寄存器缓存 12177.95 84.28412 kernel_6 FLOAT4向量访存 13161.49 91.09125 kernel_7 双缓存预取 13634.98 94.36832 NVIDIA GeForce RTX 3090,矩阵尺寸5120 配置 编译采用 gcc 7.5.0 under Ubuntu 18.04.5 LTS NVIDIA CUDA version: CUDA 10.2; 目录 NVIDIA_SGEMM_PRACTICE # 根目录 ├── images # 图片结果 │ ├── describe_kernel_1.png │ ├── describe_kernel_x.png │ └──…
saved by
related reading
- Reverse-Engineering cuBLASaccu.org
- How to Optimize a CUDA Matmul Kernel for cuBLAS-like Performance: a Worklogsiboehm.com
- CUTLASS: Fast Linear Algebra in CUDA C++ | NVIDIA Technical Blogdeveloper.nvidia.com
- Outperforming cuBLAS on H100: a Worklogcudaforfun.substack.com
- GPU Performance Background User's Guide - NVIDIA Docsdocs.nvidia.com
- Inside NVIDIA GPUs: Anatomy of high performance matmul kernels - Aleksa Gordićaleksagordic.com
- Worklog: Optimising GEMM on NVIDIA H100 for cuBLAS-like Performance (WIP) – Hamza's Bloghamzaelshafie.bearblog.dev
- Mini Project: GPU Accelerated Matrix Multiplication (almost) like cuBLAS0mean1sigma.com
- Learning CUDA by optimizing matrix-vector multiplication (SGEMV) for cuBLAS-like performance - A worklog – Maharshi's blogmaharshi.bearblog.dev
- Matrix Multiplication CUDA - ECA - GPU 2018-2019ecatue.gitlab.io
- Outperforming cuBLAS on H100: a Worklogcudaforfun.substack.com
- GitHub - adam-maj/tiny-gpu: A minimal GPU design in Verilog to learn how GPUs work from the ground up · GitHubgithub.com