AMD先前推出自行開發的Mantle API,號稱能帶來更高的運算效率,但它不同於常見的DirectX與OpenGL具有跨平台能力,AMD只准許自家推出的顯示卡與APU使用 Mantle。然而對於Microsoft與Khronos Group推出的下一代繪圖API DirectX 12與Vulkan,AMD並沒有表示將以Mantle與其競爭,反而看上DirectX 12的優勢,進而陣前倒戈。
強化多核心處理器效率
在AMD先前的發表會上,提到了DirectX 12最主要的功能之一,就是強化指令緩衝區(command buffer)的多工效率。在繪圖工作中,指令緩衝區可以視為處理器的工作列表,記錄了處理器在繪製3D場景時需要執行的工作,然而在其中的許多部分不適合進行平行運算,仍然需要倚靠順序運算,所以對於這類型的工作來說,處理器的執行效率會比顯示卡來得好。
但是另一個問題來了,在DirectX 11以及之前的繪圖API,並無法有效發揮處理器的多工能力,大多還是只使用其中少數核心。為了改善這個狀況,DirectX 12將會大幅強化多工能力。
DirectX 12的指令緩衝區支援多執行緒,意味著每個處理器核心(以及支援Intel超執行緒的邏輯處理器核心)都能獲得更有效的利用,讓驅動程式以及API的工作負載能夠更平均地落在各個處理器核心上,藉以消除將負載集中於少數處理器核心上所造成的效能瓶頸。
▲AMD提到許多DirectX 12帶來的優勢,最主要的項目之一就是強化處理器多工效率,進而可以帶來更流暢的遊戲體驗。
▲藉由提高處理器多工效率,遊戲程式能以更快的速度在相同硬體下完成工作負載,所以對於提高遊戲的幀數有一定的幫助。
解開封印非魔術,顯示卡也很重要
從AMD釋出的資料來看,範例中的八核心處理器在執行DirectX 11程式時,1號處理器核心的工作量相當吃重,尤其是DirectX執行環境(DirectX runtime)與驅動程式的負載,幾乎都是集中於1號處理器核心,而7號與8號處理器核心幾乎是處於閒置狀態。
改用DirectX 12之後,遊戲本身的程式負載還是以1號處理器核心最主,但是DirectX執行環境與驅動程式的負載平均分配到8個處理器核心上,能夠減輕成為效能瓶頸的1號處理器核心的工作量,提升整體效能。在這個範例中,可以讓每幀的繪製速度29ms縮短到15ms,如果換算成FPS,就是從34幀提升到66幀。
在另一張投影片中,AMD展現了DirectX 11與DirectX 12在繪圖命令(draw call)上的表現。範例中的DirectX 11平台需要消耗91W電力換取521,221個繪圖命令,然而在DirectX 12平台中,84W電力就可以獲得2,793,226個繪圖命令,不但耗電量微幅下降,繪圖命令數量更是飆升至原本的約5.26倍。
不過要注意的是,繪圖命令並不代表實際的效能,充其量只能代表繪圖工作的前半段處理完成,而後半段還需要視顯示卡本身的繪圖效能,是否能吃下這麼繁重的工作量。不然光是發出大量的繪圖命令,顯示卡根本無法負擔的話,最終的FPS表現也還是會受限於顯示卡效能瓶頸。
筆者先前曾撰文探討顯示運算的效能表現與繪圖命令的關係(文中以運算呼叫稱呼),可以看出NVIDIA對AMD「宣稱效能」提出的挑戰,而這次AMD釋出的資料也都是具有宣傳色彩的官方資料,並不一定能反應出實際的效能表現。在DirectX 12正式推出、有實際遊戲效能測試出爐之前,我們似乎也只能「參考」廠商的說法,唯一能確定的就是,Mantle應該會隨著DirectX 12正式推出而退出舞台。
▲八核心處理器在執行DirectX 11程式時,幾乎所有工作都集中在1號處理器核心。(圖中紫色部分為遊戲本身運算所需時間,紅色為DirectX執行環境運算所需時間,藍色為驅動程式運算所需時間,綠色為顯示至完家所需時間。)
▲改用DirectX 12之後,程式負載比較平均,讓每幀的繪製速度29ms縮短到15ms。
▲在官方資料中,提到DirectX 12可以將繪圖命令效能提升至原本的約5.26倍。但是這並沒有太多實質意義。
延伸閱讀:
DirectX 11.2 三大新功能上陣,Mantle 榨乾硬體潛能
請注意!留言要自負法律責任,相關案例層出不窮,請慎重發文!