一个编写最快,运行很慢的 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];
    }
}
相关推荐
云析赢指标公式网411 小时前
文华WH6布林轨道均线强弱共振指标公式
前端·算法
luj_176812 小时前
一线一区一变破解人盯人防守密码
开发语言·网络·c++·经验分享·算法
Wang's Blog12 小时前
Java框架快速入门: Spring Security+OAuth2之字段验证与自定义验证注解实战
java·算法·spring
带多刺的玫瑰12 小时前
Leecode#29刷题之两数相除
java·python·算法
smj2302_7968265212 小时前
解决leetcode第4017题数组中的峰值II
python·算法·leetcode
午彦琳12 小时前
2026.9.9
数据结构·算法·leetcode
luj_176812 小时前
中锋卡位与开放线博弈
c语言·开发语言·网络·经验分享·算法
洋不写bug12 小时前
二叉树(四)经典算法题目解析,公共祖先,二叉树构造,非递归遍历
数据库·算法·二叉树·二叉树构造·公共祖先
hansang_IR13 小时前
【题解】P4454 [CQOI2018] 破解D-H协议
c++·算法·密码学·数论
梓䈑13 小时前
【动态规划系列】路径问题、子数组 和 子序列问题、背包问题
c++·算法·动态规划