如何評價蘋果在 WWDC 2017 更新的圖形 API Metal 2?

更多 WWDC 2017 相關討論請點擊: WWDC 2017


Metal 2名字上是圖形API更新,實際上更多是整個stack的優化。目前來說公布出來的主要API改動是Argument Buffer, Raster Order Groups和把Heap弄上了macOS。

順道一體,到10.13絕大部分系統核心/App都已經從OpenGL轉到了Metal。

具體改動參照Metal 2 - Apple Developer 以及周二到周四的各個Metal相關的講座。

Argument Buffer

更加厲害版本的Bindless。簡單來說就是把要用上的資源(texture/buffer)先encode到一個專用的buffer上,這樣就免去了每次draw command之前要先做texture/buffer binding,節省CPU時間。如果資源來自於heap (這個版本把macOS的heap加上了),那麼驅動基本連resource tracking都不用做了,進一步節省CPU時間。

  • buffer內支持Array,這樣利用instancing可以一個drawcall用上無數不同的資源(Tier2最大支持500000個不同的resource)。比如

    struct MyCharacter { texture2d& diffuse; }
    fragment float4 fragment_shader( MyCharacter* character [[ buffer(0) ]], int iid [[ instance_id ]])) { ... }

  • 支持GPU encode,比如一個compute pass可以直接寫argument buffer,進一步避免CPU操作
  • 支持嵌套,比如一個argument buffer裡邊放另外一個。

Raster Order Groups

允許顯式指定Raster Order,可以用來做custom blending, OIT之類的。

VR / External GPU

API層面上沒啥改動,主要MTLDevice加上了是否是eGPU以及一些和eGPU相關的熱拔插事件。這部分主要是驅動/Window Server的內部改動。以及和Valve/SteamVR合作把一些tracing和GPU capture相關支持加進去來支持Debug。

ProMotion Display / Direct to Display

這個不光是120hz的顯示屏,API意味上支持arbitrary presentation time。比如可以搞出穩定的48fps。

對於全屏應用,支持直接present to display,繞開compositor獲取更高的GPU利用率。

MPS

MPS去年發布的iOS版,今年移植上macOS,以及加了一些新的ML / NLP方面的東西,並且進一步在驅動層面上作為優化效率。

Tools

我們組的部分。今年主要幾個目標是提升Capture速度(以前實在太太太太太慢了),加入一些Performance Debug相關的工具,以及UI優化。

以下談到的都會在周四的 Metal 2 Optimization and Debugging 有具體介紹和Demo。

  • 我負責的,能夠在CPU斷點預覽texture/buffer/sampler。這樣就不用連想看看texture長什麼樣都做個GPU capture了。並且buffer預覽包括了所有的layout信息 - 也就是傳進去的是float4x4,顯示出來的是一個format過的float4x4,而不是16個float。

  • 我和另一個同事負責的,GPU Counter Profiling。
    目前支持AMD,Intel,NV和iOS (beta-1中NV因為來不及暫時被幹掉了)

    這裡的Counters並不是來自於各家Vendor非常底層而且不統一的Raw Counters。為了這個我們定義了一套衍生出來的Counter List,然後壓迫各家Vendor去實現,來降低學習成本。當然由於硬體架構問題實際上在不同硬體上的Counter List還是有微妙的不同,但是絕大部分都是統一的。

    統一的Counter List的另一個好處就是我們能基於這些Counter跑淺性能分析,來幫助普通的開發者debug一些常見的性能瓶頸。比如跑某個drawcall的時候texture unit stall非常高,結合frame capture已有的信息(用到的texture/buffer/state...),我們能直接給出大概的hotspot在哪裡。這樣就算對GPU不是十分熟悉的開發者,也能解決通過Counters解決一些比較常見的性能問題。

(左邊是Visualization,右邊是Excel(誤。截圖來自一個稍老的trace,實際上Counter數量要多很多

  • Pipeline Statistics
    這個主要目的是給出基於Pipeline(Shader)的統計信息,以及潛在的性能瓶頸。比如各個Stage的Shader用到了多少FP32 / FP16, fetch, control指令等等,可以和上邊的Counter Profiling以及Shader Update Continue搭配使用。

    和Counter Profiling類似,這個也直接提供了潛在的性能瓶頸分析。比如某個Shader有compiler spill,會直接告訴用戶是在哪一行會有spill,以及大致上的原因。配合上Shader Update Continue就可以一邊改shader,一邊看performance/性能瓶頸分析是如何變化的。

  • Buffer Viewer加上了Vertex Output / IAB支持,如果用到了IAB的話能夠在Buffer Viewer里看到texture預覽,以及直接跳轉用到的texture/buffer。
  • 給API加上了MTLCaptureManager MTLCaptureScope, 用來支持比如capture很多幀,或者某3幀才會跑一次的update。也加上了對純Compute的支持。
  • 總算加入了一個十分厲害的Pixel Inspection。
  • UI和Workflow上有不少改動,比如左邊換到右邊之類的。


我比較期待的是,這個新的更新是不是足以讓暴雪出一個MAC版本的OW。


看到metal2有機器學習加速,猜測是不是能起到替代cuda的作用。畢竟mac現在全家都是AMD,沒cuda用也很絕望啊。(不過metal2支持外接gpu是不是能外接N卡跑cuda了。。。)


只求 iTunes 能在 HiDPI 模式下在所有功能介面當中跑滿至少 60fps。

這個問題,五年了,再不解決的話,欸。


太太太太失望了,居然不叫 Heavy Metal.


想吐槽一下蘋果的開源策略。前兩年號召大家要支持開源的open cl 現在又開始推除了蘋果OS沒別人用的metal API。這算不算別人做的我都要用,我做的誰都不能用?


推薦閱讀:

影視渲染和遊戲渲染的區別?
斐波那契數列 費馬螺旋 如何在AI畫出向日葵生長規律圖形?
遊戲里的萬人同屏是如何優化?
你如何看待 Google 推出的新圖形渲染技術 Seurat?
如何繪製隱式方程?

TAG:蘋果公司AppleInc | 計算機圖形學 | WWDC17 |