GPU(顯卡)的開源驅動調研

1.     概要

在桌面操作系統中,由於廠商對顯卡驅動的完美支持,用戶購買顯卡時只需關注顯卡的硬件特性,一般遵循“價格越貴性能越好”。作爲核心競爭力,顯卡廠商不會也不願意完全開源自己的顯卡驅動,只發布編譯好的二進制機器碼。不同的CPU其二進制碼是不一樣的,因此不被顯卡廠商支持的CPU則無法使用這些驅動,只能轉而求助於並不完善的開源驅動。這類CPU的用戶在選購顯卡時不能僅僅考慮該款顯卡理論上有多牛,因爲在開源驅動環境下,顯卡也許遠遠達不到其主頁上宣稱的性能和功能。

本文首先介紹顯卡命名方法;然後以AMD Radeon顯卡(俗稱A卡)和龍芯3A處理器爲例,介紹開源驅動的組成,性能和功能;其間會與Nvidia顯卡(N卡)做簡單比較,說明在開源驅動下,我們應該選擇A卡而不是遊戲玩家最喜歡的N卡。

主要內容有:

  • 顯卡的命名方法:A卡和N卡
  • 如何確認開源驅動是否支持某款顯卡
  • 顯卡驅動的性能比較

2.     遊戲顯卡的命名方法

本文只針對遊戲顯卡(即桌面顯卡),不考慮專業顯卡等其他顯卡。本章分別介紹AMD/ATI Radeon顯卡、Nvidia GeForce顯卡的命名規則。

2.1.   AMD/ATI顯卡(A卡)

AMD/ATI顯卡的命名分爲三個階段。

2.1.1. 後綴命名階段

Radeon HD300之前採用後綴命名規則,其高中低端的順序如:

XTX > XT > XL/GTO > Pro/GT > SE

其中:

XTXATI系列中最高端顯卡型號的後綴;

XT:代表了頂級顯卡的型號,一般就運行頻率稍低於XTX,例如高端顯卡Radeon X1950XTRadeon HD 2900XT,它們都採用了XT這個後綴;

XL:用於ATI高端顯卡系列的後綴,級別比頂級級別的XT低,主要表現在頻率和管線上有所縮水;

GTO:用於中高端顯卡系列,比XL級別稍低。

Pro/GTProGT的級別都要低於XT,一般來說,採用同一核心代號的ATI顯卡,Pro的級別要稍高於GT,如X1950ProX1950GT,主要表現在運行頻率上,Pro要高於GT。但我們需要區分清楚,當採用不同核心代號的ATI顯卡時,GT的級別是可以高於Pro的,如X1650GTX1650Pro,單從命名上看貌似X1650Pro要高級於X1650GT但實際卻是相反的,X1650Pro採用了RV530的顯示核心,要低級於1650GT採用的RV560,因此X1650Pro的級別要低於X1650GT

SE:全名爲“Special Edition(特殊版),主要用於ATI中低端顯卡系列的後綴,採用這個後綴的顯卡在管線上會有所縮減。

2.1.2. HD+數字命名階段

ATIRadeon HD 3000系列開始採用了新的命名方法,拿Radeon HD3870爲例,其中“3”代表了顯卡代數、“8”代表了系列,而“70”則代表了顯卡的系列內型號,數字越大代表的級別就越高。這種命名方式比起過去的更爲直觀更容易區分開。

又例如HD6770HD69506是代表他們是第幾代產品;後面的78代表高中低端系列:89是高端,67是中端,45是低端產品;後面的70代表系列內的高中低端產品:507090分別對應低中高端。 6770就是67系列的高端,6950就是69系列的中端。

2.1.3. Rx+xxx命名階段

201310AMD正式宣佈了新一代的獨立顯卡產品,同時也標誌着沿用六代的“Radeon HD”命名方式成爲歷史,“Radeon Rx”閃亮登場。

新一代顯卡的命名並不是接着HD7000繼續順延。HD8000命名留給了OEM,先前一條「欲重現9550輝煌」的新聞(傳言:AMD現已決定將HD 8000命名方式留給OEM產品,而零售產品則會改名,用HD 9000系列來替代)令大家以爲新顯卡在HD8000名稱被佔用之後順理成章地會叫做HD9000,同時期待會有重生的Radeon HD9550。不過最終登場是全新的Rx-xxx方式的命名,新顯卡系列爲Rx-2xx。具體來說,目前AMD自高到低將推出R9 290XR9 290R9 280XR9 270XR7 260XR7 250這些型號。

