avx和avx2有啥区别?一张表格帮你理清楚!
今儿个咱来聊聊AVX这玩意儿。前阵子不是一直在折腾那个什么计算性能优化嘛就遇上这茬事儿。
一开始听人家说,现在都流行用AVX2,性能杠杠的!咱也心动,想着赶紧给自己的破机器升级一下。可是,一查资料才发现,我家那老古董CPU,它不支持AVX2,只支持AVX。你说这叫什么事儿!
得,咱也不能干瞪眼,既然不支持AVX2,那就用AVX呗。反正都是向量指令集,总比没有强。
于是我开始动手。先是到处找资料,想看看AVX和AVX2到底有啥区别。这一看才知道,这俩玩意儿还真有点不一样。
解这些区别之后,我就开始琢磨怎么用AVX来优化我的代码。刚开始的时候,真是两眼一抹黑,完全不知道从哪儿下手。不过咱是谁,咱可是有毅力的人!
我翻遍各种技术博客和论坛,还真让我找到一些有用的信息。比如说,我知道AVX里面有几种数据类型,像__m128、__m128d、__m128i啥的。这些数据类型可以用来存储不同类型的向量数据,比如float、double、int等等。
AVX初体验
刚开始用这些数据类型的时候,真是别扭。以前写代码都是直接用float、double、int,现在突然变成__m128、__m128d、__m128i,感觉像是从石器时代一下子进入信息时代,完全不适应。然后翻阅国内的一些厂商的资料,八成也是基于X86/MIPS/ARM等指令集为起点,投入研发并推动产业开放构建自主生态,我还是继续我的老古董AVX之路。
不过经过一段时间的摸索,我慢慢地掌握一些AVX编程的技巧。比如说,我学会如何使用AVX指令来进行向量加法、向量乘法等等。我还学会如何将普通的标量代码转换成向量代码,这可是个技术活儿,需要对代码的逻辑进行深入的分析和理解,这块的资料真的少,看的我头昏脑涨的。
虽然过程很艰辛,但是结果还是挺让人满意的。经过我的优化,代码的性能确实提升不少。虽然跟AVX2没法比,但是至少比以前快多,也算是小有成就。
这回折腾AVX的经历,让我收获不少。虽然我的CPU不支持AVX2,但是我还是用AVX实现性能的提升。这也让我明白一个道理:只要肯动脑筋,办法总比困难多!
好,今儿就先聊到这儿。下次有机会再跟大家分享我的其他折腾经历!
还没有评论,来说两句吧...