4.1 GEMM算子 首先实现GEMM算子,其中(M, N, K)=(4096, 4096, 4096)实现部分的代码如图4.1所示。这是一个标准的矩阵乘法操作,计算每个 C[i][j],用 A[i][k] 和 B[k][j] 进行求和,方法与2.1中的naïve gemm一致。 图4.1 GEMM算子实现 4.2 Add bias算子 Bias add算子需要实现的功能是:C[i,j]...
GEMM(General Matrix Multiplication,通用矩阵乘法)是并行计算中经典的计算密集型应用,也是入门计算密集型 CUDA 程序优化非常好的例子,本文从 CUDA GEMM 实现方案的理论性能分析和 kernel 代码优化技巧两个方…
写了一个最简单的加法Kernel。虽然简单,但是有助于了解CUDA编码的一个大框架是怎么样的。 无论什么程序,都有一个固定的流程,就是写内存、计算、读内存,CUDA编程也是这样。 在这个加法器设计中: 首先需要在GPU上指定一块显存空间。 然后将输入拷贝到这个空间中。 CPU调用加法kernel,GPU执行这个kernel函数完成计算,...
三、GEMM优化:矩阵分块,从global memory到SMEM 我们知道on-chip内存的带宽要比off-chip内存的带宽大得多。所以如果我把矩阵A和B都搬运到on-chip的SMEM上,然后采用和naive GEMM一样的计算方法,那么尽管还是会在SMEM上发生重复读数据的情况(也即总的读写次数和naive一样,只不过现在不是从global memory读取,是从S...
Triton SplitK GEMMAMD Triton Flash Attention CUDA 内核配置使用了 cuBLAS GEMMcuDNN Flash Attention - Scaled Dot-Product Attention (SDPA)在典型推理设置下,两种 eager 和 torch 编译模式的吞吐量和 inter-token 延迟如下图所示。图 7:H100 和 A100 上 Granite-8B 和 Llama3-8B 单 token 生成延迟(批...
通用矩阵乘法 (General Matrix Multiplication,GEMM) 是各种模型和计算中的核心部分,同时也是评估计算硬件性能 (FLOPS) 的标准技术。本文将通过对 GEMM 的实现和优化,来试图理解高性能计算和软硬件系统。 一、GEMM的基本特征 1.1 GEMM计算过程及复杂度
通用矩阵乘法 (General Matrix Multiplication,GEMM) 是各种模型和计算中的核心部分,同时也是评估计算硬件性能 (FLOPS) 的标准技术。本文将通过对 GEMM 的实现和优化,来试图理解高性能计算和软硬件系统。 一、GEMM的基本特征 1.1 GEMM计算过程及复杂度
Triton SplitK GEMM 内核 对于线性层中的矩阵乘法,PyTorch 团队编写了一个自定义 FP16 Triton GEMM(通用矩阵 - 矩阵乘法)内核,该内核利用了 SplitK 工作分解。 GEMM 内核调优 为了实现最佳性能,PyTorch 团队使用穷举搜索方法来调整 SplitK GEMM 内核。Granite-8B 和 Llama3-8B 具有如下形状的线性层: ...
对于线性层中的矩阵乘法,编写一个自定义的 FP16 Triton GEMM (General Matrix-Matrix Multiply)内核,执行通用的矩阵-矩阵乘法,其中利用了SplitK进行工作分解。 为了实现最佳性能,还使用了穷举搜索来调整SplitK GEMM内核。 因为每个线性层的权重矩阵都有不同的形状,如果要获得最佳性能...