8.6_本章小结

8.6 本章小结

虽然本书的大部分内容都是介绍如何使用GPU来实现并行的通用计算,但我们不能忘记GPU的本职工作是作为一个渲染引擎。在许多应用程序都需要使用标准的计算机图形渲染功能。GPU是图形渲染领域的主要设备,因此如果不了解CUDA运行时和图形驱动程序之间的协作,那么我们将无法充分利用这些资源的强大功能。现在,我们已经学习了这些内容,因此在显示计算得到的图形结果时将不再需要主机的介入。这不仅加速了应用程序的渲染循环,而且还使主机可以同时执行其他的计算。即使没有其他计算需要执行,那么我们的系统在响应其他时间或者应用程序时也将变得更加灵敏。

我们还可以通过许多其他方式来使用图形互操作性,但在这里没有介绍。我们主要介绍了如何使CUDA C核函数能够写入到窗口的显示缓冲区中。这里的图像数据还可以作为纹理应用于场景中的任意表面。除了可以修改像素缓冲区对象外,你还可以在CUDA和图形引擎之间共享顶点缓冲区对象。这样,在CUDA C核函数中可以执行对象间的碰撞检测,或者计算顶点位置映射,从而对与用户交互的对象或者表面进行渲染。如果你对计算机图形学感兴趣,那么CUDA C的图形互操作API能够为应用程序带来大量全新的功能!

第9章

原子性

在本书的前半部分,我们看到了许多任务在单线程应用程序中是难以计算的,但使用CUDA C却很容易实现。例如在动画演示或者热传导模拟等示例中,当使用CUDA运行时来执行幕后工作时,就不再需要for()循环对每个像素依次更新。类似的是,只需在主机代码中调用__global__函数,就可以创建数千个并行的线程块和线程。

然而,在某些情况中,对于单线程应用程序来说非常简单的任务,在大规模并行架构上实现时却会变成一个复杂的问题。在本章中,我们将看到其中一些情况,并在这些情况中使用特殊的原语从而确保安全地完成传统单线程应用程序中的简单任务。