分享轉貼對岸小編寫的文章。
來源:http://tech.163.com/15/0904/23/B2N5KO0L000915BF.html
我直接引述簡翻繁,只擷取部份的談論的文字就好,要看完整的文章可自行連結看。
一家叫Oxide Games的遊戲開發公司於不久前放出了全球首份A卡(AMD顯卡)和N卡(英偉達顯卡)的DirectX 12(後簡稱DX12)遊戲性能測試。不過測試的結果一度令很多媒體和用戶都大感吃驚。
其中,最令人驚訝的並不是A卡因為DX12而“煥然一新”,而是相比之下,英偉達的9xx系列旗艦卡卻因為用了DX12,反意外出現“性能倒退” ——沒理由啊!DX12可是號稱“更接近硬件底層”的API(編程接口),能更高效地調用硬件資源,因此性能表現只會比早期版本的DirectX更好——這是業界的共識,包括英偉達自己也如此承認!
可是,測試的結果確實沒有符合英偉達預期,公司方面也遲遲未作出解釋。迫切希望知道答案的用戶只好紛紛給出自己的猜測:一,這只是一款尚未正式發布的DX12遊戲,可能還未成熟;二,兼容DX12的驅動尚未完善,英偉達如此,AMD也是如此;三, Oxide Games是一家AMD支持的遊戲開發公司,從之前的Mantle技術合作就能得知,所以測試結果有偏向性,不具公信力……
其實,第一和第二點猜測都還能被認為是合理的解釋,但唯獨這第三點——質疑一家AAA遊戲開發公司的專業性——那可就觸及紅線了。
於是,Oxide也終打破沉默,將自己在開發過程中一直通過郵件與英偉達保持交流的事實公開……將英偉達一直有權訪問遊戲源代碼的事實公開……甚至將英偉達在發現測試結果不合預期後,數次施壓並要求屏蔽DX12某項核心功能的事實也公開……尤其是在屏蔽DX12核心功能ACE(Asynchronous Compute Engine,異步計算引擎,後半段將有詳解)這個問題上,Oxide更是直言不諱地指出——英偉達第二代Maxwell架構(9xx系列GeForce)根本就不支持ACE,至少是無法做到“原生支持”(Native Support)。
面對這樣的指控,英偉達用戶(除了超級粉)可真坐不住了——不支持DX12最核心功能之一的ACE,豈不就等於不支持DX12嗎?於是,國外主要科技論壇,包括Anandtech、Guru3d以及Reddit等,有關話題的跟帖迅速破千,大量用戶開始聲討英偉達,要求官方必須給出解釋。
然而,英偉達的官方聲明還沒等到,AMD的全球技術營銷主管Robert Hallock卻出現在Reddit上“添油加醋湊熱鬧”。
Hallock先是表示,自己在看到Oxide的測試成績後也有過類似懷疑,即:Maxwell架構是通過“環境切換”(context switching)的方式來實現ACE的,此方法效率極低,因此無法做到真正意義的“異步計算”(文後解釋,看不懂不要急)——這言下之意就是,N卡的DX12是殘缺的,至少在ACE這個功能上沒有做到“完全支持”。
不得不說,這是一次成功的“火上澆油”,只不過火勢蔓延太快,連Hallock自己都有些驚惶不安——N粉和A粉在Reddit論壇上即刻展開對撕,場面一度有些失控。情急之下,Hallock只好補上一句:“沒有誰家的產品能完美支持DX12,英偉達如此,AMD也是如此”——希望能藉此為整個事件打個圓場……再然後,我們就看到了《AMD:當前沒有什麼可完美支持DX12》的新聞充斥在各大科技媒體的頭條……
AMD和英偉達的恩怨其實不是小編要在這裡講述的內容,如果A粉和N粉要對撕,請三思後繞道而行。接下來,小編將花些篇幅講解DX12的技術細節,其中包括本文一再提到的ACE的概念,因此可能會很乏味,不喜者可忽略之。
DirectX 12的技術淺析
大談專業技術內容通常不會獲得網友的理解,所以小編在此會盡量簡化細節,一些不恰當的比喻還望專業人士指正。
DX12與以往任何版本的DirectX都不同。這種不同並不在於提供了更多的功能性特效,譬如光影特效、水波紋特效等,而是在於將實現這些特效的方法放到了GPU的硬件層去執行,正所謂“DX12是低級別API ”的原因。注意,這裡的低級和高級並不指“好壞”,級別越低,代表越接近硬件底層,因此執行起來效率高,但編寫時代碼特別長。
因為把“功能下放到硬件層”去實現,DX12自然就會對GPU的硬件規格(或者說資源規模)有要求,因此我們又看到了微軟根據GPU能提供的硬件資源規模,對每一項DX12的功能都給出了Tier 1、Tier 2和Tier 3三個級別分類,以表示該GPU對該項特性的支持程度(級別越高表示支持越好,但級別低也算是支持)。
聽起來有點拗口難懂?沒關係,我們換個角度來簡單說明一下。不管AMD還是英偉達,在一顆GPU上能使用的晶體管總數是有限的,所以想要把有限的資源“完美”分配給每一項DX12規範的功能,幾乎是不可能完成的任務(當前技術下)。這就好比我們只有3000元來配置新電腦,是買好一點的CPU,還是好一點的顯卡,還是大一點的硬盤,還是快一點的SSD?這都需要進行取捨,而取捨的結果將會決定該電腦擅長的領域,譬如較好的顯卡有助於提升遊戲性,大容量硬盤則可用於專業的NAS服務等。
那麼,AMD和英偉達又各自做了哪些取捨?
AMD從第一代GCN架構開始,將大量的晶體管投入到了實現Asynchronous Compute Engine(異步計算引擎)上。所以,A卡號稱擁有64+1個完整的ACE。
相比之下,第二代的Maxwell架構將大量晶體管用在了實現Conservative Rasterization(保守光柵)和Raster Ordered Views(光柵順序視圖)兩項功能上。因此,N卡的ACE只有31+1個——注意,這只是官方數據,其真實性還有待考證,這也正是引出本期《易評》的焦點所在。
(這邊我補充有比較詳細的功能分別表,AMD也有NVIDIA沒有的DX12其他的兩個功能,但也是"選用Optional"功能)
http://www.overclock.net/t/1567968/...s-and-resources
當然,以上只是一部分晶體管的分配情況和一部分DX12規範下的功能。但也就這一小部分差別,今天在互聯網上引發了劇烈的質疑和討論。
AMD說自己也不完美支持DX12,其所指正是上述的Conservative Rasterization和Raster Ordered Views兩項功能。此兩項功能在DX12標準下為“可選擇項”,是不要求必須實現的。不過,英偉達已經支持了,儘管有的只是Tier 1的支持(AMD兩項均為零支持),所以微軟又制訂了DX12.1規範,即下個升級版的DX12將會開始要求支持Conservative Rasterization和Raster Ordered Views——這也是為什麼英偉達一直標榜自己產品是DX12.1標準的原因。
不過諷刺的是,ACE可是DX12規範下必須支持的核心功能。英偉達在宣傳中號稱支持該功能,但實際測試卻發現,所謂的支持可能僅僅是通過“驅動層模擬”(emulated)來實現的,而並非是大家所期待的架構層原生支持。除了Oxide和AMD先後提出相關質疑外,beyond3D論壇上的專業網友也通過多次針對性測試得到了類似結論——特別值得一提的是,此前GTX 970被曝出的“只有3.5GB有效顯存”的問題,也是經過beyond3D網友多次測試後發現。
根據這些網友和專業人士的解釋,英偉達實現ACE的方式應該是依賴了大量Preemption(搶占式多任務)和“環境切換”操作。簡單地說,就是GPU在進行異步計算時,需要先暫停當前正在處理的任務,以騰出資源來處理優先插入的數據。這一過程,通常會產生大量的閒置(Idle)。同時,“環境切換”在存儲和重建任務上極為低效,這更進一步增加了處理的延遲。
換用更通俗一點的比喻來說,英偉達實現ACE的方法就好比有交通燈的大道,側道車輛如果要併入主道,主道車輛就必須先停下來,並等待紅燈再次變綠。相比之下,如果是從架構層實現ACE,就相當於在一條自由寬鬆的高速公路上,讓車輛自由併入主幹道,整個交通無需通過紅綠燈來控制。
英偉達這種通過“驅動模擬”實現的ACE到底算不算真正支持?目前還沒有一個權威定論。不過小編在這里大致說一下DX12是如何“弱化”驅動的,然後大家自己就會有答案了。
傳統高級別API下,一款遊戲或者一個3D繪圖應用在調用Draw Calls時(可理解為向GPU發出指令讓其在屏幕上繪出一個或多個指定圖形)通常會經歷以下過程:來自應用程序的指令先是被“翻譯”給DirectX,然後再被“翻譯”給顯卡驅動,再然後還要“翻譯”給系統內核接口,最後才“翻譯”給GPU去執行……整個過程冗長且低效,但好處是“顯卡驅動”可以有很大發揮空間——“AMD驅動不如英偉達,尤其是遊戲表現上”的說法就是來自於此了。
DX12出現後,所有中間層的“翻譯”工作就被取消了,遊戲開發商可以直接通過API與GPU進行溝通。這不僅只是效率高了,開發者自由發揮的空間也大了(任意分配GPU資源到需要的地方),然而缺點是使用難度也提高了。
那麼,會不會出現遊戲開發者抵制DX12,或者遲遲不用DX12的現象?可能性極低。因為“低級API”一直是遊戲開發社區所呼籲的,當年DirectX的低效和復雜已被太多人詬病。遊戲主機曾經之所以風靡,部分原因就是因為開發環境的友好和高效成就了大量的經典。更何況,DX12正是一款衍生自遊戲主機平台的API接口。
技術部分談完了,英偉達第二代Maxwell是否算支持DX12的架構,恐怕每個人心中都有不同的答案。