【问题标题】:When to use Instruction Set Extensions Technology from Intel [closed]何时使用英特尔的指令集扩展技术 [关闭]
【发布时间】:2020-10-25 05:49:06
【问题描述】:

什么时候可以使用英特尔的指令集扩展技术?它到底有什么作用?

我的场景:我想尽可能快地进行大约 500.000 次矩阵向量乘法。

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

【问题讨论】:

  • 只要您需要性能并且您可以控制/知道您的代码将在哪些机器上运行,这都是有意义的。例如在您的家庭桌面或一组特定的服务器上,使用gcc -O3 -march=native 进行编译。或者,如果您真的需要性能,那么即使是运行时 CPU 分派也是值得的。见stackoverflow.com/tags/sse/info
  • 幸运的是,对于matmul,您不需要做很多手动工作,只需使用优化的BLAS库即可。除非您的矩阵很小或形状很奇怪,否则自定义代码可能会有所帮助。 (虽然 Eigen 作为一个 C++ 模板库,可以在编译时利用已知的东西。)
  • 您可以考虑为此使用一个或多个 GPU。虽然这是一个全新的词(伤害)。
  • 500000个不同大小的矩阵向量积?还是所有相同(可能很小)的尺寸?你能同时做它们吗?它们是否共享相同的矩阵或向量?

标签: c++ intel sse simd avx


【解决方案1】:

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

SIMD 已经存在了很长时间,要求您的客户拥有它并非没有道理。

例如: https://docs.microsoft.com/en-us/cpp/build/reference/arch-x86?view=vs-2019 https://docs.microsoft.com/en-us/cpp/build/reference/arch-x64?view=vs-2019

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

编辑:

感谢 Peter Cordes 的编辑!

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

https://en.wikipedia.org/wiki/OpenCL

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

【讨论】:

  • 所有 Amd64 编译器都应使用 SSE2,因为所有 AMD64 处理器都至少支持 SSE2
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 2017-12-19
  • 1970-01-01
  • 2020-08-23
  • 2016-11-11
  • 1970-01-01
相关资源
最近更新 更多