2.1.4. A卡名稱與其GPU核心架構代號的對應關係

Family

Engineering Names

Marketing Names

Fixed-pipeline family

 

 

R100

R100, RV100, RV200, RS100, RS200

7xxx, 320-345

R200

R200, RV250, RV280, RS300

8xxx - 9250

R300

R300, R350, RV350, RV380, RS400, RS480

9500 - 9800, X300 - X600, X1050 - X1150, 200M

R400

R420, R423, RV410, RS600, RS690, RS740

X700 - X850, X12xx, 2100

R500

RV515, R520, RV530, RV560, RV570, R580

X1300 - X2300, HD2300

TeraScale-family

 

 

R600

R600, RV610, RV630, RV620, RV635, RV670, RS780, RS880

HD2400 - HD4290

R700

RV770, RV730, RV710, RV740

HD4330 - HD5165, HD5xxV

Evergreen

CEDAR, REDWOOD, JUNIPER, CYPRESS, PALM (Wrestler/Ontario), SUMO (Llano), SUMO2 (Llano)

HD5430 - HD5970, all HD6000 not listed under Northern Islands, HD7350

Northern Islands

(北大西洋諸島)

ARUBA (Trinity/Richland), BARTS, TURKS, CAICOS, CAYMAN

HD6450, HD6570, HD6670, HD6790 - HD6990, HD64xxM, HD67xxM, HD69xxM, HD7450 - HD7670

Graphics

Core Next-family

 

 

Southern Islands

(南太平洋島)

CAPE VERDE, PITCAIRN, TAHITI, OLAND, HAINAN

(注:CAPE VERDE和OLAND都在北大西洋)

HD7750 - HD7970, R9 270, R9-280, R7 240, R7 250

Sea Islands

(海羣島)

BONAIRE, KABINI(印度卡比尼河), KAVERI(印度卡佛理島), HAWAII

HD7790, R7 260, R9 290,Radeon HD 8000 series(OEM)

Volcanic Islands

(火山羣島)

Vesuvius

AMD Radeon Rx 200 Series-branded,如R9 295x2

Pirates Islands

(海盜島)

2015年發佈

AMD Radeon Rx 300 Series-branded


其中:注:紅色爲未來產品

R100-R500Fixed-pipeline family

R600-Northern IslandsTeraScale-family

Southern Islands-最後是Graphics Core Next-family

2.2.   Nvidia顯卡(N卡)

我們討論的N卡都是基於GeForceGeForceNvidia的桌面遊戲顯卡系列,除此之外還有針對移動平臺和專業圖形工作站的系列,在此不討論。

2.2.1. N卡命名規則

nVIDIA喜歡採用有規律的命名方式,對相同核心的不同型號顯卡,以不同的命名規則區分開,以方便消費羣體識別好顯卡之間的級別。

nVIDIA各代顯卡都遵循了由高至低命名規則Ultra >GTX >GTS >GT >GS >LE

Ultra:字面意思直譯就有“激進,極端”的意思。而在nVIDIA的產品中也是如此,只要後綴帶了這個傢伙,一定是那類芯片中最高端的,它的命名級別比GTX還要高,細數NV的歷代王者,基本都能看到它熟悉的身影。如8800Ultra,它就屬於8800GTX的高頻版本。

GTX:一般可以理解爲GT eXtreme,代表了極端、極致的意思,用於nVIDIA最高級別的型號,如8800GTX和最新的9800GTX,都採用了GTX的後綴。

GTS:超級加強版Giga-TexelShader”的縮寫,千萬像素的意思,也就是每秒的像素填充率達到千萬以上。GTS最早出現在Geforce2產品中,代表當時的最高端的Geforce2。而現在一般用於表示GTX的縮減版,級別在GTX之後,如8800GTS

GT:頻率提升版本"GeForceTechnoloty"的縮寫,級別低於GTS,也是廣爲用戶羣體所接受的產品型號之一,主打中端——中高端的消費市場,較具代表的就是nVIDIA7”系列的7600GT

