ostcollector
发表于 2014-12-4 13:33
wangh 发表于 2014-12-4 13:22
严格讲是IPC,指令集的进步又是另一方面,刚开始搞SIMD的时候FLOPs/c只有4,现在已经翻到32了
至于IPC, ...
4->32里面,有2/3是寄存器位宽做的,架构提升只有一倍
MMX长度是64位,SSE是128位,AVX是256位,下一代AVX2是512位
FLOPC当然会上去
wangh
发表于 2014-12-4 13:35
阳炎n1 发表于 2014-12-4 13:03
新指令集要软件支持才有用,不然和没有一样
问题是2011年的AVX到现在都没有多少软件支持。。。2013年的A ...
AVX难普及的原因是——赛扬和奔腾不支持……真不知道到intel哪根神经搭错了
不过这个时候JIT的好处就出来了,.net下个版本就支持SIMD,写一次代码,通吃SSE和AVX
阳炎n1
发表于 2014-12-4 13:40
ostcollector
发表于 2014-12-4 13:42
wangh 发表于 2014-12-4 13:35
AVX难普及的原因是——赛扬和奔腾不支持……真不知道到intel哪根神经搭错了
不过这个时候JIT的好处就出来 ...
我很怀疑 jit 敢不敢这么做,反正上周一个给编译器捉虫的教授直接就说编译器对向量化是十分保守的
不过现在编译器直接用sse和avx的寄存器堆倒是很happy
当然IL可以加入一些向量化指令,不过也需要高层语言进行相应的配合,比如gcc就有向量化原语
lesangel
发表于 2014-12-4 13:42
wangh
发表于 2014-12-4 13:49
ostcollector 发表于 2014-12-4 13:33
4->32里面,有2/3是寄存器位宽做的,架构提升只有一倍
MMX长度是64位,SSE是128位,AVX是256位,下一代AV ...
你这一句话里就没几处对的
首先这和MMX就没关系,MMX又不能算浮点
最开始奔3支持SSE时因为P6内部位宽只有64位,一条SSE指令要分两个周期执行,所以FLOPs/c只有4
扣肉内部位宽提升到128位,一条SSE指令一个周期,于是FLOPs/c到了8
SNB有了AVX,FLOPs/c翻倍为16
Haswell的AVX2,借助FMA,FLOPs/c再翻倍32
wangh
发表于 2014-12-4 14:04
ostcollector 发表于 2014-12-4 13:42
我很怀疑 jit 敢不敢这么做,反正上周一个给编译器捉虫的教授直接就说编译器对向量化是十分保守的
不过现 ...
已经做了啊,vs2015里就有了
微软的做法是IL完全不动,SIMD由一个类库来提供,定义专用的Vector结构并用专门的特性标注出来,新的JIT会识别出具有这些特性的类型,编译时把方法调用替换成直接执行SIMD指令
kvll32
发表于 2014-12-5 22:36
wangh
发表于 2014-12-5 22:53
kvll32 发表于 2014-12-5 22:36
呵呵
别水了,知道你的脸肿了