看板 PC_Shopping
作者 YHVH (yehveh)
標題 Re: [閒聊] AVX指令集實際應用是甚麼功能?
時間 Thu Jul 16 16:27:29 2020


※ 引述《superRKO (挖洗RKO)》之銘言:
: 小弟菜雞
: 最近看INTEL的AVX512被嘴爆了,I皇QQ
: 又看了某幾集極客灣他們介紹說烤機烤AVX,I家的U會變很燙,而A的反而不會
: 然後這幾年有聽到AVX有實際在遊戲上應用的就刺客教條-奧德賽
: 但還是想問一下這AVX指令集的實際應用到底是甚麼?

    AVX 是做什麼用的?
        簡單一句:向量資料計算
      仔細一點:INT8x32/16x16/32x8/64x4 加減乘飽和比較
[圖]
         花太多步驟在交換資料
                 或是計算流程太複雜的
                  都可以給 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 還不是個咖小 @.@

    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 處理器上
    ---------------------------------------------------------------------
    然後...
    然後就沒有了...新 SIMD 指令集一段時間
    ---------------------------------------------------------------------
    11.做過超長寬度的 SIMD 處理器 Larrabee & Xeon Phi 的
       Intel 在第六代 Core 的 Xeon 版上做了 AVX512 (不是全套,只是部分類別)
       這東西比之前的至少好用在
       a.多了獨立的 64bit 遮罩暫存器八個
         (以往要遮罩結果,得拿完整的 SSE/AVX 暫存器來用)
         可以決定對目的暫存器各分量是否要寫入運算結果或是清除
       b.暫存器數量跟寬度也多 AVX2 一倍
         譬如 AVX2 要實作 SHA3 得要額外記憶體放常數表或中間值
         AVX512 可以全塞進暫存器裡



    所以!!!

    如果要說 AVX512 沒必要
    要嘛是額外加價買自己用不到的
    要嘛像第十代 Core 處理器,只做了一組 512bit FP pipe 給 AVX512 FP 指令用
    搞得 AVX512 FP peak performance 跟 AVX2 一樣

    要是用得到AVX512
    這東西比現在標榜 10+TFlops 但是只有 FP16/32 的 GPU 用途更多
    GPU 廠商會說 GPU 浮點運算超強,但也只強在 FP16/FP32
    一旦是其他精確度,衰減的幅度就比有 AVX 的 CPU 要大很多
    不像 CPU 是對半砍,而是對半砍"五次"
    如 FP64
    2nd gen Xeon scalable 8280 的 AVX512 比 RTX2080 Titan
    前者 peak 超過 2TFlops, 後者只有前者 1/4 不到

    CPU 自始至終追求的都是通用度
    所以在某個 coprocessor 還沒有必要被獨立特化出專門用途之前
    我們就只得拿 CPU 來做
    換句話說至少我們還有個啥都行但不是最快的貨色能擋
    如果現在出了一個便宜的 x86 CPU ,但代價是把所有 SIMD 指令砍掉 (只留 x87)
    各位還會想買單嗎?

    至於 PPC 的 Altivec 跟 ARM 的 Neon
    嗯...指令集都固定長度了是能加多少新的???
    萬年標配 FP32x4...
    所以我們該感謝 Intel 訂 x86 是可變長的指令集 lol
    讓我們不知道啥時才能擺脫它...


