一个编写最快,运行很慢的 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];
    }
}
相关推荐
纪元A梦10 小时前
贪心算法应用:配送路径优化问题详解
算法·贪心算法
C_player_00111 小时前
——贪心算法——
c++·算法·贪心算法
kyle~12 小时前
排序---插入排序(Insertion Sort)
c语言·数据结构·c++·算法·排序算法
Boop_wu12 小时前
[数据结构] 队列 (Queue)
java·jvm·算法
hn小菜鸡13 小时前
LeetCode 3643.垂直翻转子矩阵
算法·leetcode·矩阵
ゞ 正在缓冲99%…13 小时前
leetcode101.对称二叉树
算法
YuTaoShao14 小时前
【LeetCode 每日一题】3000. 对角线最长的矩形的面积
算法·leetcode·职场和发展
2zcode14 小时前
基于Matlab可见光通信系统中OOK调制的误码率性能建模与分析
算法·matlab·php
纵有疾風起14 小时前
数据结构中的排序秘籍:从基础到进阶的全面解析
c语言·数据结构·算法·排序算法
纪元A梦14 小时前
贪心算法应用:推荐冷启动问题详解
算法·贪心算法