CUDA 概念汇总

发布时间:2022-07-01 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了CUDA 概念汇总脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

简介

最近接触到了 cudaStream,对于一个没写过 CUDA 的人来说,一时有点难理解。于是网上找了几篇文章,快速入门了一下。其实说白了 cudaStream 就是一个执行流,用以提高并行度。

下面是学习过程中见到的概念。概念真的太重要了。

核函数:CUDA 的执行单元。核函数用 __global__ 符号声明,在调用时需要用 <<<grid, block>>> 来指定kernel要执行的线程数量

线程层次结构:grid -> block -> thread。一个 grid,多个 block,一个网格上的线程共享相同的全局内存。一个 block,多个 thread,一个 block 上的 thread 使用共享内存来通信。grid 和 block 都是三维的,在核函数中可以使用 blockDimgridDim 来获取维度大小。

CUDA 概念汇总

流式处理器:一个 block 上的所有线程在一个 SM 上执行,多个线程对应多个 core,每个 core 有寄存器、局部内存(local memory),每个 SM 上又有内存(shared memory),整个 GPU 上又有另一个内存(global memory)。

CUDA 概念汇总

线程束:SM 采用了 SIMT 架构,基本的执行单元是线程束,一个线程束 32 个线程,这些线程执行相同的指令。遇到分支情况,需要等待,因为单指令多线程,即每个线程上的指令都是一样的,所以分支情况性能会差。

显存的使用:设备上使用的内存和主机上使用的内存不是一个东西,所以如果要在设备上进行计算,需要将数据拷贝到设备上后计算。

统一内存:CUDA 6.0 引入的概念,使用一个托管内存共同管理 host 和 device 的内存,函数调用 cudaMallocManaged

Stream:利用 Stream 将内存读取和数值运算并行,从而提升数据的吞吐量。默认情况下,CUDA 使用一个 Default Stream 来进行数据拷贝。通常采用将数据分块的做法,将不同数据块分配给不同的 Stream 做数据传输和计算,这样多个数据块就并行起来了,提高了并行度,从而提升数据的吞吐量。相关的 API 有 cudaStreamCreate, cudaMemcpyAsync

Event:用以监视流的运行情况,或者精确计时。

总结

看了下面的参考资料,算是稍微认识了一下 CUDA。如何进一步学习呢?进一步 CUDA 做什么呢?我们用 CUDA 的目的无非就是利用并行计算来加速运算,本质就是算的更快。进一步学习 CUDA 的目的就是可以更快的计算,即性能优化,掌握各种 Trick,掌握硬件架构等。至于我,就不深入学习了... 我只不过是想知道 cudaStream 是干嘛的。

参考资料

[1] https://zhuanlan.zhihu.com/p/34587739

[2] https://zhuanlan.zhihu.com/p/51402722

[3] https://zhuanlan.zhihu.com/p/75720006

[4] https://zhuanlan.zhihu.com/p/53773183

脚本宝典总结

以上是脚本宝典为你收集整理的CUDA 概念汇总全部内容,希望文章能够帮你解决CUDA 概念汇总所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: