Metal® Programming Guide Tutorial and Reference via Swift-翻譯

Metal®

Programming Guide

Tutorial and Reference via Swift-翻譯

這本書是如何組織的

在本書中,我們將討論Metal編程框架。該框架有兩個組件:圖形和計算。本書概述了在Metal中創建有用的特定代碼實現所需的概念。本書的開頭是基礎章節,解釋了您需要理解的概念,以便與後面的章節一起使用。可以試圖直接跳到神經網絡的最後章節,但是那些章節假設你已經閱讀了大多數之前的章節,如果你沒有粗略地理解這些概念,那就沒有意義 - 早些時候。
第一部分“金屬基礎知識”介紹了金屬和圖形概念的介紹。
第1章,第2章和第3章與您在網站或會議上的入門金屬教程中發現的大部分內容相關。在第二部分“渲染和圖形”中,您將進入更多特定於圖形的庫和概念。
第4章到第14章涵蓋了特定的金屬類,數學和金屬着色語言的介紹。其中一些章節適用於圖形和數據處理,這將在第三部分“數據並行編程”中討論。第III部分向您介紹了Metal計算管道。
第15章到第20章詳細介紹了Metal計算管道,並概述了GPGPU編程的實際應用。
以下是每章的簡要說明。第一部分重點介紹金屬圖形編程的歷史和基礎:•第1章“什麼是金屬?”,概述了金屬編程和圖形編程的歷史。它還解釋了本書的範圍。•第2章“渲染和柵格圖形概述”詳細介紹了Metal渲染管道在引擎蓋下的工作原理。本章將介紹所有部件如何連接在一起。•第3章,“您的第一個金屬應用程序(Hello,Triangle!)”,提供了一個簡單的項目,向您介紹使最基本的Metal項目啓動和運行所需的所有Metal對象。前言

前言 第二部分介紹了在iPhone上實現3D圖形所需的金屬渲染管道和概念。
•第4章“圖形基本數學”,重新介紹了着色器編程中使用的數學概念。對於沒有使用TI-83至少10年的讀者來說,本章是一個溫和的複習,但它應該對任何人都有用。
•第5章“着色器簡介”將指導您實現稍微複雜的着色器。本章將幫助您瞭解如何將其他語言的算法和着色器適用於您的應用程序。
•第6章“金屬資源和內存管理”介紹了MTLResource對象以及它們如何用於內存管理。
•第7章“庫,函數和流水線狀態”說明了如何由CPU編譯和訪問金屬着色器。
•第8章“2D繪圖”比第3章更進一步,並對創建2D應用程序所需的對象進行了更深入的解釋。
•第9章“3D繪圖簡介”概述了3D圖形編程概念。
•第10章“高級3D繪圖”介紹瞭如何將這些3D圖形概念應用於Metal應用程序。
•第11章“與模型I / O接口”探討了Apple從Blender和Maya等程序導入3D模型和資產的框架。
•第12章“紋理和採樣”介紹如何導入紋理並將其應用於模型對象。
•第13章“多通道渲染技術”詳細介紹瞭如何在不破壞性能的情況下實現計算量更大的渲染技術。
•第14章“釋放的幾何學:金屬中的鑲嵌”討論瞭如何利用鑲嵌來利用不太詳細的網格。

第三部分介紹瞭如何將GPU用於通用計算,特別是圖像處理和神經網絡。
•第15章“金屬計算流水線”,詳細介紹了計算編碼器與渲染編碼器的不同之處以及如何設置數據並行金屬應用程序。
•第16章“金屬中的圖像處理”介紹了一些基本的圖像處理概念。
•第17章“機器視覺”以前一章中介紹的創建計算機視覺應用的基礎概念爲基礎。
•第18章“金屬性能着色器框架”詳細介紹了金屬性能着色器框架中存在哪些對象,以實現圖像處理和線性代數。
•第19章“神經網絡概念”解釋了神經網絡是什麼,並概述了構建神經網絡所需的組件。
•第20章“卷積神經網絡”教您如何利用金屬性能着色器構建卷積神經網絡圖。
示例代碼在整本書中,提供了許多代碼示例https://github.com/yuntiaoOS/Metal-Programming-Guide

第一部分:Metal Basics

第1章“什麼是金屬?”

這是我們的舊模型必須被丟棄和新的現實規則的一點。-Vernor Vinge2014年,Apple爲iOS推出了新的低級GPU編程框架:Metal。一年後,Metal來到macOS,其次是watchOS和tvOS。 Apple設備有兩個“大腦”,可以編程創建應用程序:中央處理單元(CPU)和圖形處理單元(GPU)。 GPU是一種專用處理器,可以非常快速有效地並行執行浮點數學運算。這些任務在CPU上是昂貴的,因爲它們不能並行完成,因此已經創建了各種框架和API來將這些昂貴的任務卸載到最適合執行它們的處理器。浮點數學是圖形編程不可或缺的一部分,但事實並非如此唯一的應用程序。非圖形GPU編程被稱爲通用GPU(GPGPU)編程。較早的圖形範例,例如OpenGL,是在GPGPU編程可行之前開發的。 OpenGL在iPhone的前5年就足夠了,但隨着它變得越來越強大並且更多的任務成爲可能,它也在不斷髮展。

圖形API的歷史

