cuda编程

参照 https://zhuanlan.zhihu.com/p/34587739

一、GPU与CPU的联系与区别

GPU上可以进行数据结构统一的运算,GPU上集成大量相对CPU逻辑计算单元简单的计算部件,利于串行。

CPU上可以逻辑计算、流程控制等复杂的过程,利于并行。

总而言之,GPU是一个“人多力量大”的部件,而CPU是一个“单兵作战力强”的部件。

基于CPU+GPU的异构计算平台优势互补,CPU负责处理逻辑复杂的串行程序,而GPU重点处理密集型的并行计算程序,从而发挥最大功效(异构计算指的是在CPU上控制,GPU上计算)。

cuda编程可支持的语言:C/C++ python  Fortran

二、CUDA编程

1、在CUDA中CPU成为host,GPU称为device,同时GPU和CPU直接可以相互通信

2、典型的CUDA程序的执行流程如下:

      (1)分配host内存,并进行数据初始化

      (2)分配device内存,同时将host的数据拷贝到device上

      (3)在device上调用核函数完成指定运算

      (4)将device运算结果拷贝到host上

      (5)释放host和device所申请的内存空间

3、核函数:核函数是可以在device上并行计算的函数,在调用的时候需要指明网格(grid)数和block数,同时函数内必须指明线程的ID。核函数的关键字如下:

4、CUDA中的层级结构

一个核函数所启动的所有线程称为一个网格(grid),一个网格包含多个block,一个block中包含着多个线程。

kernel中所有的线程在逻辑上是并行,但是在物理上能否并行取决于内部资源。当kernel被执行的时候,kernel中所有的线程数就会被分配到流式多处理器SM上(一个线程块只能在一个SM上执行,一个SM上可以处理多个线程块)。

5、可以借助于CUDA的统一内存来避免复杂且繁琐的数据拷贝过程,但需要注意的一点是在使用了统一内存托管内存之后,需要调用 cudaDeviceSynchronize()函数使得host与device同步,保证正确访问kernel的计算结果。

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值