第三章CUDA C的简介及第四章CUDA C并行编程(第一天)

嘈杂文章 勿扰

根据大佬们的教程终于完成了GPU环境的搭建,一开始是我考虑复杂了,在没人指点的情况下,各种博客天花乱坠。结果好像只需要下载cuda和cudnn两个软件。环境搭建算是到一段落,有问题再解决。

认真读了GPU高性能编程CUDA实战 2~5.2章节,作以下总结:

一、第一个代码抄书,了解本机gpu型号性能情况

   具体代码忘了 

二、第三章学习核函数的调用、在GPU上分配线程、GPU和CPU参数传递

      1.cudaMalloc()分配的指针 

int* dev;
cudaMalloc((void**)&dev,sizeof(?));

指针dev可以传递给设备上执行的函数,进行内存读写操作;

指针dev可以传递给主机上执行的函数,不能进行内存读写操作。

     2.在GPU上调用核函数

__global__ void add(int a,int b ,int* c)
{
     *c=a+b;
}


add<<<N,M>>>(a,b,c);

     3.实现CPU-GPU的参数传递

cudaMemcpy(dev_a, a, N*sizeof(int), cudaMemcpyHostToDevice); 将a从主机传递给设备,dev_a接收

cudaMemcpy(c, dev_c, N*sizeof(int), cudaMemcpyDeviceToHost); 将dev_c从设备传递到主机,c接收

三、第四章,矢量求和运算

<<<1,N>>>   数据索引方法,对线程进行索引  int tid = threadIdx.x

 <<<N,1>>>  数据索引方式,对线程块进行索引 int tid = blockIdx.x

 <<<N,M>>> 数据索引方法,对线程块和线程结合 int tid = threadIdx.x + blockIdx.x * blockDim.x     其中blockDim算是一个常数,线程块每一维的线程数量(P46)

其中N为线程格中线程块的数量,M为线程块中线程的数量

N,M矢量求和运算中核函数进行了修改,while()循环,每个线程的初始索引值不同(int tid = threadIdx.x + blockIdx.x * blockDim.x   ) ,每次递增的数量为 blockDim.x * gridDim.x 即M*N,每个线程可以完成属于自己的任务,互不干扰。

最后,这本书自带的辅助函数我不知道怎么添加,书中给的图形例子无法实现,甚是遗憾

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值