cuda 矩阵乘法

转载 2013年12月04日 16:33:15

原始矩阵乘法

#include <stdio.h>
#include <cuda.h>
#define BLOCK_SIZE  1
typedef struct{
int width;
int height;
float* elements;
}Matrix;
__global__ void MatMulKernel(const Matrix,const Matrix,Matrix);
void MatMul(const Matrix A,const Matrix B,Matrix C)
{
Matrix d_A;
d_A.width=A.width;d_A.height=A.height;
size_t size=A.width*A.height*sizeof(float);
cudaMalloc((void**)&d_A.elements,size);
cudaMemcpy(d_A.elements,A.elements,size,
cudaMemcpyHostToDevice);
Matrix d_B;
d_B.width=B.width;d_B.height=B.height;
size=B.width*B.height*sizeof(float);
cudaMalloc((void**)&d_B.elements,size);
cudaMemcpy(d_B.elements,B.elements,size,
cudaMemcpyHostToDevice);
//AllocateCindevicememory
Matrix d_C;
d_C.width=C.width;d_C.height=C.height;
size=C.width*C.height*sizeof(float);
cudaMalloc((void**)&d_C.elements,size);
//Invokekernel
dim3 dimBlock(BLOCK_SIZE,BLOCK_SIZE);
dim3 dimGrid(B.width/dimBlock.x,A.height/dimBlock.y);
MatMulKernel<<<dimGrid,dimBlock>>>(d_A,d_B,d_C);
//ReadCfromdevicememory
cudaMemcpy(C.elements,d_C.elements,size,cudaMemcpyDeviceToHost);
//Freedevicememory
cudaFree(d_A.elements);
cudaFree(d_B.elements);
cudaFree(d_C.elements);
}
//MatrixmultiplicationkernelcalledbyMatMul()
__global__ void MatMulKernel(Matrix A,Matrix B,Matrix C){
//EachthreadcomputesoneelementofC
//byaccumulatingresultsintoCvalue
float Cvalue=0;
int row=blockIdx.y*blockDim.y+threadIdx.y;
int col=blockIdx.x*blockDim.x+threadIdx.x;
for(int e=0;e<A.width;++e)
Cvalue+=A.elements[row*A.width+e]
*B.elements[e*B.width+col];
C.elements[row*C.width+col]=Cvalue;
}


优化算法

CUDA编程(一)第一个CUDA程序

CUDA(Compute Unified Device Architecture),是显卡厂商NVIDIA推出的运算平台。 CUDA™是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决...
  • sunmc1204953974
  • sunmc1204953974
  • 2016年03月28日 22:52
  • 14084

CUDA卷积操作—使用constant memory实现高斯滤波

高斯滤波就是使用高斯模板和图片进行卷积运算,高斯函数及模板如下图所示: 卷积前后的效果图如下: GPU代码如下所示: #include "cuda_runtime.h" #include ...
  • i_chaoren
  • i_chaoren
  • 2017年04月24日 22:00
  • 1562

CUDA从入门到精通

CUDA从入门到精通(零):写在前面 在老板的要求下,本博主从2012年上高性能计算课程开始接触CUDA编程,随后将该技术应用到了实际项目中,使处理程序加速超过1K,可见基于图形显示器的并行计算对于追...
  • Augusdi
  • Augusdi
  • 2013年10月17日 11:22
  • 132863

CUDA用于图像处理中的形态学开闭运算

#include #include #include #include #include #include #include #include "cuda_runtime.h" #inc...
  • moses1213
  • moses1213
  • 2015年08月31日 10:20
  • 1368

CUDA Samples学习一(基础准备)

我的电脑环境: 1、VS2013 2、显卡NVIDIA GTX 750Ti 3、window7系统 首先安装显卡驱动去NVIDIA官网,路径是默认路径。 下面有两个需要找到的文件夹,一个是cuda学习...
  • langb2014
  • langb2014
  • 2016年09月01日 20:36
  • 4457

CUDA 深入浅出谈

CUDA 深入浅出谈          “CUDA 是 NVIDIA 的 GPGPU 模型,它使用 C 语言为基础,可以直接以大多数人熟悉的 C 语言,写出在显示芯片上执行的程序,而不需要去学习特定的...
  • Augusdi
  • Augusdi
  • 2013年09月30日 23:12
  • 6103

CUDA 存储器模型

问题:CUDA中每个线程可分配的变量个数是否有限,与哪些东西有关? CUDA 的存储器结构CUDA 的存储器结构如下所示:大概可以分成下面几类:寄存器(register)寄存器(register)是G...
  • llcchh012
  • llcchh012
  • 2015年03月22日 16:50
  • 1433

利用cuda加速MATLAB程序

利用cuda加速MATLAB程序利用cuda加速MATLAB程序 1参考木子超的办法 2参考Tomheaven的方法 3引用   最近因为要做张量的模态积,所以要考虑使用cuda来进行并行的编程,但是...
  • k531623594
  • k531623594
  • 2016年03月18日 14:19
  • 5057

CUDA从入门到精通(七):流并行

前面我们没有讲程序的结构,我想有些童鞋可能迫不及待想知道CUDA程序到底是怎么一个执行过程。好的,这一节在介绍流之前,先把CUDA程序结构简要说一下。 CUDA程序文件后缀为.cu,有些编译器可能不...
  • kkk584520
  • kkk584520
  • 2013年07月24日 14:05
  • 7062

【CUDA开发】CUDA编程接口(一)------一十八般武器

子曰:工欲善其事,必先利其器。我们要把显卡作为通用并行处理器来做并行算法处理,就得知道CUDA给我提供了什么样的接口,就得了解CUDA作为通用高性能计算平台上的一十八般武器。(如果你想自己开发驱动,自...
  • LG1259156776
  • LG1259156776
  • 2017年01月26日 23:20
  • 713
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:cuda 矩阵乘法
举报原因:
原因补充:

(最多只允许输入30个字)