一个编写最快,运行很慢的 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];
    }
}
相关推荐
海洲探索-Hydrovo3 小时前
TTP Aether X 天通透传模块丨国产自主可控大数据双向通讯定位模组
网络·人工智能·科技·算法·信息与通信
2401_841495646 小时前
【计算机视觉】基于复杂环境下的车牌识别
人工智能·python·算法·计算机视觉·去噪·车牌识别·字符识别
Jonkin-Ma6 小时前
每日算法(1)之单链表
算法
晚风残6 小时前
【C++ Primer】第六章:函数
开发语言·c++·算法·c++ primer
杨云强6 小时前
离散积分,相同表达式数组和公式
算法
地平线开发者6 小时前
征程 6 | BPU trace 简介与实操
算法·自动驾驶
满天星83035776 小时前
【C++】AVL树的模拟实现
开发语言·c++·算法·stl
Lris-KK7 小时前
力扣Hot100--94.二叉树的中序遍历、144.二叉树的前序遍历、145.二叉树的后序遍历
python·算法·leetcode
麦麦鸡腿堡8 小时前
Java的动态绑定机制(重要)
java·开发语言·算法
zy_destiny8 小时前
【工业场景】用YOLOv8实现抽烟识别
人工智能·python·算法·yolo·机器学习·计算机视觉·目标跟踪