※ 引述《breathair (拆了?簡單了)》之銘言:
: 小弟請教各位大佬
: NV最大的優勢,應該是CUDA
: CUDA讓各AI專家可以編程NV GPU
: 讓GPU跑你想跑的東西,而不侷限在圖形運算
: AMD正是落後在這裡
: 當大家都用CUDA編程AI晶片
: AMD不能用CUDA等於不能相容
: 於是AI晶片就被NV佔據極大優勢
: 以上不知對不對
: 如果對
: 小弟的疑問是
: 如果NV護城河是CUDA這種編程語言
: 而AI最大優勢又是編程
: 難道以後不會因為隨著AI的強大
: 各路AI晶片可以把CUDA編程
: 轉譯成自家AI晶片可以接受的語言
: 這樣護城河還會在嗎?
講一下圖學歷史好了
其實programmable GPU不是啥新概念
狹義的 GPU 把它定義成 3D 繪圖硬體開始
規格是 OpenGL 1.1 跟 DirectX 7.0
硬體設計是 fixed-function pipeline
繪圖主要分兩個步驟
1. Tessellation
三角形畫 - 由硬體 Vertex processor (VP) 處理
2. Rasterization
著色(填充) - 由 Pixel processor (PP) 處理
步驟1比較簡單,就是把3D model變成一連串的三維空間中的三角形資料
餵到步驟2 步驟2會依據光源設定/貼圖 去把三角形用pixel填充在螢幕上
離題一下:
那時繪圖規格還很簡單 沒有所謂的材質特性 反光阿 折射 漫散射都沒有
也沒有啥陰影的
光源只有背景光 (ambient light)
點光源 (spot light)
方向光 (directional light)
這樣功能 看起來很陽春 有辦法做出畫面好的遊戲嗎? 有的
遊戲引擎開發神人 John Carmark (id soft)
在1999年推出 Quake3 (雷神之錘3)
並寫出了 Quake3 Engine 到現在依然是封閉式場景的設計標準
quake3 engine 放棄了OpenGL提供的光源計算
利用場景分割 預先計算靜態光源生成lightmap
把 lightmap 結合 貼圖 (texture) 讓遊戲的關卡畫面擬真大幅提升
多年以後 當Valve利用quake3引擎 開發出source engine (Half-Life 2)
肯定會回想起把lightmap 大幅翻新的遙遠的午後
五年後的2004年 Valve公司推出半條命2
這遊戲依然是FPS+帶入劇情的頂級遊戲
Valve把lightmap改掉 改用物理光學公式radiosity
去計算新的光學貼圖 有興趣的可以看一下他們的pdf
https://advances.realtimerendering.com/s2006/
Mitchell-ShadingInValvesSourceEngine.pdf
回正題:
由於步驟1 太簡單
所有的bottleneck 都卡在 PP 像素填充速度
所以大部分時間 VP 都是閒置的
下一代的設計把 VP/PP 結合 從 fixed shader改成 unified shader
也是現在GPGPU的雛形
第一個這麼做的還是 ATI (所以AMD現在落後不要怪人阿)
unified shader只要tessellation工作做完了
就會被分配rasterization的工作
所以不會有硬體閒置的問題
shader的加強 加上OpenGL 2.0/DirectX 9.0的更新
讓開發者可以寫 shader program 去控制每個stage
shader的工作
這時已經有programmable GPU了
這邊是 OpenGL 的 GLSL(GL Shading Language) 範例
https://learnopengl.com/Getting-started/Shaders
微軟是推 HLSL (High Level Shading Language)
然後 NV 很找死的 又研發自己的語言叫做 cg (C for Graphics)
大家說老黃是因為CUDA才成為AI霸主
其實他在更早推出的cg才是
黃仁勳:沒有CG,輝達早就死了!挺過倒閉危機,他這一豪賭反轉壯大AI帝國
那時大學修電腦圖學 期末作業剛好是要搞 shader programming
結果助教也不教 GLSL 跑去用 CG 搞得資料更少更難寫
而且寫到一半才發現 我的爛顯卡根本不支援 cg這功能
還花了快六千多塊買一張NV顯卡才搞定
那時NV就開始大力推動電腦圖學
他有推出 GPU GEMS系列
GPU GEMS 還主打 cg
到了 GPU GEMS2/GPU GEMS3 就開始推 cuda 主打GPGPU了
算一算 也是十幾年前的事了