4.3_本章小结
4.3 本章小结
恭喜你,你现在可以编写,编译并在图形处理器上运行大规模的并行代码了,你也可以向你的朋友吹嘘了。如果他们仍然认为GPU计算是非常复杂并且难以掌握的,那么他们肯定会被你的话打动。如果他们相信你的话,那么建议他们也购买这本书。
到目前为止,我们已经看到了如何告诉CUDA运行时在线程块上并行执行程序。我们把在GPU上启动的线程块集合称为一个线程格。从名字的含义可以看出,线程格既可以是一维的线程块集合,也可以是二维的线程块集合。核函数的每个副本都可以通过内置变量blockIdx来判断哪个线程块正在执行它。同样,它还可以通过内置变量gridDim来获得线程格的大小。这两个内置变量在核函数中都是非常有用的,可以用来计算每个线程块需要的数据索引。
第5章
线程协作
我们已经用CUDA C编写了第一个程序,并且看到了如何编写在GPU上并行执行的代码。这是一个非常好的开端!但对于并行编程来说,最重要的一个方面就是,并行执行的各个部分如何通过相互协作来解决问题。只有在极少数情况下,各个处理器才不需要了解其他处理器的执行状态而彼此独立地计算出结果。即使对于一些成熟的算法,也仍然需要在代码的各个并行副本之间进行通信和协作。到目前为止,我们还没有看到有任何机制可以在并行执行的CUDA C代码段之间实现这种通信。但是,在本章中我们将介绍这个问题的一种解决方案。