Re: [閒聊] AVX指令集實際應用是甚麼功能?
※ 引述《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 還不是個咖小 @.@
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 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/PC_Shopping/M.1594888051.A.745.html
推
07/16 16:36,
3年前
, 1F
07/16 16:36, 1F
推
07/16 16:41,
3年前
, 2F
07/16 16:41, 2F
推
07/16 16:51,
3年前
, 3F
07/16 16:51, 3F
推
07/16 16:53,
3年前
, 4F
07/16 16:53, 4F
推
07/16 16:54,
3年前
, 5F
07/16 16:54, 5F
推
07/16 16:55,
3年前
, 6F
07/16 16:55, 6F
推
07/16 16:57,
3年前
, 7F
07/16 16:57, 7F
推
07/16 16:57,
3年前
, 8F
07/16 16:57, 8F
推
07/16 17:01,
3年前
, 9F
07/16 17:01, 9F
推
07/16 17:04,
3年前
, 10F
07/16 17:04, 10F
推
07/16 17:07,
3年前
, 11F
07/16 17:07, 11F
推
07/16 17:09,
3年前
, 12F
07/16 17:09, 12F
→
07/16 17:09,
3年前
, 13F
07/16 17:09, 13F
→
07/16 17:11,
3年前
, 14F
07/16 17:11, 14F
→
07/16 17:12,
3年前
, 15F
07/16 17:12, 15F
→
07/16 17:13,
3年前
, 16F
07/16 17:13, 16F
→
07/16 17:15,
3年前
, 17F
07/16 17:15, 17F
推
07/16 17:15,
3年前
, 18F
07/16 17:15, 18F
→
07/16 17:15,
3年前
, 19F
07/16 17:15, 19F
→
07/16 17:16,
3年前
, 20F
07/16 17:16, 20F
→
07/16 17:16,
3年前
, 21F
07/16 17:16, 21F
推
07/16 17:20,
3年前
, 22F
07/16 17:20, 22F
→
07/16 17:21,
3年前
, 23F
07/16 17:21, 23F
→
07/16 17:21,
3年前
, 24F
07/16 17:21, 24F
推
07/16 17:21,
3年前
, 25F
07/16 17:21, 25F
推
07/16 17:22,
3年前
, 26F
07/16 17:22, 26F
推
07/16 17:25,
3年前
, 27F
07/16 17:25, 27F
→
07/16 17:25,
3年前
, 28F
07/16 17:25, 28F
推
07/16 17:26,
3年前
, 29F
07/16 17:26, 29F
→
07/16 17:27,
3年前
, 30F
07/16 17:27, 30F
→
07/16 17:28,
3年前
, 31F
07/16 17:28, 31F
推
07/16 17:29,
3年前
, 32F
07/16 17:29, 32F
→
07/16 17:29,
3年前
, 33F
07/16 17:29, 33F
推
07/16 17:29,
3年前
, 34F
07/16 17:29, 34F
→
07/16 17:29,
3年前
, 35F
07/16 17:29, 35F
→
07/16 17:30,
3年前
, 36F
07/16 17:30, 36F
→
07/16 17:30,
3年前
, 37F
07/16 17:30, 37F
→
07/16 17:30,
3年前
, 38F
07/16 17:30, 38F
→
07/16 17:30,
3年前
, 39F
07/16 17:30, 39F
還有 125 則推文
→
07/17 00:25,
3年前
, 165F
07/17 00:25, 165F
→
07/17 00:25,
3年前
, 166F
07/17 00:25, 166F
→
07/17 00:26,
3年前
, 167F
07/17 00:26, 167F
→
07/17 00:29,
3年前
, 168F
07/17 00:29, 168F
→
07/17 00:29,
3年前
, 169F
07/17 00:29, 169F
→
07/17 00:31,
3年前
, 170F
07/17 00:31, 170F
→
07/17 00:31,
3年前
, 171F
07/17 00:31, 171F
→
07/17 00:32,
3年前
, 172F
07/17 00:32, 172F
推
07/17 00:34,
3年前
, 173F
07/17 00:34, 173F
→
07/17 00:36,
3年前
, 174F
07/17 00:36, 174F
→
07/17 00:36,
3年前
, 175F
07/17 00:36, 175F
推
07/17 00:42,
3年前
, 176F
07/17 00:42, 176F
→
07/17 00:42,
3年前
, 177F
07/17 00:42, 177F
→
07/17 00:43,
3年前
, 178F
07/17 00:43, 178F
→
07/17 00:46,
3年前
, 179F
07/17 00:46, 179F
→
07/17 00:46,
3年前
, 180F
07/17 00:46, 180F
推
07/17 02:53,
3年前
, 181F
07/17 02:53, 181F
→
07/17 02:53,
3年前
, 182F
07/17 02:53, 182F
→
07/17 02:54,
3年前
, 183F
07/17 02:54, 183F
→
07/17 02:54,
3年前
, 184F
07/17 02:54, 184F
→
07/17 06:03,
3年前
, 185F
07/17 06:03, 185F
→
07/17 06:04,
3年前
, 186F
07/17 06:04, 186F
→
07/17 06:04,
3年前
, 187F
07/17 06:04, 187F
推
07/17 07:44,
3年前
, 188F
07/17 07:44, 188F
→
07/17 07:44,
3年前
, 189F
07/17 07:44, 189F
→
07/17 07:45,
3年前
, 190F
07/17 07:45, 190F
→
07/17 07:45,
3年前
, 191F
07/17 07:45, 191F
推
07/17 10:19,
3年前
, 192F
07/17 10:19, 192F
推
07/17 11:32,
3年前
, 193F
07/17 11:32, 193F
推
07/17 13:52,
3年前
, 194F
07/17 13:52, 194F
→
07/17 22:27,
3年前
, 195F
07/17 22:27, 195F
→
07/17 22:28,
3年前
, 196F
07/17 22:28, 196F
→
07/17 22:28,
3年前
, 197F
07/17 22:28, 197F
→
07/17 22:28,
3年前
, 198F
07/17 22:28, 198F
→
07/17 22:29,
3年前
, 199F
07/17 22:29, 199F
→
07/17 22:29,
3年前
, 200F
07/17 22:29, 200F
→
07/17 23:28,
3年前
, 201F
07/17 23:28, 201F
→
07/17 23:28,
3年前
, 202F
07/17 23:28, 202F
→
07/17 23:30,
3年前
, 203F
07/17 23:30, 203F
→
07/17 23:30,
3年前
, 204F
07/17 23:30, 204F
討論串 (同標題文章)