看着這個事實,我開始想知道寄存器如何在GPU中工作?在知道這個之前,我認爲越來越高於分層內存梯形圖,大小不斷下降(這是直觀的(延遲減少,尺寸減小))。 GPU中寄存器的用途是什麼?爲什麼它們的尺寸大於L2/L1緩存? 謝謝。GPU(例如GTX 1080)中的寄存器文件大小是如何大於L2高速緩存大小的?
回答
在CPU的緩存服務於兩個基本目的:
他們能夠從DRAM獲取已經數據的時間和空間複用。這減少了DRAM的所需帶寬。
CPU緩存提供了大幅減少的延遲,這對單線程性能非常重要。
GPU不關注單線程性能,而是側重於吞吐量。大多數時候,他們還處理工作集,這些工作集太大而不適合任何合理大小的緩存。在某些情況下,小緩存有助於緩存,但總體緩存對於GPU而言並不像CPU那樣重要。
現在到問題的第二部分:爲什麼巨大的寄存器文件? GPU通過利用線程級並行性來實現其性能。許多線程需要同時處於活動狀態才能達到高性能水平。但是每個線程都需要存儲自己的一組寄存器。在Maxwell GPU中,可能在GP104/GTX1080中,每個SM可以容納多達2048個線程。每個SM都有一個256 KB的寄存器文件,因此如果使用所有線程,則每個線程都可以使用32x 32位寄存器。
我剛纔提到CPU使用緩存來減少內存延遲,但GPU也必須以某種方式處理內存延遲。他們只是切換到另一個線程,而一個線程正在等待內存中的答案。延遲和吞吐量和線程是由小定律連接:
(飛行/線程的數據)*線程=延遲X吞吐量
內存延遲可能是幾百納秒到一千納秒(允許使用1000ns)。這裏的吞吐量將是內存帶寬(320 GB/s)。爲了充分利用可用的內存帶寬,我們需要(320 GB/s * 1000 ns =)320 KB的飛行時間。 GTX1080應該有20個SM,因此每個SM需要有16 KB的空間才能充分利用內存帶寬。即使所有2048個線程始終用於內存訪問,每個線程仍需要8個字節來處理未完成的內存請求。如果某些線程忙於計算並且無法發出新的內存請求,則需要其餘線程的更多內存請求。如果線程每個線程使用多於32個寄存器,則每個線程需要更多的內存請求。
如果GPU使用較小的寄存器文件,則它們無法使用其存儲器的全部帶寬。他們會向存儲器接口發出一些工作,然後所有的線程都會等待存儲器接口的回答,並且不會有新的工作提交給存儲器接口。巨大的寄存器需要有足夠的線程可用。仍然需要仔細的編碼才能真正獲得GPU的最大功率。
1.您能否詳細說明「如果某些線程忙於計算並且無法發出新的內存請求,則需要其餘線程提供更多內存請求」2.我知道這個大寄存器大小對於在線程間切換非常重要,但最終,這些寄存器由L2高速緩存提供,所以如果所有線程都需要內存訪問,L2高速緩存將成爲瓶頸。你如何解釋這個? – Koustubh
1.這個簡單的小法則模型假定所有的線程在接收到來自存儲器接口的最後一個請求的回答後立即發出新的存儲器請求。但對於實際的GPU應用程序,線程將首先對收到的值進行一些計算。這些計算的持續時間甚至可能會有所不同,因爲這隻有一部分線程可用於隱藏內存延遲。即使在今天的GPU支持大量線程的情況下,通常也需要巧妙的編程來避免由於佔用太少而導致性能下降。 –
2.許多線程將向L2緩存發出請求,L2緩存需要具有高吞吐量來處理所有這些併發請求。但是高吞吐量的緩存在內存大小上不一定很大。對於目前的GPU應用來說,更大的二級緩存不會大大提高命中率。如果L2的吞吐量太低,則L2將僅是瓶頸。一個典型的CPU二級緩存很可能會成爲GPU的一個真正的瓶頸:雖然其較大的尺寸只能提供稍高的命中率,但它無法處理大量的併發請求。 –
GPU是爲3D和計算而構建的,因此供應商爲核心專門提供了更多的區域。更多的內核需要更多的數據來提供它們,並且需要更多的gpu區域來調度機制,以儘可能保持佔用。
太多芯,太多的三維管線如TMU和ROP,太多的調度部件和太寬存儲器控制器喂這些內核。
對於一切,Gpu區域還不夠。最不重要的一個似乎是緩存。即使紋理內存比這更重要,而且速度也更快。
使gpu更大意味着生產收益率降低,這意味着利潤減少。由於gpu供應商不是慈善組織,他們選擇最大利潤,最佳性能和節能(最近)。 緩存很貴。
在GPU A計算單元可具有比每個線程所以不需要任何乘法使用的數據長距離(如高速緩存和芯)之間傳送寄存器的千字節更多,使其具有能量高效化 。
此外,您可以隱藏某些部分的延遲,具有足夠大的計算佔用率; 本地共享內存(每個計算單元)和寄存器(每個線程)在實現該功能中扮演更重要的角色。
雖然存儲器控制器,L1和L2只能處理100 GB /秒,200 GB/s和300 GB/s的;本地共享存儲器和寄存器可高達5 TB/s和15 TB/s的帶寬爲一個GPU。
- 1. 高速緩存行大小
- 2. 測量L1和L2高速緩存的大小和順序
- 3. 高速緩存內存大小限制
- 4. L2高速緩存大小對編譯時間有多大影響?
- 5. 如何增加java高速緩衝存儲器的堆大小
- 6. OPENMP塊和高速緩存大小
- 7. 如何最小化Android應用高速緩存大小
- 8. 文件大小緩存和高效檢索Java中的文件大小
- 9. PHP Mysql最大寄存器大小?
- 10. 什麼是緩存大小和緩存行大小?
- 11. nvidia gpu指令緩存大小
- 12. 用最大大小的緩存文件夾實現PHP緩存
- 13. 較大的高速緩存大小是否總能提高性能?
- 14. ASP.NET緩存最大大小
- 15. 最大緩存大小
- 16. 如何設置企業庫高速緩存大小爲1個
- 17. 堆棧上EBP寄存器的大小?
- 18. HTML5緩存大小?
- 19. Cassandra緩存大小和JVM堆大小
- 20. .net緩存大小
- 21. 如何獲得最大的數組大小適合gpu內存?
- 22. 如何拆分大於內存大小的文件?
- 23. 文件夾大小如何大於磁盤上的大小?
- 24. 滑動,當緩存大小大於50 mb時清除緩存
- 25. 如何將最大緩存大小應用於記憶?
- 26. NASM「寄存器大小規格忽略」
- 27. amazon ec2實例中的緩存內存大小是多少?
- 28. 計算和緩存文件夾大小
- 29. 應該爲DataNucleus的L2緩存大小提供什麼值
- 30. iOS中緩存的NSURLRequest內存大小
由於GPU試圖優化吞吐量而不是延遲,GPU被認爲具有「反轉內存層次」。爲了保持較小的延遲,GPU RF使用操作數收集器和多個存儲區。查看我的[關於GPU寄存器文件的調查報告](https://www.academia.edu/23514653/A_Survey_of_Techniques_for_Architecting_and_Managing_GPU_Register_File),瞭解最新GPU的GPU RF架構,管理技術和(RF,L1和L2)大小趨勢的更多細節。 – user984260