大約 Apple Metal API 一些想法

2021-09-07 00:21:14 字數 1279 閱讀 1586

更方便和友好的多執行緒 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 的解決辦法是...

最大約數和

題目 題目描述 選取和不超過s的若干個不同的正整數,使得所有數的約數 不含它本身 之和最大。輸入格式 輸入乙個正整數s。輸出格式 輸出最大的約數之和。輸入輸出樣例 輸入 1 輸出 1 說明 提示 樣例說明 取數字4和6,可以得到最大值 1 2 1 2 3 9。資料規模 s 1000 思路 把它當做0...

長大約跑系統

一 程式設計任務 體系結構環境圖 2.體系結構圖 3.構件結構圖 二 心得 在本次開發中,我們採用scrum敏捷程式設計來完成此次任務,在團隊合作的時候提高了團隊的協作能力,scrum敏捷開發跟傳統的開發方式比較起來,很明顯,scrum敏捷開發更好,在開發過程中,我們可以通過一次次的迭代來發現問題,...