007-【CMU15-418】【并行計算架構(gòu)和編程】【中英字幕】【GPU Arc

今天我們要開始討論GPU。GPU是過去幾十年來高性能計算中最令人興奮的事物之一。它們改變了性能的可能性,并且現(xiàn)在幾乎所有的主要超級計算機(jī)都使用大量的GPU。要充分發(fā)揮GPU的潛力,需要了解硬件的工作原理,并編寫適當(dāng)?shù)膽?yīng)用程序。GPU最初用于計算機(jī)圖形,但現(xiàn)在已經(jīng)發(fā)展成為一種非常適合并行計算的計算模型。在計算機(jī)圖形中,我們需要對許多小對象進(jìn)行操作,因此數(shù)據(jù)并行計算模型非常適用。圖形處理單元(GPU)是一種具有大量處理器和高帶寬內(nèi)存的硬件,可以實(shí)現(xiàn)高速渲染。圖形渲染涉及將三維對象映射到二維屏幕,并對每個像素分配顏色值。圖形渲染涉及許多復(fù)雜的計算,如光照、材質(zhì)反射和紋理映射。GPU可以通過并行處理來加速這些計算。GPU最初只能執(zhí)行圖形相關(guān)的操作,但現(xiàn)在已經(jīng)發(fā)展成為一種可編程的硬件,可以執(zhí)行各種復(fù)雜的計算操作。
1. CUDA是一種用于GPU編程的語言,可以將計算問題轉(zhuǎn)化為圖形操作。
2. CUDA使用了層次化的塊結(jié)構(gòu)來組織計算任務(wù)。
3. CUDA的線程模型與傳統(tǒng)的線程模型有所不同,它更加緊密地耦合在一起,并且有一些限制。
4. CUDA可以在CPU和GPU之間進(jìn)行數(shù)據(jù)交換和任務(wù)調(diào)度,實(shí)現(xiàn)并行計算。
5. CUDA是一種專有的編程語言,但在性能和廣泛使用方面優(yōu)于開源版本。
6. 在CUDA中,數(shù)據(jù)被分割成小的塊,每個塊中有1024個線程,但是有時候代碼的執(zhí)行不會剛好是塊大小的倍數(shù),需要進(jìn)行邊界測試和禁用操作。
7. CUDA使用SPMD(Single Program Multiple Data)模型,即多個線程同時執(zhí)行相同的內(nèi)核代碼。
8. 在CUDA中,有全局內(nèi)存、共享內(nèi)存和每個線程的小內(nèi)存,需要顯式地在代碼中進(jìn)行內(nèi)存分配和數(shù)據(jù)傳輸。
9. CUDA的硬件會自動處理塊的分配和調(diào)度,不需要程序員手動創(chuàng)建調(diào)度器。
10. CUDA中使用同步操作來保證線程的執(zhí)行順序和數(shù)據(jù)的一致性,還有一些原子操作可以保證操作的原子性。
11. GPU的并發(fā)性與pthread模型不同,可以支持大量的線程塊。
12. GPU硬件上有一個硬件調(diào)度器,可以將線程塊映射到實(shí)際處理器上,并支持多個線程塊的計算。
13. 編譯的CUDA代碼會生成機(jī)器碼,描述了內(nèi)核的具體操作、每個線程塊的線程數(shù)、每個線程需要的本地數(shù)據(jù)量以及共享內(nèi)存的最大使用空間。
14. GPU的執(zhí)行單元可以通過超線程技術(shù)進(jìn)行時間分復(fù)用,可以并行執(zhí)行多個線程塊的計算。
15. GPU的編程模型中,線程塊內(nèi)部可以共享內(nèi)存,但線程塊之間不能共享內(nèi)存。