Re: [閒聊] AVX指令集實際應用是甚麼功能?

作者: YHVH (yehveh)   2020-07-16 16:27:29
※ 引述《superRKO (挖洗RKO)》之銘言:
: 小弟菜雞
: 最近看INTEL的AVX512被嘴爆了,I皇QQ
: 又看了某幾集極客灣他們介紹說烤機烤AVX,I家的U會變很燙,而A的反而不會
: 然後這幾年有聽到AVX有實際在遊戲上應用的就刺客教條-奧德賽
: 但還是想問一下這AVX指令集的實際應用到底是甚麼?
AVX 是做什麼用的?
簡單一句:向量資料計算
   仔細一點:INT8x32/16x16/32x8/64x4 加減乘飽和比較
FP32x8/64x4 四則運算﹑根號﹑逼近倒數...
FP32/64 <-> INT32
其他還有 bitwise ops, permute, mask, broadcast...
給 GPU shader 算會:
         花太多步驟在交換資料
 或是計算流程太複雜的
都可以給 AVX 算

對用 AVX 的人來說,說 AVX 這東西沒用實際上是:
『不是它沒用,是你沒 用』
    ^在
Intel x86 有一長串 SIMD 指令集擴充歷史
每次都是為了擴充處理資料能力的價值(Intel Inside)加的
1. 將近三十年前的 Pentium 時代
Intel 為了要讓 x86 有 DSP 處理整數域向量資料的功能
所以加了 64bit INT8x8/16x4/32x2/64x1 MMX 指令集,造就 PentiumMMX
那時候如果沒 MMX 而用整數指令做 filter 或 converter 譬如做色域轉換
效率最差可能剩下不到一成
在這之前,TI 爽爽賺賣很貴的 DSP, Creative Labs 也在賺賣很貴的 SB...
2. 二十幾年前的 Pentium!!! 時代
一堆初階 3D 顯示卡出現,只有算整數域像素顏色卻沒有計算浮點向量的 GPU
要是沒有 FP32x4 的 SSE 而用 x87 處理頂點向量,你只會得到少了 3/4 以上
多邊形的 3D 畫面
3. 二十年前第一個有 ucode cache 的 x86 Pentium4
是該把 MMX & x87 移給有"正常"通用暫存器的 SSE 做了,所以有了 SSE2
SSE2 包山包海 FP32/64, INT8/16/32/64 都有,只是不包超越函數還有那 FP80
x87 也開始慢慢淡出浮點數處理的功能
4. 過沒多久更燙的 Prescott Pentium4
Intel 開始加了一些可以直接處理同個暫存器內相鄰浮點數對加減的指令集 SSE3
SSSE3 則是把相同功能又做到了處理整數資料上
這時候的 GPU programmable shader 還不是個咖小 @[email protected]
5. 十幾年前大賣的 Core2
Intel 把向量的分量遮罩選擇功能做進了 SSE4.1 ,也補了整數的最大最小值指令
好不容易這時候 GPU 終於開始出頭了
6. 第一代 Core 處理器出了
GPU 開始標榜各式各樣的 shader
Intel 把腦筋動到字串比對&糾錯碼上,所以又做了 SSE4.2
7. 十年前第一代 Core 處理器改製程
想想處理加解密用一般指令計算還是要很久,所以 Intel 把加解密的 AES & GF
用到的無進位長整數乘法加進來
要 GPU 加這種功能?吃x比較快...
8. 128bit SSE1/2/3/4.1
這些處理 FP32x4 是可以,但是對 FP64x4 卻只剩下一半效能
也不能指望那時連 FP64 都不知道是啥的 GPU
於是 Intel 在第二代的 Core i7 把 AVX 做上去了
終於...終於... 多了一倍數量&寬度的暫存器
目的暫存器也不需要再跟其中一個來源暫存器共用了
但這兩倍寬只局限於處理浮點數
9. 為什麼 GPU 都喜歡偷精確度用 FP16 ???
這樣跟 CPU 交換資料很麻煩咧...
所以 Intel 加了 FP16 在第三代 Core 處理器,做 FP16<->FP32 轉換
10.馬的8.啦
為什麼 AVX 256bit 暫存器只能用在浮點數,那整數域的咧???
所以 Intel AVX2 就把整數的部分也補上了,在第四代 Core 處理器上
作者: twosheep0603 (兩羊)   2020-07-16 21:39:00
簡單來說追求通用計算的話就會繼續留著這堆電晶體

Links booklink

Contact Us: admin [ a t ] ucptt.com