9.5_本章小结

9.5 本章小结

虽然我们经常提到通过CUDA来编写并行程序是多么容易,但在很大程度上忽略了一些情况,而在这些情况中的大规模并行架构(例如GPU)将使得程序员的工作更为困难。例如,有成千上万个线程同时修改同一个内存地址,在这种情况中,大规模的并行机器反而会带来负担。幸运的是,在硬件中支持的原子操作可以帮助减轻这种痛苦。

然而,正如在直方图计算中看到的,有时候依赖原子操作会带来性能问题,并且这些问题只能通过对算法的某些部分进行重构来加以解决。但是在直方图示例中,我们使用了一种两阶段算法,该算法降低了在全局内存访问上竞争程度。通常,这种降低内存竞争程度的策略总能带来不错的效果,因此当你在自己的应用程序中使用原子操作时,要记住这种策略。

第10章

在本书中已经多次看到,对于大规模数据的并行计算,代码在GPU上执行的性能要远远高于在CPU上执行的性能。除此之外,NVIDIA图形处理器还支持另一种类型的并行性(Parallelism)。这种并行性类似于CPU多线程应用程序中的任务并行性(Task Parallelism)。任务并行性是指并行执行两个或多个不同的任务,而并不是在大量数据上执行同一个任务。

在并行性环境中,任务可以是任意操作。例如,应用程序可以执行两个任务:其中一个线程重绘程序的GUI,而另一个线程通过网络下载更新包。这些任务并行执行,彼此之间没有任何共同的地方。虽然GPU上的任务并行性并不像CPU上的任务并行性那样灵活,但仍然可以进一步提高程序在GPU上的运行速度。在本章中,我们将介绍CUDA流,以及如何通过流在GPU上同时执行多个任务。