GSGS一般用於命名nVIDIA的主打產品,一般可以看作是GT的縮減版,級別低於GT,較爲具代表性的就是7600GS。值得注意的是,採用GS命名的顯卡,其核心架構可以和GT一樣,只是在運行頻率上落後於GT,但也可以是在覈心架構上直接縮減,如7600GS的核心架構就和7600GT一樣,而8800GS的核心架構則比8800GT要有所縮水,我們在選購顯卡時,要注意區分開。

LE"Limit Edition"的縮寫,表示限制版本,代表某一產品系列中的低端產品,主要是頻率與標準版本相比有一定的下降。如:7300LE

其實關於nVIDIA顯卡的命名後綴還有許多,如XTZTTiSEGE等,在這裏就不一一列舉了,因爲常見的顯卡命名後綴,並不包含它們在內,下面我們來了解顯卡顯示核心的架構概念。

2.2.2. N卡名稱與其GPU核心代號的對應關係

Code name

Official Name

Nvidia 3D

object codename

里程碑事件

NV04

Riva TNT, TNT2

Fahrenheit

 

NV10

GeForce 256, GeForce 2, GeForce 4 MX

Celsius

 

NV20

GeForce 3, GeForce 4 Ti

Kelvin

VS出現

NV30

GeForce 5 / GeForce FX

Rankine

 

NV40

GeForce 6, GeForce 7

Curie

 

NV50

GeForce 8, GeForce 9, GeForce 100, GeForce 200, GeForce 300

Tesla

 

NVC0

GeForce 400, GeForce 500

Fermi

 

NVE0

GeForce 600, GeForce 700, GeForce GTX Titan

Kepler

 

NV110

GeForce 750

Maxwell

 


3.     顯卡的發展(略)


4.     顯卡的開源驅動支持

顯卡的開源驅動包括Linux內核支持、2D驅動支持、3D驅動支持。

4.1.   Linux內核支持

4.1.1. A卡

通過內核代碼drivers/gpu/drm/radeon/radeon_family.h中的enum radeon_family可以看到,

2.6.36內核支持到Evergreen;

2.6.32內核(龍芯反向移植版)支持到Southern Islands;

3.15內核支持到Sea Islands,包括Sea Islands的最新架構Hawaii;但不支持最新的Volcanic Islands.(內核對Hawaii的完全支持要等到3.17)

4.1.2. N卡

通過內核代碼drivers/gpu/drm/nouveau/core/engine/device/nve0.c中的nve0_identify可以看到,

2.6.36內核支持到GFxxx;

2.6.32內核(龍芯反向移植版)支持到Kelper的GK110;

3.15內核支持到Kelper的GK208;但不支持最新的Maxwell。

4.2.   2D驅動支持

4.2.1. A卡

A卡的2D驅動爲xorg-video-ati,其官網描述如下:Driver for ATI/AMD Radeon based video chips,everything from Radeon 7000 (R100) to Radeon HD 7000 (Southern Islands) series。

更新的A卡需要使用glamor 2D驅動。

4.2.2. N卡

N卡的2D驅動爲xorg-video-nouveau,其官網描述如下:2D/3D acceleration supported on all cards。

4.3.   3D驅動支持

4.3.1. A卡

Mesa的dri驅動src/mesa/drivers/dri/下有radeon,r200

Gallium驅動 src/gallium/drivers/下有r300,r600,radeonsi

其中:

radeon支持R100

r200支持R200

r300(稱作r300g)支持R300,R400,R500

r600(稱作r600g)支持R600,R700,Evergreen,Northern Islands

radeonsi支持Southern Islands,Sea Islands

4.3.2. N卡

Gallium驅動src/gallium/drivers/nouveau/nvc0

儘管目錄爲nvc0,其實包括了對nve0(即Kepler)的支持;但是對最新的Maxwell的支持還在開發中。

4.3.3. Mesa對標準的支持

API

OpenGL

OpenGL ES

OpenVG

EGL

GLX

Glide

Direct3D

當前版本

Date

4.4
2013-07-22

3.1
2014-03-17

1.1
2008-12-03

1.5
2014-03-19

1.4
2005-12-16

3.10
2013-04-03

11.2
2011-09-13

10.2

(2014-06-06)[10]

3.3[11]

3.0

1.1

1.4

1.4

deprecated

9.0c

10.1

