題 對於內置數百個處理器的GPU感到困惑


我剛開始學習關於Udacity的並行編程課程,我已經有點困惑了。在此視頻片段中: https://youtu.be/gbj0oauFFI8?t=52s 

我們被告知平均GPU有數千個ALU和數百個處理器。我對“數百個處理器”部分感到困惑。為什麼那麼多?不應該只是一個......? GPU確實代表圖形處理器單元。 GPU不是一個GPU,一個內置數千個ALU的處理器,但完全專門用於某些任務?這些“處理器”如何發揮作用?

如果我錯了,那麼我假設每個處理器大約有10個(因為10 * 100個CPU = 1000個ALU)ALU在裡面?有沒有我可以看到的佈局,所以我可以驗證這個?

謝謝。


4
2018-06-16 05:11


起源




答案:


現代圖形處理器是一種高度複雜的設備,可以擁有數千個處理核心。該 Nvidia GTX 970 例如,有1664個核心。這些核心被分組為一起工作的批次。

對於Nvidia卡,核心按16或32批次組合在一起,具體取決於底層架構(開普勒 或Fermi)並且該批次中的每個核心將運行相同的任務。

雖然批處理和核心之間的區別很重要,因為批處理中的每個核心必須運行相同的任務,但其數據集可以是獨立的。

您的中央處理器單元很大,只有幾個內核,因為它是一個高度通用的處理器,能夠進行大規模的決策和流量控制。顯卡避開了大量的控制和切換邏輯,有利於並行運行大量任務。

如果你堅持用圖片證明它,那麼下圖(來自 GTX 660Ti Direct CU II TOP評測)顯示了5個非常相似的綠色區域,每個區域包含數百個核心,總共1344個活動核心,分為15個功能塊:

enter image description here

仔細觀察每個塊似乎在側面有4組控制邏輯,表明您可以看到的15個較大塊中的每一個都有4個SMX單元。

這為我們提供了15 * 4處理塊(60),每個處理塊有32個核心,總共有1920個核心,它們的批量將被禁用,因為它們要么發生故障,要么只是為了便於將它們分成不同的性能組。這將為我們提供正確數量的活動核心。

Stack Overflow上有關批處理如何映射的一個很好的信息來源: https://stackoverflow.com/questions/10460742/how-do-cuda-blocks-warps-threads-map-onto-cuda-cores


4
2018-06-16 06:31



32個並髮指令仍然是瘋狂的快不是嗎? CPU通常可以做4或8。 - Pacerier
@Pacerier你錯過了一些數學。 32核是 每個SMX單位。這個系列的完全填充的頂端將有60個SMX單元,總共1920個核心可用於並行執行相同的任務。 - Mokubai♦


CPU是 SISD,GPU SIMD

SISD是Single Instruction,Single Data的首字母縮寫。 CPU可以很好地執行順序操作:執行此操作,執行此操作,將其移動到那裡,再移動一個,將它們一起添加,寫入設備,讀取響應等等。它們執行大多數簡單操作,這些操作採用一個或兩個值並返回一個值。

SIMD是單指令,多數據:同時對多個數據集執行相同的操作。例如,取128個值X.1-X128,取128個值Y.1-Y128,將相應的值成對相乘並返回128個結果。 SISD處理器必須執行128條指令(+內存讀/寫),因為它只能一次乘以兩個數字。如果只有128個數字適合其寄存器,SIMD處理器可以在幾個步驟中執行此操作,甚至可以在一個步驟

SISD CPU適用於日常計算,因為它主要是順序的,但有些任務需要以類似的方式處理大量數據 - 例如處理圖形,視頻渲染,破解密碼,挖掘比特幣等.GPU允許大規模並行化計算,只要必須以相同的方式處理所有數據。

好的,這是純粹的理論。在現實世界中,常規CPU提供一些SIMD指令(SSE),因此可以在常規CPU上更有效地完成一些多數據。同時,並非GPU中的所有ALU都必須處理相同的事情,因為它們被分組成批(參見 Mokubai的回答)。因此CPU不僅僅是SISD,GPU也不是純粹的SIMD。

何時使用GPU進行計算有益?當你的計算真的,真的可以大規模並行化。您必須考慮將輸入寫入GPU的內存需要花費時間,讀取結果也需要一些時間。當您可以構建一個在離開GPU之前進行大量計算的處理管道時,您可以獲得最大的性能提升。


8
2018-06-16 09:50



與在CPU中進行相比,GPGPU如何影響電池壽命? - Pacerier
@Pacerier給出單一答案的因素太多了。取決於任務,芯片架構,特定任務的適用性,並行操作的數量,計算節點的性能,半導體器件製造技術等。根據經驗,可以被分段化的任務將從功率效率和性能方面受益於SIMD 。但也有例外。例如,雖然通常SIMD會大大加速密碼破解,但scrypt算法不會因為它是一個巨大的內存佔用而且並存內存程度很低。 - gronostaj


圖形數據非常適合併行處理。將1024x1024像素的圖像分成16x16的塊,讓每個核心處理這麼小的塊。將結果重新組合在一起,結果與逐個處理這些塊的處理器的結果不同。

這項工作的條件是一個核心的結果不會影響其他核心的結果,反之亦然。這樣的東西也適用於Excel工作表,其中C列中的單元格將A + B列的值相加.C1 = A1 + B1,C2 = A2 + B2,行1和2彼此獨立。

圖形數據處理是一項非常具體的任務,您可以專門為這種任務設計一個處理器 - 也可以用於其他任務,比如挖掘比特幣。顯然,通過在彼此旁邊使用多個核心而不是使用一個大處理器,您可以提高處理單元的效率。更高效意味著不僅速度更快,而且還具有如下優勢:如果您只需要20%的處理核心,您可以關閉其餘部分,這是節能的。

免責聲明:上述示例可能在技術上不正確。它更多的是展示原則。我想,實際的數據處理會復雜得多。


2
2018-06-16 07:30





主要答案是它們更簡單,所以你可以將它們拼湊在一起,它們曾經做過一項任務,那就是將碎片放在屏幕上。但現在它們在性質上更像是cpus。 cpus和gpus之間的主要原因是cpu arcitecture基於x86而gpu中的一個是基於AMD GCN或NVIDIA CUDA

試試看 http://www.anandtech.com/show/4455/amds-graphics-core-next-preview-amd-architects-for-compute http://www.anandtech.com/show/5699/nvidia-geforce-gtx-680-review/2


1
2018-06-16 05:21





CPU有1,2,4,6,8個核心或更多。 同樣,GPU有數百到數千。 這就是為什麼頂級視頻卡的浮動處理能力比四核CPU高出約80倍。

不同之處在於它們是特定類型和聚類的(參見上面的答案)。特定類型意味著它們被設計為進行特定的非一般計算。使標準軟件使用GPU核心而不是CPU核心非常困難。如果一個軟件可以那麼好,它會使CPU無用。不幸的是,只有非常具體的能夠接近視頻卡的真正處理能力。一些哈希處理軟件可以做到這一點。


1
2018-06-16 09:01



msgstr“”“如果一個軟件可能那麼好,它會使CPU無用”“”,確切地說,將來它會。 - Pacerier