5-1 CUDA共享内存概述
发表于
分类于
CUDA
,
CUDA C编程权威指南笔记
4-5 使用同一内存的矩阵加法
发表于
分类于
CUDA
,
CUDA C编程权威指南笔记
4-4 核函数可达到的带宽
发表于
分类于
CUDA
,
CUDA C编程权威指南笔记
4-2 内存管理
发表于
分类于
CUDA
,
CUDA C编程权威指南笔记
4-3 内存访问模式
发表于
分类于
CUDA
,
CUDA C编程权威指南笔记
3-5 展开循环
发表于
分类于
CUDA
,
CUDA C编程权威指南笔记
3-6 动态并行
发表于
分类于
CUDA
,
CUDA C编程权威指南笔记
3.6 动态并行
本文作为第三章CUDA执行模型的最后一篇介绍动态并行,书中关于动态并行有一部分嵌套归约的例子,但是我认为,这个例子应该对我们用途不大,简单了解一下算了,首先它并不能降低代码复杂度,其次,其运行效率也没有提高,动态并行,相当于串行编程的中的递归调用,递归调用如果能转换成迭代循环,一般为了效率的时候是要转换成循环的,只有当效率不是那么重要,而更注重代码的简洁性的时候,我们才会使用,所以我们本文只介绍简单的一些基础知识,如果需要使用动态并行相关内容的同学,请查询文档或更专业的博客。
到目前为止,我们所有的内核都是在主机线程中调用的,那么我们肯定会想,是否我们可以在内核中调用内核,这个内核可以是别的内核,也可以是自己,那么我们就需要动态并行了,这个功能在早期的设备上是不支持的。
动态并行的好处之一就是能让复杂的内核变得有层次,坏处就是写出来的程序更复杂,因为并行行为本来就不好控制,去年我在没有系统的学习CUDA的时候写过一个400行左右的内核,用来训练人脸检测程序,确实比cpu块,但是从gpu的温度来判断,并没有很高的利用率(当时还不会使用性能检测工具这些,当时TensorFlow跑的时候GPU温度有80多,但是我写的就只有60多,所以我断定,gpu性能完全没发挥,但是那个程序还是运行了好久,可见磨刀不误砍柴工这句话是多么正确)
动态并行的另一个好处是等到执行的时候再配置创建多少个网格,多少个块,这样就可以动态的利用GPU硬件调度器和加载平衡器了,通过动态调整,来适应负载。并且在内核中启动内核可以减少一部分数据传输消耗。
4-1 CUDA内存模型概述
发表于
分类于
CUDA
,
CUDA C编程权威指南笔记
3-4 避免分支分化
发表于
分类于
CUDA
,
CUDA C编程权威指南笔记