--
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.112.194.35 (臺灣)
※ 文章代碼(AID): #1V40zpT5 (PC_Shopping)
※ 文章網址: https://www.ptt.cc/bbs/PC_Shopping/M.1594888051.A.745.html
※ 同主題文章:
Re: [閒聊] AVX指令集實際應用是甚麼功能?
07-16 16:27 YHVH.
MrDisgrace: 專業推1F 07/16 16:36
mikapauli: 所以都用V100的話就沒有問題了是嗎?2F 07/16 16:41
ccbbaa: 這篇有歷史性 推一下3F 07/16 16:51
randeon5566: 推整理4F 07/16 16:53
yymeow: 專業文必推5F 07/16 16:54
a58524andy: 清楚 推6F 07/16 16:55
hankower: 專業7F 07/16 16:57
blackwindy: 對只打遊戲的根本雞肋 頂多模擬器有用8F 07/16 16:57
palapalanhu: 專業9F 07/16 17:01
waiter337: 好像很厲害 快推10F 07/16 17:04
oopFoo: i9-7900x開始就有兩組AVX512 pipe。可以看到很明顯11F 07/16 17:07
Severine: 推這篇的歷史 以前的確MMX/SSE就夠嚇人了12F 07/16 17:09
oopFoo: 的效能提昇。Icelake才有avx512,cometlake是沒有的普通USER要碰AVX512現在只能用筆電的Icelake
因為Intel太喜歡區隔市場,很多人只碰低階Xeon Gold那只有一組AVX512 pipe。所以才會誤會AVX512對比AVX沒有性能提昇。但AVX512比avx2好用太多了,光是13F 07/16 17:09
tonyian: 很不幸的全世界使用普通cpu會用到這個指令的可能比你想的還少18F 07/16 17:15
oopFoo: gather/scatter就讓寫程式容易許多。說AVX512不好的是真的沒寫過vector的程式。20F 07/16 17:16
arrenwu: 這幾篇都寫了不少有意思的AVX的知識
但其實大家想知道的是:那些應用AVX的幫助大?
這些應用我們有在用嗎?22F 07/16 17:20
oopFoo: 還有ARM現在有SVE,SVE2。所以還是有在增加指令集25F 07/16 17:21
ggirls: 不是懷疑你沒用。是怕我家風扇不夠用。26F 07/16 17:22
oopFoo: ffmpeg,常見的轉檔程式就支援avx512。
https://bit.ly/30dcQjy27F 07/16 17:25
Why Ice Lake is Important (a bit-basher’s perspective) – Branch Free
[圖]
With Computex, there's been a ton of news about Ice Lake (hereafter ICL) and the Sunny Cove core (SNC). Wikichip, Extremetech and Anandtech among many ...

 
arrenwu: 是,影片轉檔確實是AVX最常見的運用之一
但這塊不就是有人在質疑GPU會取代的部分?29F 07/16 17:26
JoyRex: CPU能靠2PASS提升畫質,GPU不行啊畢竟不能未卜先知31F 07/16 17:28
dxzy: 看不懂但推32F 07/16 17:29
hn9480412: 那AMD的SSE4a是拿來幹嘛的?33F 07/16 17:29
arrenwu: 轉檔部分其實爭議點在 低碼率 表現
以前h264的時候,GPU要相當高碼率才會有不錯的水準但近期我所看到的RTX系列的轉檔表現也比以前強超多34F 07/16 17:29
bubunana: 其實你不用自己用 某os會幫你調用 從mmx sse 乃至後來avx 你不做 他們就在某耗電規格或者反應時間卡你讓你拿不到他們認證  除非他們有特殊目的才放行37F 07/16 17:30
GitHub - postgrespro/vops
[圖]
Contribute to postgrespro/vops development by creating an account on GitHub. ...

 
oopFoo: vectorized columnar olap database
https://en.wikipedia.org/wiki/Fujitsu_A64FX41F 07/16 17:31
arrenwu: 我現在比較想得到的是數值分析軟體,這個AVX的優點43F 07/16 17:34
bubunana: 拿Q8400跑跑win7以後OS 那種延遲感是非常顯而易見的44F 07/16 17:34
arrenwu: 就很大45F 07/16 17:34
oopFoo: 用在"富岳",全世界最快的超級電腦,完全不用GPU46F 07/16 17:35

--
--
(YHVH.): Re: [閒聊] AVX指令集實際應用是甚麼功能? - PC_Shopping板