(2014-03-04)[12]

3.3[13]

3.0

1.1

1.4

1.4

deprecated

9.0c

10.0

(2013-11-30)[14]

3.3[15]

3.0

1.1

1.4

1.4

deprecated

9.0c

9.0

(2012-10-08)

3.1[16]

2.0

1.1

1.4

1.4

 ?

 ?

8.0

(2012-02-08)

3.0

2.0

1.1

1.4

1.4

 ?

 ?

7.0

(2007-06-22)

2.1

N/A

N/A

N/A

1.4

 ?

 ?

6.0

(2004-01-06)

1.5

N/A

N/A

N/A

1.3

 ?

 ?

5.0

(2002-11-13)

1.4

N/A

N/A

N/A

1.3

 ?

 ?

4.0

(2001-10-22)

1.3

N/A

N/A

N/A

1.3

 ?

 ?

註釋:

紅色爲舊版本;黃色爲舊版本,但持續支持;綠色爲最新版本

目前Mesa只能支持到OpenGL 3.3;而閉源驅動可以支持到OpenGL 4.4

4.4.   開源驅動的開發速度

4.4.1. 概況

由前面對開源驅動的三個主要部分的介紹,可以看出開源驅動的開發速度至少落後閉源驅動一代。

A卡支持到上一代的Sea Islands,不支持最新的Volcanic IslandsN卡支持上一代的Kepler,不支持最新的Maxwell

不僅如此,開源驅動對上一代的顯卡支持也不是最好的,性能遠遠低於閉源驅動。

不過讓人感到樂觀的是,近年兩大顯卡陣營的開源驅動團隊都加大了投入(特別是AMDA卡開源驅動團隊是AMD的員工;而N卡開源驅動團隊則獨立於Nvidia公司);另外,由於顯卡更新換代很快,所以上一代的顯卡仍然會是很多領域的主流產品。

開源驅動值得期待。

4.4.2. Radeon驅動開發者

Marek Olšák[email protected]

Alex Deucher[email protected] the lead open-source Radeon driver developer atAMD 

ChristianKöniganother open-source AMD driver developer

JohnBridgmananother regular to the Phoronix Forums at AMD

Ian Romanick

等等

5.     顯卡的驅動性能對比(持續更新)

5.1.   A卡與N卡的閉源驅動性能比較(目的:A卡與N卡誰的性能好)

phoronix2014612日進行的測試《35-Way NVIDIA/AMDProprietary Linux Graphics Driver Comparison》如下:

http://www.phoronix.com/scan.php?page=article&item=nvamd_binary_comparison&num=1

結果顯示:

N卡完勝A卡,N卡的閉源驅動無論從性能還是兼容性都比A卡做得好。

5.2.   A卡與N卡的開源驅動性能比較(目的:選擇A卡還是 N卡)

phoronix 2014725日進行的測試《Nouveau vs. Radeon vs.Intel Tests On Linux 3.16, Mesa 10.3-devel》如下:

http://www.phoronix.com/scan.php?page=article&item=amd_nvintel_316&num=1

結果顯示:

A卡完勝N卡,不過由於nouveau驅動增加了re-colocking支持(半支持),其性能已經比之前有較明顯的提升。

摘抄Michael Larabel的評論:The NVIDIAKepler GPU performance has improved with Linux 3.16 thanks to re-clockingsupport, but for most Kepler GPUs the re-clocking support only works partiallyand cannot be fully-clocked to the highest performance state. However, at leastthe Nouveau code is moving in the right direction. For Linux gamers caringabout open-source drivers, AMD Radeon remains the best choice for apleasurable, high performance experience.

5.3.   N卡的開源驅動和閉源驅動性能比較(目的:N卡開源驅動進展是否樂觀)

phoronix2014728日進行的測試《Even With Re-Clocking,Nouveau Remains Behind NVIDIA's Proprietary Linux Driver》如下:

http://www.phoronix.com/scan.php?page=article&item=nvidia_nouveau_linux316&num=1

結果顯示:

在爲Kepler增加了re-clocking支持後,相應的N卡開源驅動性能有明顯提升。但是目前只有GeForce GTX 650是全支持,能夠達到閉源驅動340.2460%80%的性能;而其他的Kelper顯卡只得到re-clocking的部分支持,只能達到閉源驅動的20%40%的性能。

