【问题标题】:Are there SIMD(SSE / AVX) instructions in the x86-compatible accelerators Intel Xeon Phi?x86 兼容加速器 Intel Xeon Phi 中是否有 SIMD(SSE / AVX) 指令?
【发布时间】:2014-05-05 09:34:13
【问题描述】:

x86 兼容加速器 MIC Intel Xeon Phi 中是否有 SIMD(SSE / AVX) 指令?

http://en.wikipedia.org/wiki/Xeon_Phi

【问题讨论】:

  • 兼容哪个版本的至强融核?早期的有问题,未来的甚至声称支持 AVX-512
  • 我不相信当前的至强融核能够运行 SSE/AVX(2)。甚至它的 AVX-512 也与 Skylake 和未来的 Xeon Phi 芯片中的那个有点不同。
  • @Mysticial 即当前的至强融核只能运行 AVX-512,不能运行 SSE/AVX2,不是吗?
  • @Alex 我相信这是正确的。

标签: intel sse simd avx intel-mic


【解决方案1】:

是的,当前一代的英特尔至强融核协处理器(代号“Knight's Corner”,缩写为 KNC)支持称为“英特尔® 初始多核指令”(缩写为英特尔)的 512 位 SIMD 指令集® IMCI)。

英特尔 IMCI “兼容”并且不等同于 SSE、AVX、AVX2 或 AVX-512 ISA。 然而,官方宣布下一代至强融核(代号“Knight's Landing”,缩写KNLwill support AVX-512 ISA

Intel IMCI(KNC 支持)和 AVX-512(KNL 支持)都是 512 位 SIMD 指令集,支持 FMA 并允许打包 8 个双精度或 16 个单精度浮点数,或 16 32 位整数(即两倍于 AVX 或 AVX2)。

虽然 KNC 无法“运行”SSE 或 AVX 二进制文件,但这通常并不重要,因为要生成能够在 KNC 上运行的应用程序二进制文件 - 您需要重新编译您的代码使用英特尔 C/C++/Fortran 编译器,众所周知,该编译器可以自动或半自动生成相对高效的矢量代码(用于 SSE、AVX、IMCI 等),如果需要,您还可以使用 IMCI 内在函数。

旁注:对于 Knights Landing(支持 AVX-512)英特尔工具链将不再是唯一的选择,但它可能会继续提供许多优势,包括可靠的显式和自动矢量化以及良好的与 Intel 分析工具集成(例如 Intel (Vectorization) Advisor 中的 AVX-512 analysis)。

AVX-512 ISA 与 SSE、AVX 和 AVX2 兼容。因此,在 Xeon 上为 AVX 编译的应用程序将在 KNL 上运行,而在 Xeon Phi KNL 上为 AVX-512 编译的应用程序通常将在 未来 代上运行Xeon(将来支持 AVX-512)。

使用以下在线指南可以轻松探索 AVX、IMCI 和未来 AVX-512 指令集之间的区别:http://software.intel.com/sites/landingpage/IntrinsicsGuide/

【讨论】:

  • 谢谢! “因为为了生成能够在 KNC 上运行的应用程序二进制文件 - 您需要使用英特尔 C/C++/Fortran 编译器重新编译代码,众所周知,它可以自动或半自动生成相对高效的矢量代码(对于 SSE, AVX、IMCI 等)”- 是的,但如果我不使用内置或内联汇编 SSE/AVX[1/2] 指令,并且我只使用自动矢量化。
  • 是的,如果您只使用内联汇编,那么每次出现更广泛/更新的 ISA 并且您的代码并不总是可移植时,您必须更新您的汇编实现。这就是为什么有这么多可用于 x86 CPU 以及所有 Xeon Phi-s 的更高级别和更便携的 SIMD 抽象的原因之一。它们是:1)内在函数,2)vec 类和各种 SIMD 库,3)OpenMP4.0 和 Cilk Plus 标准中的“显式矢量化”手段,4)编译器自动矢量化
  • 是的,英特尔 TBB 可能同时使用 SIMD 和多线程,不是吗?我喜欢 OpenMP4 中的 SIMD,因为它既是跨平台的,也是跨硬件的。
  • 我不知道任何英特尔 TBB 库计划引入 SIMD 编程支持,我不确定它们的内部实现;但我知道您可以将 TBB 线程与任何其他 SIMD 框架/pragma 相结合,例如 OMP4 pragma simd、Cilk 或编译器规范 pragma。顺便说一句,我告诉过“SIMD 框架”,即 pragma simd,而不是 pragma parallel for(组合不同的 parallel-fors 也经常能很好地工作,但需要您另外检查一对特定运行时的兼容性声明)
猜你喜欢
  • 2017-08-08
  • 1970-01-01
  • 1970-01-01
  • 2013-03-21
  • 2014-03-17
  • 2014-08-15
  • 2013-01-02
  • 2020-09-10
  • 2023-03-07
相关资源
最近更新 更多