首页 > 编程语言 >CUTLASS: Fast Linear Algebra in CUDA C++

CUTLASS: Fast Linear Algebra in CUDA C++

时间:2024-03-26 13:56:19浏览次数:35  
标签:CUTLASS 读取 Algebra int cache ++ 计算 row Linear

https://developer.nvidia.com/blog/cutlass-linear-algebra-cuda/

Efficient Matrix Multiplication on GPUs

计算密集度 = (时间复杂度/空间复杂度) = O(N^3)/O(N^2) = O(N)

// naive
for (int i = 0; i < M; ++i)
    for (int j = 0; j < N; ++j)
       for (int k = 0; k < K; ++k) 
            C[i][j] += A[i][k] * B[k][j];

image
对于A的每一行,都会读取一整个B矩阵. 能否达到O(N)的复用次数?B中的元素按照列来访问,那么每次重新读取B[0,0]时是重新进行访存的。而实际上,读取一次B[0,0]只进行了1次计算。


// opt 1
for (int k = 0; k < K; ++k)     // K dimension now outer-most loop
    for (int i = 0; i < M; ++i)
        for (int j = 0; j < N; ++j)
            C[i][j] += A[i][k] * B[k][j];

image
对于A[0,0],只读取一次,但执行j=0~N-1,共N次计算。
对于B[0,0],读取i=0~M-1,j=0, 共M次,执行这M次计算,并且这里可能会cache住,所以实际读取次数可能小于M。
对于C[0,0],读取k=0~K-1,共K次。执行K次(k=0~K-1, i=0,j=0)计算。
理论上已经比naive更接近于计算密集度O(N)

但这个计算依赖于每一次写入C中的元素时,这个元素的读取,写入速度能和乘法指令一样快,也就是说这些C中的元素最好能一直在cache中,而不发生trash。否则,这个计算过程就会使依赖于访存。

// opt 2
for (int m = 0; m < M; m += Mtile)                // iterate over M dimension
    for (int n = 0; n < N; n += Ntile)            // iterate over N dimension
        for (int k = 0; k < K; ++k)
            for (int i = 0; i < Mtile; ++i)       // compute one tile 
                for (int j = 0; j < Ntile; ++j) {
                    int row = m + i;
                    int col = n + j;
                    C[row][col] += A[row][k] * B[k][col];
                }

这样,在tile够小的时候,tile中元素就能放到cache中。

标签:CUTLASS,读取,Algebra,int,cache,++,计算,row,Linear
From: https://www.cnblogs.com/ijpq/p/18096507

相关文章

  • Lecture 02 Review of Linear Algebra
    Lecture02ReviewofLinearAlgebra图形学的依赖基础数学线性代数微积分统计学基础物理光学力学杂项信号处理数值分析一点美学向量(数学上称为向量,物理上称为矢量)\(\vec{AB}\)=B-A向量表示方向和长度向量的大小\(\Vert\vec{a}\rVert\)单位向量\(\wi......
  • Linear-Time Graph Neural Networks for Scalable Recommendations
    目录概符号说明MotivationLTGNN代码ZhangJ.,XueR.,FanW.,XuX.,LiQ.,PeiJ.andLiuX.Linear-timegraphneuralnetworksforscalablerecommendations.WWW,2024.概在大图上的一种高效的训练方式.符号说明\(\mathcal{V}\),nodeset;\(\mathcal{E}\),edg......
  • SciTech-Mathmatics-LinearAlgebra-特征值和特征向量
    1基本定义将\(n\)阶方阵\(M\)分解出如下式的非零n维向量\(v\)作为特征向量和\(\lambda\)作为特征向量;$\largeMv=\lambdav,\v\neq0$上式不仅可以分解出,甚至还可以分解出多个特征向量与特征值;实例:对物体施加作用力F产生运动,运动可以分解到3D空间......
  • android FrameLayout、LinearLayout和RelativeLayout的学习
    一、FrameLayout目的:FrameLayout是一个设计用来存放单个子项的简单容器。它通常被用来堆叠视图,即将多个元素重叠在一起。布局:子视图堆叠在一起,默认情况下都是放置在左上角,但可以通过android:layout_gravity属性改变子视图的位置。性能:由于FrameLayout结构简单,所以相对来说比较......
  • linear-gradient实现纯色的背景
    参考:https://developer.mozilla.org/zh-CN/docs/Web/CSS/gradient/linear-gradient用渐变实现纯色的背景红色: 用如下的两种方式:1、background-image:linear-gradient(toright,red00).解释:官方的解释。第一个0,就是从位置0%,此处0(0%或者0px简写)开始,也可以是其它数字,譬如:1......
  • ue4.26 CurveLinearColorAtlas支持非正方形尺寸
    默认CurveAtlas只能是正方形 改代码可以让它支持非正方形: 改法如下:CurveLinearColorAtlas.h//CopyrightEpicGames,Inc.AllRightsReserved.#pragmaonce#include"CoreMinimal.h"#include"UObject/ObjectMacros.h"#include"UObject/Object.h"#in......
  • 无涯教程-MATLAB - 代数(Algebra)
    到目前为止,我们已经看到所有示例都可以在MATLAB及其GNU(也称为Octave)中运行,但是对于求解基本的代数方程,MATLAB和Octave几乎没有什么不同,因此我们将尝试在单独的部分中介绍MATLAB和Octave。我们还将讨论代数表达式的分解和简化。MATLAB中代数方程solve函数用于求解代数方程,......
  • SciTech-Math-AdvancedAlgebra-Dot Product + Linear Equations And Inverse Matrices
    LinearEquationsAndInverseMatrices:https://math.mit.edu/~gs/dela/dela_4-1.pdfDotProduct:Theotherimportantoperationonvectorsisakindofmultiplication.Thisisnotordinarymultiplicationandwedon'twritevw.Theoutputfromvandwwi......
  • SciTech-Math-AdvancedAlgebra-Linear Spaces(Vector Spaces) and Subspace: The Colu
    https://math.mit.edu/~gs/dela/dela_5-1.pdfhttps://people.math.harvard.edu/~knill/teaching/math22b2019/handouts/lecture01.pdfhttps://web.stanford.edu/group/dabmgroup/cgi-bin/dabm/wp-content/uploads/2021/12/Lecture_14.pdfN-elementorderedNumberSequence......
  • 矩阵乘法 - CF678D Iterated Linear Function
    CF678DIteratedLinearFunction题意\(f_{i,x}=A\timesf_{i-1,x}+B\)且\(f_{0,x}=x\)求\(f_{n,x}\)。思路这道题的递推关系十分清晰。但由于数据范围大(\(1\leA,B,x\le10^9,1\len\le10^{18}\)),所以这道题只能使用矩阵乘法加速递推。矩阵的构造我们需要构造一个......