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