cuda 编程入门
-
GPU架构 TPC:流多处理器组成的小组
-
流多处理器:
-
warp : 每个块可能有128、256个线程,每32个线程称为一个warp。 warp是一个虚拟的并行结构,并行计算时,每个warp是一个基本的运算单元(执行相同的命令)warp是最基本的执行单位
- 三级结构 网格(grid)、块(block)、线程(Thread)
块内同步的一些操作
这个是半个warp去访问16个bank,现在可能有1个warp访问32个bank?
存在bank冲突
没有冲突
- cuda编程模型
- gpu和cpu是异构的,需要协同工作,
- cuda程序中既包含host程序 又包含device程序,他们是分别在cpu和gpu上执行的
- host和device之间可以进行通信,进行数据拷贝
(实际上启动了一百多万个线程)
(1)二维的网格,有6个block,block也是二维的,在x方向有5个元素,在y方向有3个元素(15个线程),一共90个线程(最好是32的倍数) (3)block虽然有三个维度,但是z方向的维度是1,实际上还是个二维的block
内置变量:不用声明就能用。
同步函数,gpu上的计算是异步的,使用这个函数来操作等待。
- GPU内存模型
在SM里面
共享内存是按照bank来划分的(比如说32个字节一个bank
如果我们在传输数据的时候 用这个在cpu上申请内存,速度比malloc快一倍
这块申请的内存可以同时被cpu和gpu访问。需要gpu满足一定的计算能力才能使用
也就是说必须等sorce的数据全部拷贝到dest,这个函数才会结束,执行下一个函数。
- cuda程序执行与硬件映射
- 规约算法
串行:使用for循环
二分法
使用多个块减少资源浪费
多个局部的规约 需要全局的同步 得到整体的规约
浪费严重
跨bank,会造成数据的冲突