cuda 编程入门

  • GPU架构 alt TPC:流多处理器组成的小组

  • 流多处理器: alt

  • warp : 每个块可能有128、256个线程,每32个线程称为一个warp。 warp是一个虚拟的并行结构,并行计算时,每个warp是一个基本的运算单元(执行相同的命令)warp是最基本的执行单位

alt

  • 三级结构 网格(grid)、块(block)、线程(Thread) alt

alt 块内同步的一些操作

alt

alt

alt 这个是半个warp去访问16个bank,现在可能有1个warp访问32个bank?

alt

alt

alt

alt 存在bank冲突

alt 没有冲突

  • cuda编程模型
    • gpu和cpu是异构的,需要协同工作,
    • cuda程序中既包含host程序 又包含device程序,他们是分别在cpu和gpu上执行的
    • host和device之间可以进行通信,进行数据拷贝

alt

alt

alt (实际上启动了一百多万个线程)

alt

alt

alt (1)二维的网格,有6个block,block也是二维的,在x方向有5个元素,在y方向有3个元素(15个线程),一共90个线程(最好是32的倍数) (3)block虽然有三个维度,但是z方向的维度是1,实际上还是个二维的block

alt

alt 内置变量:不用声明就能用。

alt

alt 同步函数,gpu上的计算是异步的,使用这个函数来操作等待。

alt alt

alt

  • GPU内存模型 alt

alt

alt

alt

alt

alt 在SM里面

alt

alt

alt

alt 共享内存是按照bank来划分的(比如说32个字节一个bank

alt

alt

alt

alt

alt

alt

alt

alt

alt

alt 如果我们在传输数据的时候 用这个在cpu上申请内存,速度比malloc快一倍

alt 这块申请的内存可以同时被cpu和gpu访问。需要gpu满足一定的计算能力才能使用

alt 也就是说必须等sorce的数据全部拷贝到dest,这个函数才会结束,执行下一个函数。

alt

alt

alt

  • cuda程序执行与硬件映射 alt

alt

alt

alt

  • 规约算法 alt

alt 串行:使用for循环

alt 二分法

alt

alt 使用多个块减少资源浪费

alt 多个局部的规约 需要全局的同步 得到整体的规约

alt

alt

alt

alt

alt

alt

alt

alt

alt

alt

alt

alt

alt 浪费严重

alt

alt

alt

alt alt 跨bank,会造成数据的冲突

alt

alt

alt

alt

alt

alt

全部评论

相关推荐

昨天 18:54
门头沟学院 Java
点赞 评论 收藏
分享
把球:这个听过,你加了就会发现是字节的hr
点赞 评论 收藏
分享
点赞 9 评论
分享
牛客网
牛客企业服务