Re: [閒聊] AVX指令集實際應用是甚麼功能?
看板PC_Shopping作者abac1230 (Planck超帥)時間5年前 (2020/07/16 00:08)推噓51(51推 0噓 172→)留言223則, 31人參與討論串2/3 (看更多)
※ 引述《superRKO (挖洗RKO)》之銘言:
: 小弟菜雞
: 最近看INTEL的AVX512被嘴爆了,I皇QQ
: 又看了某幾集極客灣他們介紹說烤機烤AVX,I家的U會變很燙,而A的反而不會
: 然後這幾年有聽到AVX有實際在遊戲上應用的就刺客教條-奧德賽
: 但還是想問一下這AVX指令集的實際應用到底是甚麼?
老實說這個AVX如果要認真解釋,
可能會又臭又長,
大概會99%的人會直接END。
所以我用老嫗能解的方式來稍稍亂講一下好了,
雖然還是又臭又長,但有誤請儘量鞭。
首先先回答你的問題,
AVX指令集的實際應用到底是什麼?
我想最接近問題的答案應該是:
「那些想要把CPU當GPU來用的應用」這樣
最貼近一般人會用到的軟體,
我在想應該就是PS2的模擬器PCSX2,
以及PS3的模擬器RPCS3了吧?
想當然你可能想會說,
CPU與GPU這兩種處理器,
一般在計算的資料類型上差別蠻大的。
那為什麼還要把CPU當GPU用呢?
好問題。
老實說還真的有一堆程式設計師對此感到疑惑。
但代誌不是憨人想得那麼簡單。
實際上還真的有廠商在14年前就這麼搞了,
而且產品大家都聽過。
那家先行者廠商叫SONY & Toshiba & 他愉悅的伙伴IBM,
主機的名字叫PlayStation 3。
那顆名留千史的CPU就叫Cell。
雖然上一代的PS 2裡的EE(CPU)也有類似的狀況,
但特化狀況沒像Cell這麼嚴重就是。
而且EE的特化技能樹是朝另外一邊長的這樣。
但不在這邊的討論範圍所先不提。
簡單地說就是PS3裡面那顆Cell CPU,
跟主流的x86及ARM架構相比,
在架構特性上,
跟GPGPU裡的CU單元反而比較相似,
這是由於Cell的設計,
是由一顆PPE的微處理器 + 8個SPE協同處理器結合而成。
(實際上為了良率問題只有7個SPE可用)
(但SONY又限制最後一個SPE為系統獨佔,所以實際上只能用6個)
每個SPE有128個128bit的entry register
(不知道這個entry register要怎麼翻?)
(跟x86的相比就是限制一大堆的暫存器)
SPE無法直接存取主記憶體,需透過PPE的DMA。
看到這邊,
PPE+SPE這種奇妙的組合是不是就有點像ROP與TMU的樣子呢?
所以如果遊戲開發公司如果要把PS3的性能完全發揮出來,
通常就必須進行手動調整不同SPE在執行緒上的調度,
並避免資料相依(ex:if... else)的狀況在不同SPE上頭發生。
簡單一句話:程式很很很很很難寫。
有寫過的人都會想罵髒話的程度。
當年為了cell的開發,MIT還有請IBM的人到學校開課這樣。
雖然IBM的確曾經有努力推這種架構。(?)
但大家都知道
惰性是人類進步的原動力。
對碼農來說能省則省,能懶則懶。
所以大部份遊戲對SPE的使用大多只用到3個及以下。
講了這麼多,
但Cell這個設計又與AVX有什麼關系呢?
關系可大了。
當x86架構為了要模擬PS3裡頭的Cell時,
為了要達到與SPE相同的暫存器效能,
就必須使用AVX來獲得效能的提升。
在這邊稍微離題聊一下x86 SIMD的暫存器寬度與數量:
MMX:8個64bit的暫存器(僅處理整數,而且與浮器暫存器共用)
SSE:8個128bit的通用暫存器(整數or浮點,但有小限制)
SSE2:強化後的8個128bit的通用暫存器(簡單說就是上面的限制解封)
SSE3:把SSE2的通用暫存器再強化,讓在同一暫存器內的兩個數字相加or相乘
(in x86-64)
AVX:16個256bit的通用暫存器,可用於SSE的實現與相容(128bit)
AVX2:16個256bit的通用暫存器,可用於SSE實現擴展為256bit
AVX-512:超級高大上的32個512bit的通用暫存器,並有多個變種版本
Cell SPE:128個128bit的不太通用的entry暫存器
看到這邊應該馬上就能想到。
x86為了跟上Cell PPE+SPE 這種奇妙又奇耙的架構,
由於AVX的暫存器在數量及寬度上的優勢,相較於老舊的SSE,
絕對會是比較好的設計。
所以若是CPU若能使用AVX2指令集的話,
在跑RPCS3的時候,通常會相較沒有AVX2的處理器至少多個3~5幀。
PCSX2的話就比較特別一點,
因為PCSX2對AVX2的實現,
僅在對GS(PS2的GPU)的模擬使用軟體模式時才會啟用。
也就是把CPU當GPU來用
在跑軟體模式時,
相較於沒有AVX2的處理器,也是能提高個3~5幀的效能。
總而言之。
因為模擬器這塊其實蠻常遇到把CPU當GPU用的狀況。
尤其是對那些家用主機的模擬。
所以AVX指令集在家機的模擬器上其實蠻常見的。
至於那個高大上的AVX-512的問題,
那就又是另外一回事了....
只能說我的看法跟Linus Torvalds差不多,
不太看好這個指令集就是。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.168.176.74 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/PC_Shopping/M.1594829314.A.620.html
推
07/16 00:16,
5年前
, 1F
07/16 00:16, 1F
→
07/16 00:16,
5年前
, 2F
07/16 00:16, 2F
推
07/16 00:19,
5年前
, 3F
07/16 00:19, 3F
→
07/16 00:19,
5年前
, 4F
07/16 00:19, 4F
→
07/16 00:20,
5年前
, 5F
07/16 00:20, 5F
推
07/16 00:22,
5年前
, 6F
07/16 00:22, 6F
推
07/16 00:23,
5年前
, 7F
07/16 00:23, 7F
→
07/16 00:23,
5年前
, 8F
07/16 00:23, 8F
→
07/16 00:27,
5年前
, 9F
07/16 00:27, 9F
→
07/16 00:27,
5年前
, 10F
07/16 00:27, 10F
推
07/16 00:30,
5年前
, 11F
07/16 00:30, 11F
→
07/16 00:31,
5年前
, 12F
07/16 00:31, 12F
→
07/16 00:36,
5年前
, 13F
07/16 00:36, 13F
推
07/16 00:43,
5年前
, 14F
07/16 00:43, 14F
→
07/16 00:43,
5年前
, 15F
07/16 00:43, 15F
→
07/16 00:43,
5年前
, 16F
07/16 00:43, 16F
→
07/16 00:43,
5年前
, 17F
07/16 00:43, 17F
推
07/16 01:04,
5年前
, 18F
07/16 01:04, 18F
→
07/16 01:12,
5年前
, 19F
07/16 01:12, 19F
→
07/16 01:33,
5年前
, 20F
07/16 01:33, 20F
→
07/16 01:47,
5年前
, 21F
07/16 01:47, 21F
→
07/16 01:53,
5年前
, 22F
07/16 01:53, 22F
→
07/16 01:54,
5年前
, 23F
07/16 01:54, 23F
→
07/16 01:55,
5年前
, 24F
07/16 01:55, 24F
→
07/16 01:56,
5年前
, 25F
07/16 01:56, 25F
→
07/16 01:57,
5年前
, 26F
07/16 01:57, 26F
→
07/16 01:57,
5年前
, 27F
07/16 01:57, 27F
推
07/16 01:59,
5年前
, 28F
07/16 01:59, 28F
推
07/16 01:59,
5年前
, 29F
07/16 01:59, 29F
→
07/16 02:00,
5年前
, 30F
07/16 02:00, 30F
→
07/16 02:00,
5年前
, 31F
07/16 02:00, 31F
→
07/16 02:00,
5年前
, 32F
07/16 02:00, 32F
→
07/16 02:01,
5年前
, 33F
07/16 02:01, 33F
→
07/16 02:02,
5年前
, 34F
07/16 02:02, 34F
→
07/16 02:13,
5年前
, 35F
07/16 02:13, 35F
→
07/16 02:13,
5年前
, 36F
07/16 02:13, 36F
→
07/16 02:13,
5年前
, 37F
07/16 02:13, 37F
→
07/16 02:19,
5年前
, 38F
07/16 02:19, 38F
推
07/16 02:31,
5年前
, 39F
07/16 02:31, 39F
還有 144 則推文
→
07/16 12:58,
5年前
, 184F
07/16 12:58, 184F
→
07/16 12:58,
5年前
, 185F
07/16 12:58, 185F
→
07/16 13:01,
5年前
, 186F
07/16 13:01, 186F
→
07/16 13:01,
5年前
, 187F
07/16 13:01, 187F
→
07/16 13:40,
5年前
, 188F
07/16 13:40, 188F
→
07/16 13:41,
5年前
, 189F
07/16 13:41, 189F
→
07/16 13:43,
5年前
, 190F
07/16 13:43, 190F
→
07/16 13:43,
5年前
, 191F
07/16 13:43, 191F
推
07/16 13:52,
5年前
, 192F
07/16 13:52, 192F
→
07/16 13:52,
5年前
, 193F
07/16 13:52, 193F
→
07/16 13:53,
5年前
, 194F
07/16 13:53, 194F
→
07/16 13:53,
5年前
, 195F
07/16 13:53, 195F
→
07/16 14:15,
5年前
, 196F
07/16 14:15, 196F
→
07/16 14:16,
5年前
, 197F
07/16 14:16, 197F
推
07/16 14:37,
5年前
, 198F
07/16 14:37, 198F
→
07/16 14:37,
5年前
, 199F
07/16 14:37, 199F
→
07/16 14:45,
5年前
, 200F
07/16 14:45, 200F
→
07/16 14:45,
5年前
, 201F
07/16 14:45, 201F
→
07/16 14:45,
5年前
, 202F
07/16 14:45, 202F
→
07/16 14:50,
5年前
, 203F
07/16 14:50, 203F
→
07/16 14:50,
5年前
, 204F
07/16 14:50, 204F
→
07/16 14:50,
5年前
, 205F
07/16 14:50, 205F
→
07/16 14:50,
5年前
, 206F
07/16 14:50, 206F
→
07/16 14:56,
5年前
, 207F
07/16 14:56, 207F
→
07/16 14:56,
5年前
, 208F
07/16 14:56, 208F
推
07/16 19:32,
5年前
, 209F
07/16 19:32, 209F
→
07/17 05:51,
5年前
, 210F
07/17 05:51, 210F
→
07/17 05:52,
5年前
, 211F
07/17 05:52, 211F
→
07/17 05:53,
5年前
, 212F
07/17 05:53, 212F
→
07/17 05:53,
5年前
, 213F
07/17 05:53, 213F
→
07/17 05:54,
5年前
, 214F
07/17 05:54, 214F
→
07/17 05:55,
5年前
, 215F
07/17 05:55, 215F
→
07/17 05:56,
5年前
, 216F
07/17 05:56, 216F
→
07/17 05:56,
5年前
, 217F
07/17 05:56, 217F
→
07/17 05:56,
5年前
, 218F
07/17 05:56, 218F
→
07/17 05:57,
5年前
, 219F
07/17 05:57, 219F
→
07/17 05:57,
5年前
, 220F
07/17 05:57, 220F
→
07/17 05:58,
5年前
, 221F
07/17 05:58, 221F
→
07/17 05:58,
5年前
, 222F
07/17 05:58, 222F
→
07/17 05:58,
5年前
, 223F
07/17 05:58, 223F
討論串 (同標題文章)