第4章 全局内存

在上一章中,你已经了解了线程是如何在GPU中执行的,以及如何通过操作线程束来优化核函数性能。但是,核函数性能并不是只和线程束的执行有关。回忆一下第3章的内容,在3.3.2节中,把一个线程块最里面一层的维度设为线程束大小的一半,这导致内存负载效率的大幅下降。这种性能损失不能用线程束调度或并行性来解释,造成这种性能损失的真正原因是较差的全局内存访问模式

阅读全文 »

3.4 避免分支分化

线程束中的条件执行可能引起线程束分化,这会导致内核性能变差。通过重新组织数据的获取模式,可以减少或避免线程束分化。在本节里,将会以并行归约为例,介绍避免分支分化的基本技术。

阅读全文 »

3.2 理解线程束执行的本质

启动内核时,从软件的角度你看到了什么?对于你来说,在内核中似乎所有的线程都是并行地运行的。在逻辑上这是正确的,但从硬件的角度来看,不是所有线程在物理上都可以同时并行地执行。本章已经提到了把32个线程划分到一个执行单元中的概念:线程束。

阅读全文 »

2.3 组织并行线程

从前面的例子可以看出,如果使用了合适的网格和块大小来正确地组织线程,那么可以对内核性能产生很大的影响。在向量加法的例子中,为了实现最佳性能我们调整了块的大小,并基于块大小和向量数据大小计算出了网格大小。
现在通过一个矩阵加法的例子来进一步说明这一点。

阅读全文 »

10.1 CUDA C的开发过程

了解GPU内存和执行模型抽象有助于更好地控制大规模并行GPU环境。这样,创建映射到抽象二维或三维网格的应用子域就变得很正常了,并且可以使核函数像串行一样表示。重点关注高级区域分解和内存层次结构存储管理的内容,就不会被创建和销毁线程的烦琐细节所妨碍了。

阅读全文 »
0%