首页
题库
面试
求职
学习
竞赛
More+
所有博客
搜索面经/职位/试题/公司
搜索
我要招人
去企业版
登录 / 注册
首页
>
试题广场
>
请完成矩阵乘法的cuda实现,并进行优化。 答题说明:
[问答题]
请完成矩阵乘法的
cuda
实现,并进行优化。
答题说明:该题为手动判卷,答案只要写对即可,不用严格满足字符比对。
添加笔记
求解答(0)
邀请回答
收藏(5)
分享
纠错
1个回答
添加回答
0
打个酱油
//GEMM
https://devblogs.nvidia.com/cutlass-linear-algebra-cuda/
__global__ void shMatMul_Kernel(int matrixSize, float* matrixA, float* matrixB, float* matrixC,int TILE_WIDTH)
{
extern __shared__ float sh_Mem[];
float* sh_MatrixA = &(sh_Mem[0]);
float* sh_MatrixB = &(sh_Mem[TILE_WIDTH*TILE_WIDTH]);
int tx = threadIdx.x;
int ty = threadIdx.y;
int Col = blockIdx.x * TILE_WIDTH + tx;
int Row = blockIdx.y * TILE_WIDTH + ty;
int elementId = Row * matrixSize + Col;
float Pvalue = 0;
for (int m = 0; m < (matrixSize-1) / TILE_WIDTH + 1; m++)
{
sh_MatrixA[ty*TILE_WIDTH + tx] = Row < matrixSize && m*TILE_WIDTH + tx < matrixSize ? matrixA[Row*matrixSize + (m*TILE_WIDTH + tx)] : 0;
sh_MatrixB[ty*TILE_WIDTH + tx] = Col < matrixSize && m*TILE_WIDTH + ty < matrixSize ? matrixB[(m*TILE_WIDTH + ty)*matrixSize + Col] : 0;
__syncthreads();
for (int k = 0; k < TILE_WIDTH; k++)
{
Pvalue += sh_MatrixA[ty*TILE_WIDTH + k] * sh_MatrixB[k*TILE_WIDTH + tx];
}
__syncthreads();
}
if (Row < matrixSize && Col < matrixSize)
{
matrixC[elementId] = Pvalue;
}
return;
}
发表于 2019-12-27 02:51:02
回复(0)
这道题你会答吗?花几分钟告诉大家答案吧!
提交观点
问题信息
商汤科技
运维工程师
算法工程师
2018
上传者:
小小
难度:
1条回答
5收藏
1255浏览
热门推荐
相关试题
若用冒泡排序对关键字序列{10,8...
Java工程师
C++工程师
iOS工程师
安卓工程师
运维工程师
前端工程师
算法工程师
测试工程师
安全工程师
2018
奇安信
评论
(1)
设一组初始记录关键字序列为(30,...
Java工程师
C++工程师
iOS工程师
安卓工程师
运维工程师
前端工程师
算法工程师
测试工程师
安全工程师
2018
奇安信
评论
(1)
下面描述中,符合结构化程序设计风格...
搜狐
Java工程师
C++工程师
iOS工程师
安卓工程师
运维工程师
前端工程师
算法工程师
PHP工程师
2018
评论
(1)
《拳皇97》最后BOSS是谁?
游戏常识
评论
(1)
《魔兽世界》中,下列不属于玩家可以...
游戏常识
评论
(1)
扫描二维码,关注牛客网
意见反馈
下载牛客APP,随时随地刷题