可編程解決的是什么問題呢?主要是靈活性問題。早期的顯卡架構以固定功能硬件為核心,將圖形學中的渲染流程分解為多個固定階段,并為每個階段設計專門的硬件模塊。這種設計雖然高效,卻也限制了開發者的靈活性,因為程序員只能利用顯卡廠商提供的預設功能,按部就班地完成渲染任務,無法實現更或個性化的效果。
隨著3D游戲快速發展,開發者對更復雜的光照、陰影、紋理映射等效果產生了需求,之前的完全硬件固化的渲染管線就顯得不夠靈活了。于是,可編程渲染的想法應運而生,就是讓開發者直接參與顯卡渲染流程的控制,設計個性化的圖形效果。為了應對這種技術趨勢,英偉達做出了一個意義重大的決定:讓顯卡從傳統的固定管線升級為支持可編程著色器的架構。這個決定好比把傳統自動咖啡機升級為一個開放式的咖啡機。傳統的咖啡機只能做固定的預設飲品(如拿鐵、美式),而開放式的咖啡機允許用戶自定義制作咖啡的方式,比如選擇咖啡豆量、控制研磨時間以及調整牛奶或水的比例。
可編程著色器也是類似的道理,游戲開發的程序員能更自由地利用顯卡的強大計算能力實現自己想要的渲染效果。然而,引入可編程的著色器意味著必須犧牲利潤以建設基礎設施,而且,不一定有太多游戲開發者采用。但英偉達當時的技術專家戴維·柯克極力勸說黃仁勛必須支持可編程著色器:“要干這個,短期內會增加一些成本,但隨后,人人都會渴望擁有它,人人都想追趕我們。”黃仁勛起初對此持懷疑態度。然而,當他開始權衡不引入著色器的潛在成本時,他逐漸被說服。
從2001年起,英偉達開始逐步引入支持可編程著色器的顯卡芯片。這些顯卡允許程序員對頂點著色器、片段著色器(Fragment Shader)和幾何著色器(Geometry Shader)等編寫程序,以控制渲染流程的每個階段。我把他們發布的產品年表放在文稿里,感興趣的朋友可以查看。
-2001年,NVIDIA GeForce 3X是第一款支持可編程頂點著色器的芯片。-2003年,NVIDIA發布GeForce FX,繼續增加了可編程的像素著色器模塊。此外,頂點著色器增加了分支控制能力,同時支持靜態和動態流控制。-2004年,伴隨著NVIDIA GeForce 6X的發布,頂點著色器和像素著色器都實現了完全的可編程性。-2006年,NVIDIA發布了GeForce 8系列,這是首個支持幾何著色器(Geometry Shader)可編程模塊的顯卡。從1999至2006年的7年間,英偉達終于把多個可編程模塊集齊,使得他們的顯卡成為首個支持多種3D渲染語言的架構平臺。這進一步極大地提高了顯卡的靈活性,能設計出更加復雜和個性化的3D圖形效果。
然而,這種可編程的靈活性不是沒有代價的。且不說額外的成本,單讓開發者使用都不是一件容易的事情。為了讓更多人能用上可編程顯卡,英偉達在2002年推出了專門的3D編程語言——Cg,全稱“C for Graphics”。他們還開發了一本《Cg教程》,手把手教你怎么用Cg做出各種炫酷的圖形效果。但是,盡管工具和教程都有了,學習成本還是太高。圖形開發本身就涉及復雜的數學原理,再加上要學新語言,推廣起來很困難。英偉達在這一時期的股價一度低迷。
![]()
黃仁勛當時支持把固定管線變成可編程的主要原因,是為了滿足未來游戲開發者的個性化需求。但是他還有一個想法,就是“可編程”這種靈活性,可以讓那些游戲設計師之外的人也有機會使用英偉達的顯卡做些計算,從而為自己的產品找到新的應用場景。注意,這是一個后續影響很重大的想法。從2001年英偉達推出GeForce 3系列開始,一些科學家和工程師就開始琢磨:能不能用這些可編程顯卡來解決我們領域的計算問題?這就是后來所說的GPU通用計算(General-Purpose computing on Graphics Processing Units),簡稱 GPGPU。
在2003年,兩個研究團隊發表了兩篇重要論文,驗證了可以用某些方法對顯卡編程,解決矩陣相關的計算,并且速度可以比普通CPU要快得多。矩陣計算是諸多科學領域中的核心計算。很多復雜的數學模型、物理系統,或者處理大量數據的算法的底層原理,都可以用矩陣運算統一表述。舉個例子,像流體流動、熱傳導或電磁場這樣的復雜現象,會被轉化成涉及許多變量和方程的數學模型,而這些模型通常用矩陣來表示,再通過計算矩陣來找到問題的解。
為什么顯卡對于矩陣計算很適合呢?因為矩陣中的每個元素計算通常是獨立的,可以同時并行處理。而顯卡本來就是為了處理像素設計的,每個像素的處理也是獨立的,所以天然適合這種大量并行的任務。但有個問題,當時的顯卡完全是為圖形渲染設計的,要用來做矩陣計算得“曲線救國”。你得把矩陣計算任務包裝成渲染任務,最終,GPU輸出的“渲染結果”實際上就是你想要知道的矩陣運算的結果。
這就像你想用洗碗機洗蔬菜。洗碗機本來是洗碗的,但你可以把蔬菜裝在籃子里或小型篩網里再放進去,關掉洗滌劑,也能達到清洗的目的。然而,這種曲線救國的方式不僅效率不高,而且對開發者的要求極高。開發者不僅需要完全掌握能夠對GPU進行編程的應用程序接口(API,例如OpenGL、DirectX或者英偉達的那個Cg語言),而且需要對GPU的底層極為熟悉。那么,如何降低編程的難度,讓普通程序員更好地利用GPU來實現自己除了圖像渲染以外的任務,就是一個很重要的問題。2000年左右,斯坦福大學計算機圖形學專業的博士生伊恩·巴克(Ian Buck)也在思考如何將英偉達的顯卡用到其他領域的計算中。
他拿到了美國國防部的資金支持,組了個團隊,在2003年推出了“Brook”。Brook提供了更簡單的編程接口,把復雜的GPU圖形編程操作包裝成便捷的并行計算工具。有了Brook,科學家們可以用更簡單的代碼來做并行計算,開始嘗試用顯卡做天氣模擬、金融建模、醫學成像等各種計算密集型任務。
這種新型客戶的涌現,黃仁勛也注意到了。2004年巴克博士畢業后,黃仁勛立刻邀請巴克加入英偉達,開始了一個秘密項目,這就是統一著色器。
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.