gpu并行编程简略笔记

为什么使用gpu?

  从cpu及gpu的硬件结构和功能来看,gpu具有更多的计算结构。在计算任务重的情况下,使用gpu可以加速任务进度。


简单的gpu使用流程。

  1. Allocate device memory.

  2. copying data from host(cpu),

  3. lauching kernel:this implements compute process.

  4. copying data back to host.

  5.free memory.(device and host).

上面几个流程对应的关键api为 

  1. cudaMalloc(start, size); 

  2. cudaMemcpy(dst,src,size,direction); 

  3.调用kernel.cu中的函数;  

  4.同2;

  5.free(host_pointer), cudaFree(device_pointer);

kernel中需要完成的关键的步骤: 

  1. 映射:Calculate global thread index based on the block and thread indices ----

  2. 根据global thread index完成计算。



效率方面: 

  与cpu中一样,gpu的计算性能远远大于读写性能,所以IO是瓶颈。 因为读取global memory花费的时间很长而shared memory较快(实际上在没有冲突和等待时与register速度一致),所以减少global memory的读取是提升性能的一种重要方式。

1. gpu内存模型:这里只大致分为三种 实际上还有constant memory等更多

   1.register. 最快,小

   2.shared memory 较快, 小

   3.global memory.  慢,大

register为线程私有的,每一个执行单元都有自己私有的register(寄存器)。速度最快,应该跟cpu中的寄存器是一样的功能作用,回忆计算机系统结构内容。

shared memory:block私有,block内共享,block内所有线程可读写,较小。但速度快。应当将block内线程会多次读取的数据存储到shared memory当中。

global memory: grid内所有线程可见,大但是慢,是整个系统的瓶颈。


2. 内存分配方式

    在初始化Grid和Block时,不同的问题大小适用不同的Grid大小+Block大小,选取合适的搭配可减少闲置的线程块和control divergence,从而提高效率。

 gpu的基本调度单位为warp,为32个线程,在不满32个时补齐32个,与分页系统中的分页相似。当一个warp中的线程所做的任务不一致时(例如有些线程有工作,另一些线程没有任务可做),称为control divergence。所以为了保持相率,要尽量减少control divergence的出现。这也是提高效率的一种方式。

三个课程lab任务 人文交流月课程的课程lab代码及实验报告


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值