另外,GTX650只相當於A卡中的HD6770,不考慮購買。

5.4.   A卡的開源驅動和閉源驅動性能比較(目的:A卡開源驅動進展是否樂觀)

phoronix 201434日進行的測試如下:

http://www.phoronix.com/scan.php?page=article&item=amd_radeon_trusty&num=1

結果顯示:

基於不同平臺,Windows8.1Linux的閉源驅動性能差不多;基於相同的Linux平臺,HD5000/6000的開源驅動性能接近閉源驅動,HD7000及以上顯卡的開源驅動性能差得比較遠。


phoronix 2014727日的文章《Open-Source AMD Users Report Hawaii GPUAcceleration Is Working》如下:

http://www.phoronix.com/scan.php?page=news_item&px=MTc1MDU

結果顯示:

Hawaii(如R9 290XR9 290)的驅動據說可以工作了:提交內核補丁並更新了Hawaiimicrocode文件,使HawaiiGPU硬件加速可以正常工作。HawaiiA卡最新的架構,值得關注。

目前尚無數據。


phoronix2014729日的文章《Hawaii Bug-Fixes Start Hitting MainlineRadeonSI Gallium3D》如下:

http://www.phoronix.com/scan.php?page=news_item&px=MTc1MTY

結果顯示:

       AMD的開發人員728日向Mesa提交了一系列解決Hawaiiradeonsi驅動bug的補丁。另外,內核對Hawaii的支持要等到3.17,摘抄Labarel的評論:Open-sourceAMD Linux users wishing to use a Hawaii GPU will still need to utilize thepatches that will not be queued up until the Linux 3.17 kernel (along with updating their Radeon microcode files) but the RadeonSIGallium3D Mesa improvements are starting to hit the mainline tree. 

5.5.   A卡系列的開源驅動性能比較(目的:選擇哪款A卡)

phoronix2014723日進行的測試如下:

http://www.phoronix.com/scan.php?page=article&item=amd_r600si_linux316&num=1

對下面7A卡進行性能測試

-Sapphire Radeon HD 6770 1GB
-Sapphire Radeon HD 6870 1GB
-Sapphire Radeon HD 6950 2GB
- ASUSRadeon HD 7850 1GB
- XFXRadeon HD 7950 3GB
-Sapphire Radeon R7 260X 2GB
-Gigabyte Radeon R9 270X 2G

結果顯示:

HD6870的綜合性能最好,HD6950在少量OpenGL測試程序上表現得比HD6870略好(閉源驅動下,HD6950性能明顯比HD6870好一些);另外,radeonsi驅動還有很多工作需要做,最新的顯卡們(例如HD7xxxR9 200R7 200)的性能明顯不如幾年前的HD6870HD6950

另外,radeonsi對某些OpenGL程序不支持。見Larabel的評論:AMD GPU LLVM back-enderrors still prevented a number of the more demanding OpenGL games/benchmarksfrom running properly on the RadeonSI driver for the AMD GCN graphicsprocessors. 


phoronix2014623日的文章《Open-Source Radeon Performance BoostedBy Linux 3.16》如下:

http://www.phoronix.com/scan.php?page=article&item=linux316_radeon_boost&num=2

結果顯示:

3.16內核添加了一些列A卡的補丁,包括GPU VM optimizationslarge PTE supportHDMI deepcolor support HDMI audio clean-ups,以及其他bug-fixesGCN顯卡性能提升20%30%

3.16內核於201483日星期日正式發佈。


參考文檔

1.     顯卡命名規則

http://wenku.baidu.com/link?url=CfwJxaMvP-DT9iswPWQPnnwvGmEAFEtO72ognutGfOkNKHTLYpXTGCRrEdJEEn-TBOUgmKnw83A1b531H5MROz_cWt7FzG3xSg0NFeI58Ru

2.     Radeon

http://www.x.org/wiki/radeon/

3.     RadeonFeature

http://wenku.baidu.com/link?url=CfwJxaMvP-DT9iswPWQPnnwvGmEAFEtO72ognutGfOkNKHTLYpXTGCRrEdJEEn-TBOUgmKnw83A1b531H5MROz_cWt7FzG3xSg0NFeI58Ru

4.     Nouveau

http://nouveau.freedesktop.org/wiki/


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章