天天看点

Delphi 汇编学习(二)--- 学习 SIMD 的痛苦

学习 SIMD 指令有一段时间了。

真的痛苦(或许是我对指令不熟的缘故)。

第一阶段:MMX

一开始为了加快 CPU 的浮点运算能力,intel 搞了个MMX,看似强大。

但用着用着就发现,它主要是针对浮点运算,对于整数运算有天生的不足。

虽然可以通过浮点来模拟整数运算,性能也下降了。或者说提速不明显。或者说没有想象中的那么高速。

算是第二阶段:SSE1/SSE2/SSE3/SSE4

估计 intel 也知道了。又挤出了 SSE1/SSE2/SSE3/SSE4,这下整数指令、浮点指令、移位指令、等等指令都补全了。

优化效果很不错。关键是大多数机器都支持这些指令。

总结:SSE 最佳。有效果,有市场。第一阶段算真正意义上的收官。

不是第三阶段,重复第一阶段:AVX

到了 AVX,intel 老毛病也犯了,挤牙膏的本质又出来了。

和 MMX 一样。很多指令不全。没有整数指令,没有移位指令,等等指令。要通过各种方法来模拟,提速效果大打折扣。

没有办法做到真正意义上的使用。只能等着 intel 补齐指令。

网上有很多关于 AVX 优化的文章,其实大多数都使用了 AVX2 指令。在只支持 AVX 指令的机器上是无法执行的。

而且还有一个问题,intel 的手册中,AVX 和 AVX2 也没有区分的很清楚。

不实际运行一下,你是无法确定哪些指令属于 AVX,哪些指令不属于 AVX,属于 AVX2。

不是第三阶段的阶段:AVX2

intel 在 AVX2 中补齐了缺少的指令。

但问题是,现在很多电脑只支持AVX,不支持AVX2。

身边同事们的电脑,几乎没有支持 AVX2 的。只有一个同事的手提电脑支持 AVX2,价格过2万。还不支持 AVX512。

并且在实际测试中,AVX2 效果并没有想象中比 SSE 提升2倍。有时效果还不如AVX1。有时连 SSE 都不如。妖精了。

总结:AVX 就是个半成品。AVX2 没有预期效果,没有市场。

应该算是第三阶段:AVX512

不知道 AVX512 性能如何,身边没有一台机器可以测试。看了 intel 手册,指令倒是很多,应该补全了吧。

看网上文章,AVX512 中,FMA 好像也被阉割了(影响性能的幺)。想要没有阉割版本的,估计 CPU 价格就过万了吧。

看似 AVX512 是想往深度学习方向走,但和 GPU 相比,简直就是沧海一粟。也难怪 Linus Torvalds 怼 Intel 的 AVX512。

如果 intel 真的是想往深度学习方向走,那么 AVX1024、AVX2048,等等。以后肯定是少不了的。

第四阶段:挤吧挤吧挤吧不是罪。就像海绵里面的水,母牛的奶,只要挤,总会有的。

总结:相信商家有信誉,不如相信妓女是处女。

总结:相信指令,相信编译器,不如相信自己!

qq交流群:101611228

继续阅读