一个编写最快,运行很慢的 cuda gemm kernel, 占位 kernel

C = alpha*A*B + beta*C

每个线程负责一个C(i , j) 元素的计算。

1, gemm nn

复制代码
__global__
void dgemm_NN( lint M,
                    lint N,
                    lint K,
                    double* Ad,
                    lint lda,
                    double* Bd,
                    lint ldb,
                    double* Cd,
                    lint ldc,
                    double alpha,
                    double beta )
{
    lint i = blockIdx.x * blockDim.x + threadIdx.x;
    lint j = blockIdx.y * blockDim.y + threadIdx.y;
    double sigma = 0.0;
    for(lint k=0; k<K; k++)
        sigma += Ad[i + k*lda]*Bd[k + j*ldb];

    Cd[i + j*ldc] = alpha*sigma + beta*Cd[i + j*ldc];
}

2, gemm nt

复制代码
__global__
void dgemm_NT( int opA,
                    int opB,
                    lint M,
                    lint N,
                    lint K,
                    double* Ad,
                    lint lda,
                    double* Bd,
                    lint ldb,
                    double* Cd,
                    lint ldc,
                    double alpha,
                    double beta )
{
    lint i = blockIdx.x * blockDim.x + threadIdx.x;
    lint j = blockIdx.y * blockDim.y + threadIdx.y;
    double sigma = 0.0;
    if(i<M && j<N){
        for(lint k=0; k<K; k++)
            sigma += Ad[i + k*lda]*Bd[k*ldb + j];

        Cd[i + j*ldc] = alpha*sigma + beta*Cd[i + j*ldc];
    }
}
相关推荐
贾斯汀玛尔斯2 分钟前
每天学一个算法-- 归并排序(Merge Sort)
数据结构·算法·排序算法
算法鑫探3 分钟前
算法中的二分法(二分查找)详解及示例
c语言·数据结构·算法·新人首发
叶子野格14 分钟前
《C语言学习:编程例题》8
c语言·开发语言·c++·学习·算法·visual studio
澈20716 分钟前
排序算法入门:冒泡、选择、插入排序详解
数据结构·算法·排序算法
smj2302_7968265220 分钟前
解决leetcode第3901题好子序列查询
python·算法·leetcode
_深海凉_22 分钟前
LeetCode热题100-每日温度
算法·leetcode·职场和发展
迷你可可小生24 分钟前
面经学习(二)
学习·算法
John.Lewis25 分钟前
C++加餐课-二叉树:进阶算法
数据结构·c++·算法
郝学胜-神的一滴34 分钟前
ReLU激活函数全解析:从原理到实战,解锁深度学习核心激活单元
人工智能·pytorch·python·深度学习·算法
AGV算法笔记39 分钟前
最新感知算法论文分析:RaCFormer 如何提升雷达相机 3D 目标检测性能?
数码相机·算法·3d·自动驾驶·机器人视觉·3d目标检测·感知算法