C++ 何时使用英特尔的指令集扩展技术

C++ 何时使用英特尔的指令集扩展技术,c++,intel,sse,simd,avx,C++,Intel,Sse,Simd,Avx,什么时候使用Intel的指令集扩展技术有意义?它到底做了什么 我的场景:我想尽快进行~500.000次矩阵向量乘法 矩阵大小:[4x4]|向量大小:[1x4]如果您能保证您的客户获得一定程度的SIMD支持,我看不出是什么阻碍了您 SIMD已经存在了足够长的时间,要求客户拥有它并不是不合理的 例如: x86-64保证SSE2可用,因此编译器总是将其用于64位构建。(从某种意义上讲,它不再是一个扩展,只是x86-64 ISA的基线部分) 编辑: 谢谢你的编辑彼得·科德斯 但我还想向用户指出,如果他

什么时候使用Intel的指令集扩展技术有意义?它到底做了什么

我的场景:我想尽快进行~500.000次矩阵向量乘法


矩阵大小:[4x4]|向量大小:[1x4]

如果您能保证您的客户获得一定程度的SIMD支持,我看不出是什么阻碍了您

SIMD已经存在了足够长的时间,要求客户拥有它并不是不合理的

例如:

x86-64保证SSE2可用,因此编译器总是将其用于64位构建。(从某种意义上讲,它不再是一个扩展,只是x86-64 ISA的基线部分)

编辑:

谢谢你的编辑彼得·科德斯

但我还想向用户指出,如果他们对SIMD感兴趣,他们可能希望研究OpenCL


OpenCL帮助用户编写非常高效的SIMD程序。

在需要性能的任何时候,它都是有意义的,您可以控制/知道代码将在哪些机器上运行。e、 g.在您的家庭桌面上,或在一组特定的服务器上,使用
gcc-O3-march=native
进行编译。或者,如果您真的需要性能,那么即使运行时CPU调度也值得。看到了吧。幸运的是,matmul不需要做很多手工工作,只需要使用优化的BLAS库。除非您的矩阵很小或形状很奇怪,否则自定义代码可能会有所帮助。(虽然EGEN是一个C++模板库,但它可以在编译时利用已知的东西。)你可以考虑使用一个或多个GPU来进行这个操作。虽然这是一个全新的词(伤害)。500000个不同大小的矩阵向量积?还是所有相同(可能较小)的尺寸?你能同时做吗?它们是否共享相同的矩阵或向量?所有Amd64编译器都应使用SSE2,因为所有Amd64处理器都至少支持SSE2