在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

您好,歡迎來電子發燒友網! ,新用戶?[免費注冊]

您的位置:電子發燒友網>電子百科>主機配件>顯卡>

深度學習之GPU硬件選型

2018年01月06日 12:01 電子發燒友網 作者: 用戶評論(0

深度學習在2012年大放異彩,gpu計算也走入了人們的視線之中,它使得大規模計算神經網絡成為可能。人們可以通過07年推出的CUDA(Compute Unified Device Architecture)用代碼來控制gpu進行并行計算。本文首先根據顯卡一些參數推薦何種情況下選擇何種gpu顯卡,然后談談跟cuda編程比較相關的硬件架構。

1.選擇怎樣的GPU型號

這幾年主要有AMD和NVIDIA在做顯卡,到目前為止,NVIDIA公司推出過的GeForce系列卡就有幾百張[1],雖然不少都已經被淘汰了,但如何選擇適合的卡來做算法也是一個值得思考的問題,Tim Dettmers[2]的文章給出了很多有用的建議,根據自己的理解和使用經歷(其實只用過GTX 970…)我也給出一些建議。

 深度學習之GPU硬件選型

179上面并沒有考慮筆記本的顯卡,做算法加速的話還是選臺式機的比較好。性價比最高的我覺得是GTX 980ti,從參數或者一些用戶測評來看,性能并沒有輸給TITAN X多少,但價格卻便宜不少。從圖1可以看出,價位差不多的顯卡都會有自己擅長的地方,根據自己的需求選擇即可。要處理的數據量比較小就選擇頻率高的,要處理的數據量大就選顯存大core數比較多的,有double的精度要求就最好選擇kepler架構的。tesla的M40是專門為深度學習制作的,如果只有深度學習的訓練,這張卡雖然貴,企業或者機構購買還是比較合適的(百度的深度學習研究院就用的這一款[3]),相對于K40單精度浮點運算性能是4.29Tflops,M40可以達到7Tflops。QUADRO系列比較少被人提起,它的M6000價格比K80還貴,性能參數上也并沒有好多少。

在挑選的時候要注意的幾個參數是處理器核心(core)、工作頻率、顯存位寬、單卡or雙卡。有的人覺得位寬最重要,也有人覺得核心數量最重要,我覺得對深度學習計算而言處理器核心數和顯存大小比較重要。這些參數越多越高是好,但是程序相應的也要寫好,如果無法讓所有的core都工作,資源就被浪費了。而且在購入顯卡的時候,如果一臺主機插多張顯卡,要注意電源的選擇。

2.一些常見的名稱含義

上面聊過了選擇什么樣的gpu,這一部分介紹一些常見名詞。隨著一代一代的顯卡性能的更新,從硬件設計上或者命名方式上有很多的變化與更新,其中比較常見的有以下一些內容。

gpu架構:Tesla、Fermi、Kepler、Maxwell、Pascal

芯片型號:GT200、GK210、GM104、GF104等

顯卡系列:GeForce、Quadro、Tesla

GeForce顯卡型號:G/GS、GT、GTS、GTX

gpu架構指的是硬件的設計方式,例如流處理器簇中有多少個core、是否有L1 or L2緩存、是否有雙精度計算單元等等。每一代的架構是一種思想,如何去更好完成并行的思想,而芯片就是對上述思想的實現,芯片型號GT200中第二個字母代表是哪一代架構,有時會有100和200代的芯片,它們基本設計思路是跟這一代的架構一致,只是在細節上做了一些改變,例如GK210比GK110的寄存器就多一倍。有時候一張顯卡里面可能有兩張芯片,Tesla k80用了兩塊GK210芯片。這里第一代的gpu架構的命名也是Tesla,但現在基本已經沒有這種設計的卡了,下文如果提到了會用Tesla架構和Tesla系列來進行區分。

而顯卡系列在本質上并沒有什么區別,只是NVIDIA希望區分成三種選擇,GeFore用于家庭娛樂,Quadro用于工作站,而Tesla系列用于服務器。Tesla的k型號卡為了高性能科學計算而設計,比較突出的優點是雙精度浮點運算能力高并且支持ECC內存,但是雙精度能力好在深度學習訓練上并沒有什么卵用,所以Tesla系列又推出了M型號來做專門的訓練深度學習網絡的顯卡。需要注意的是Tesla系列沒有顯示輸出接口,它專注于數據計算而不是圖形顯示。

最后一個GeForce的顯卡型號是不同的硬件定制,越往后性能越好,時鐘頻率越高顯存越大,即G/GS《GT《GTS《GTX。

3.gpu的部分硬件

這一部分以下面的GM204硬件圖做例子介紹一下GPU的幾個主要硬件(圖片可以點擊查看大圖,不想圖片占太多篇幅)[4]。這塊芯片它是隨著GTX 980和970一起出現的。一般而言,gpu的架構的不同體現在流處理器簇的不同設計上(從Fermi架構開始加入了L1、L2緩存硬件),其他的結構大體上相似。主要包括主機接口(host interface)、復制引擎(copy engine)、流處理器簇(Streaming Multiprocessors)、圖形處理簇GPC(graphics processing clusters)、內存等等。

39主機接口,它連接了gpu卡和PCI Express,它主要的功能是讀取程序指令并分配到對應的硬件單元,例如某塊程序如果在進行內存復制,那么主機接口會將任務分配到復制引擎上。

復制引擎(圖中沒有表示出來),它完成gpu內存和cpu內存之間的復制傳遞。當gpu上有復制引擎時,復制的過程是可以與核函數的計算同步進行的。隨著gpu卡的性能變得強勁,現在深度學習的瓶頸已經不在計算速度慢,而是數據的讀入,如何合理的調用復制引擎是一個值得思考的問題。

流處理器簇SM是gpu最核心的部分,這個翻譯參考的是GPU編程指南,SM由一系列硬件組成,包括warp調度器、寄存器、Core、共享內存等。它的設計和個數決定了gpu的計算能力,一個SM有多個core,每個core上執行線程,core是實現具體計算的處理器,如果core多同時能夠執行的線程就多,但是并不是說core越多計算速度一定更快,最重要的是讓core全部處于工作狀態,而不是空閑。不同的架構可能對它命名不同,kepler叫SMX,maxwell叫SMM,實際上都是SM。而GPC只是將幾個sm組合起來,在做圖形顯示時有調度,一般在寫gpu程序不需要考慮這個東西,只要掌握SM的結構合理的分配SM的工作即可。

圖中的內存控制器控制的是L2內存,每個大小為512KB。

4.流處理器簇的結構

上面介紹的是gpu的整個硬件結構,這一部分專門針對流處理器簇SM來分析它內部的構造是怎樣的。首先要明白的是,gpu的設計是為了執行大量簡單任務,不像cpu需要處理的是復雜的任務,gpu面對的問題能夠分解成很多可同時獨立解決的部分,在代碼層面就是很多個線程同時執行相同的代碼,所以它相應的設計了大量的簡單處理器,也就是stream process,在這些處理器上進行整形、浮點型的運算。下圖給出了GK110的SM結構圖。它屬于kepler架構,與之前的架構比較大的不同是加入了雙精度浮點運算單元,即圖中的DP Unit。所以用kepler架構的顯卡進行雙精度計算是比較好的。

深度學習之GPU硬件選型

上面提到過的一個SM有多個core或者叫流處理器,它是gpu的運算單元,做整形、浮點型計算。可以認為在一個core上一次執行一個線程,GK110的一個SM有192個core,因此一次可以同時執行192個線程。core的內部結構可以查看[5],實現算法一般不會深究到core的結構層面。SFU是特殊函數單元,用來計算log/exp/sin/cos等。DL/ST是指Load/Store,它在讀寫線程執行所需的全局內存、局部內存等。

一個SM有192個core,8個SM有1536個core,這么多的線程并行執行需要有統一的管理,假如gpu每次在1536個core上執行相同的指令,而需要計算這一指令的線程不足1536個,那么就有core空閑,這對資源就是浪費,因此不能對所有的core做統一的調度,從而設計了warp(線程束)調度器。32個線程一組稱為線程束,32個線程一組執行相同的指令,其中的每個thread稱為lane。一個線程束接受同一個指令,里面的32個線程同時執行,不同的線程束可執行不同指令,那么就不會出現大量線程空閑的問題了。但是在線程束調度上還是存在一些問題,假如某段代碼中有if…else…,在調度一整個線程束32個線程的時候不可能做到給thread0~15分配分支1的指令,給thread16~31分配分支2的指令(實際上gpu對分支的控制是,所有該執行分支1的線程執行完再輪到該執行分支2的線程執行),它們獲得的都是一樣的指令,所以如果thread16~31是在分支2中它們就需要等待thread0~15一起完成分支1中的計算之后,再獲得分支2的指令,而這個過程中,thread0~15又在等待thread16~31的工作完成,從而導致了線程空閑資源浪費。因此在真正的調度中,是半個warp執行相同指令,即16個線程執行相同指令,那么給thread0~15分配分支1的指令,給thread16~31分配分支2的指令,那么一個warp就能夠同時執行兩個分支。這就是圖中Warp Scheduler下為什么會出現兩個dispatch的原因。

另外一個比較重要的結構是共享內存shared memory。它存儲的內容在一個block(暫時認為是比線程束32還要大的一些線程個數集合)中共享,一個block中的線程都可以訪問這塊內存,它的讀寫速度比全局內存要快,所以線程之間需要通信或者重復訪問的數據往往都會放在這個地方。在kepler架構中,一共有64kb的空間大小,供共享內存和L1緩存分配,共享內存實際上也可看成是L1緩存,只是它能夠被用戶控制。假如共享內存占48kb那么L1緩存就占16kb等。在maxwell架構中共享內存和L1緩存分開了,共享內存大小是96kb。而寄存器的讀寫速度又比共享內存要快,數量也非常多,像GK110有65536個。

此外,每一個SM都設置了獨立訪問全局內存、常量內存的總線。常量內存并不是一塊內存硬件,而是全局內存的一種虛擬形式,它跟全局內存不同的是能夠高速緩存和在線程束中廣播數據,因此在SM中有一塊常量內存的緩存,用于緩存常量內存。

小結

本文談了談gpu的一些重要的硬件組成,就深度學習而言,我覺得對內存的需求還是比較大的,core多也并不是能夠全部用上,但現在開源的庫實在完整,想做卷積運算有cudnn,想做卷積神經網絡caffe、torch,想做rnn有mxnet、tensorflow等等,這些庫內部對gpu的調用做的非常好并不需用戶操心,但了解gpu的一些內部結構也是很有意思的。

另,一開始接觸GPU并不知道是做圖形渲染的…所以有些地方可能理解有誤,主要基于計算來討論GPU的構造。

非常好我支持^.^

(0) 0%

不好我反對

(0) 0%

( 發表人:彭菁 )

      發表評論

      用戶評論
      評價:好評中評差評

      發表評論,獲取積分! 請遵守相關規定!

      ?
      主站蜘蛛池模板: 成人三级电影在线观看 | 欧美一区二区三区黄色 | 天天综合网天天综合色不卡 | 亚洲视频免费一区 | 四虎成人欧美精品在永久在线 | 色视频网站色视频播放 | 婷婷色九月综合激情丁香 | 国产精品黄页网站在线播放免费 | 色吧亚洲欧美另类 | 偷偷久久 | 日本三级香港三级人妇99视 | 特级毛片aaaa免费观看 | 免费视频精品 | 天天摸日日添狠狠添婷婷 | 广东毛片| 中文在线1区二区六区 | 亚洲午夜久久 | 久久黄色精品视频 | 四虎永久免费地址 | 天天摸天天摸天天躁 | 91桃色国产线观看免费 | 性色爽爱性色爽爱网站 | 九色窝| 日韩综合nv一区二区在线观看 | 影院成人区精品一区二区婷婷丽春院影视 | 激情综合五月亚洲婷婷 | av天天看 | 亚洲视频一区二区三区 | 国产男人午夜视频在线观看 | 天天摸日日碰天天看免费 | 亚洲女同一区二区 | 中文字幕xxx | 四虎网站在线播放 | 日本特黄特色 | 成人在线网站 | 天天爽天天爽天天片a久久网 | 亚洲成人激情片 | 成人精品亚洲人成在线 | 成年午夜一级毛片视频 | 美女一级a毛片免费观看 | 性xxxxbbbb免费播放视频 |