三維計算機圖形可以追溯到20世紀60年代和70年代。 James Blinn和Edwin Catmull等先驅者的工作爲今天的許多創新鋪平了道路。但計算機圖形學在20世紀80年代和90年代的家庭計算機革命之前並沒有普及。在20世紀80年代,編寫跨平臺軟件非常困難,特別是對於遊戲。每臺計算機和視頻遊戲系統都有自己專有的硬件和軟件驅動程序。每次要在新設備上發佈軟件時,都必須編寫特定於設備的驅動程序,軟件和用戶界面。這項工作是重複的,在很大程度上是不必要的1981年,Silicon Graphics(SGI)公司成立。它製造了高性能的3D工作站。像所有其他3D工作站製造商一樣,它擁有自己專有的3D圖形API,稱爲IRIS GL。它在20世紀80年代的大部分時間裏佔據了市場主導地位,但到了20世紀90年代初,它的市場份額已經受到侵蝕。 1992年,爲了防止市場份額進一步受到侵蝕,它開放了IRIS GL API並將其重命名爲OpenGL。直到1997年,OpenGL才成爲事實上的3D圖形API。由首席程序員John Carmack領導的視頻遊戲公司idSoftware開發了其最暢銷的視頻遊戲Doom的後續產品。它被稱爲Quake。每個遊戲平臺都渴望在其平臺上添加Quake端口。 Carmack不希望爲市場上的各種硬件和操作系統編寫獨特的驅動程序,因此他選擇OpenGL作爲標準。他告訴製造商,如果他們不支持OpenGL,他們就無法將Quake移植到他們的平臺上。製造商遵守並編寫了支持OpenGL的驅動程序。由於每個製造商都完成了支持OpenGL的工作,許多遊戲開發人員開始專門支持OpenGL,因爲他們知道它可以在每個平臺上運行。瞧!一個行業標準誕生了。2004年,OpenGL 2.0發佈。這是OpenGL的重大進步,因爲它引入了OpenGL着色語言。這個 C-like

語言允許程序員爲GPU編寫程序並修改可編程管道的轉換和片段着色階段(見圖1.1)。當着色器被添加到OpenGL時,API開始變得相當苛刻。 當OpenGL最初發布時,GPU並不是特別強大。 他們無法處理很多工作。 最初的OpenGL API旨在將儘可能多的工作推送到CPU,因爲GPU是一個瓶頸。 當着色器被宣佈時,這種限制發生了巨大變化。 GPU越來越強大,執行任務的許多原始方式都非常低效。 隨着時間的推移引入了新的方法以適應這種新的現實,但舊的方法從未從API中刪除。 有多種方法可以執行相同的任務,有些方法比其他方法更有效。

2003年,OpenGL的精簡版本發佈:OpenGL ES。 OpenGL ES是OpenGL的一個子集。它刪除了所有舊的,苛刻的實現,這些實現不再是向GPU分配工作的最佳方式。它是爲嵌入式設備開發的,例如視頻遊戲控制檯和智能手機,但任何用OpenGL ES編寫的程序都可以在使用OpenGL的程序上工作,對着色器進行一些小的修改。 2007年,OpenGL ES 2.0發佈。此版本包含着色器和可編程管道。也是在2007年,第一款iPhone發佈了。第一個iOS SDK中提供的圖形框架和API非常有限,但iPhone確實支持OpenGL ES。大多數想要爲遊戲和應用程序採用複雜圖形的開發人員必須在OpenGL ES中編寫所有內容。許多擁有多年使用OpenGL經驗的程序員能夠在SDK處於起步階段時爲iPhone創建複雜的圖形。 2010年,Apple開始在iPhone上支持OpenGL ES 2.0以及可編程着色器。多年來,Apple在iPhone上開發了更高級別的圖形抽象:Sprite Kit,Scene Kit等。但是如果你想直接編程GPU,你必須使用OpenGL ES。你也被限制爲GPU編程圖形。您無法將GPU用於通用編程,也無法利用Apple與其他框架緊密集成的硬件/軟件。 ​

Metal: 在Apple平臺上進行圖形處理的新方法

今天,我們口袋裏裝着超級計算機。 iPhone正在接近我們許多筆記本電腦的計算能力。即使擁有所有這些額外的功能,我們仍然受到OpenGL API的限制。因爲OpenGL必須適應GPU和CPU的所有組合和變體,所以它永遠無法充分利用Apple對其所有產品的深度集成。 Apple確切地知道它將用於GPU編程的芯片,並且可以優化框架以專門和直接使用該芯片的特性。除了通過控制整個製造鏈現在可能實現的深度集成之外,OpenGL還存在一些結構性問題,導致它無法實現高效率。計劃在每次繪製調用時發生許多昂貴的操作,這些操作不需要。通過改變操作順序並在繪圖調用之外移動昂貴的工作,Metal可以釋放更多的處理器帶寬。通過讓程序員完全控制他們如何使用GPU進行工作,可以進一步釋放帶寬。

平衡CPU和GPU之間的工作

CPU和GPU工作在偏移量。 CPU爲GPU準備命令,然後將它們發送到GPU。雖然GPU正在處理它收到的命令,CPU正在準備下一批命令。在圖形編程中,您有責任平衡CPU和GPU之間的工作負載。從CPU到GPU的批處理和發送工作在時間上是昂貴的。發送GPU的工作量越多,花費的時間就越多。在傳統的OpenGL應用程序中,很多時候,這種偏移並不是完美平衡的。通常,CPU無法向GPU發送足夠的工作以使其在整個幀中保持忙碌,因此GPU處於空閒狀態,如圖1.2所示。金屬增加了這種偏移的效率

GPU可以用於其全部容量。 通過消除在CPU和GPU之間複製內存的需要,可以實現部分提高效率。

複製內存

簡書內容字數限制,下面有連接地址

主要是應爲Metal的系統性介紹書籍比較少(一般都是英文的)

所以直接用Google翻譯直譯過來的,英語好的可以幫修改一下,順便傳我一份,謝謝!


鏈接:https://pan.baidu.com/s/18zReM0HLf3bPRkzzJhZoIw 密碼:r3yq

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章