關於 Apple Metal API 的一些想法

2021-07-06 09:44:02 字數 1104 閱讀 4081

更方便和友好的多執行緒 gpu 渲染支援

gles 的設計,所有東西都必須跟乙個 gl context 繫結,由 gl context 內部所控制的狀態機驅使,而 gl context 又跟單個執行緒本身緊密繫結在一起,導致很難支援構建乙個良好的多執行緒 gpu 渲染架構,chrome 的解決辦法是在 gl 之上構建了一套 gl context 的 proxy 機制,proxy gl context 允許多個執行緒建立不同的例項,而每個 proxy gl context 內部使用乙個 command buffer 跟真正的 gl context 進行通訊和保持同步。

而 metal 在設計時就考慮了如何更好地支援多 cpu 執行緒同時「使用「 gpu,它的 command queue/command buffer 的模型雖然有點類似 chrome 的 proxy 機制,不同的 cpu 執行緒可以 encode commands 到不同的 command buffer,然後放入同乙個 queue 裡面等待 gpu 的真正執行。但是 metal 的這種內建的支援當然比 chrome 在 gl 上面的封裝來的更方便,易用和高效,也沒有那麼多限制。

gpu 渲染和計算的無縫整合(rendering and compute)

雖然 gles 未來也會支援 compute shader,但是能否做到 metal 這樣無縫的銜接(包括 command 的執行和資源的共享)就比較難說了。

統一的資源記憶體管理模型,允許 cpu 直接訪問 metal resource (buffer/texture) 的儲存記憶體,並設定了明確的 cpu/gpu 同步時機

雖然 gles 3 可以通過 pixel buffer object 支援一塊 gpu 控制的記憶體可供 cpu 直接訪問,但是畢竟限制太多,用途有限(另外也由於 gles 本身缺少良好的多執行緒支援)。而 android 的 graphicsbuffer 系統/硬體相容性問題成堆,效能參差不齊,沒有明確的 cpu/gpu 同步時機,也只能用於特定場景。

簡而言之,metal 讓 cpu/gpu 之間的協作更緊密和高效,允許 cpu 通過更多方式,更靈活地使用 gpu,把更多的任務交由 gpu 來完成。

大約 Apple Metal API 一些想法

更方便和友好的多執行緒 gpu 渲染支援 gles 的設計,全部東西都必須跟乙個 gl context 繫結。由 gl context 內部所控制的狀態機驅使,而 gl context 又跟單個執行緒本身緊密繫結在一起,導致非常難支援構建乙個良好的多執行緒 gpu 渲染架構,chrome 的解決的方...

關於程式關於世界

首先,在學了1年多的軟體設計的基礎上,問下自己 程式是什麼?業務需求是什麼?程式有什麼用?什麼是演算法?什麼是資料庫?或許每個人的理解不同,會給出不同的答案。那麼自己的理解 程式是乙個讓計算機工作的流程,在程式寫好之後,計算機就會按照,程式設計師定義好流程在執行。其實很多時候,乙個程式的好壞,在於乙...

關於血液關於軟體

1 自然沉降法 將血袋垂直吊掛於4 2 冰箱內,使紅細胞自然下沉1 3d,或將血袋呈70 80 角立於冰箱,需用時,用一次性分漿器分出血漿,制得濃縮紅細胞。2 洗滌法 一般用生理鹽水反覆洗滌3 6次。經洗滌的紅細胞,除白細胞和血小板減少外,血漿蛋白也極少,紅細胞中殘存的血漿蛋白含量約為原總蛋白的1 ...