007-【CMU15-418】【并行计算架构和编程】【中英字幕】【GPU Arc

今天我们要开始讨论GPU。GPU是过去几十年来高性能计算中最令人兴奋的事物之一。它们改变了性能的可能性,并且现在几乎所有的主要超级计算机都使用大量的GPU。要充分发挥GPU的潜力,需要了解硬件的工作原理,并编写适当的应用程序。GPU最初用于计算机图形,但现在已经发展成为一种非常适合并行计算的计算模型。在计算机图形中,我们需要对许多小对象进行操作,因此数据并行计算模型非常适用。图形处理单元(GPU)是一种具有大量处理器和高带宽内存的硬件,可以实现高速渲染。图形渲染涉及将三维对象映射到二维屏幕,并对每个像素分配颜色值。图形渲染涉及许多复杂的计算,如光照、材质反射和纹理映射。GPU可以通过并行处理来加速这些计算。GPU最初只能执行图形相关的操作,但现在已经发展成为一种可编程的硬件,可以执行各种复杂的计算操作。
1. CUDA是一种用于GPU编程的语言,可以将计算问题转化为图形操作。
2. CUDA使用了层次化的块结构来组织计算任务。
3. CUDA的线程模型与传统的线程模型有所不同,它更加紧密地耦合在一起,并且有一些限制。
4. CUDA可以在CPU和GPU之间进行数据交换和任务调度,实现并行计算。
5. CUDA是一种专有的编程语言,但在性能和广泛使用方面优于开源版本。
6. 在CUDA中,数据被分割成小的块,每个块中有1024个线程,但是有时候代码的执行不会刚好是块大小的倍数,需要进行边界测试和禁用操作。
7. CUDA使用SPMD(Single Program Multiple Data)模型,即多个线程同时执行相同的内核代码。
8. 在CUDA中,有全局内存、共享内存和每个线程的小内存,需要显式地在代码中进行内存分配和数据传输。
9. CUDA的硬件会自动处理块的分配和调度,不需要程序员手动创建调度器。
10. CUDA中使用同步操作来保证线程的执行顺序和数据的一致性,还有一些原子操作可以保证操作的原子性。
11. GPU的并发性与pthread模型不同,可以支持大量的线程块。
12. GPU硬件上有一个硬件调度器,可以将线程块映射到实际处理器上,并支持多个线程块的计算。
13. 编译的CUDA代码会生成机器码,描述了内核的具体操作、每个线程块的线程数、每个线程需要的本地数据量以及共享内存的最大使用空间。
14. GPU的执行单元可以通过超线程技术进行时间分复用,可以并行执行多个线程块的计算。
15. GPU的编程模型中,线程块内部可以共享内存,但线程块之间不能共享内存。