【发布时间】:2022-01-21 10:05:18
【问题描述】:
这就是我对 SIMD 的了解。单指令多数据是一种处理数据的方法,它对多个值的向量执行相同的指令。 SIMD 根据机器的处理器(SSE、SSE2、NEON...)在不同级别实现,每个级别提供不同的指令集。
我们可以通过包含immintrin.h 来使用这些指令集。我还没有真正理解的是:在实际使用 SIMD 开发某些东西时,我们是否应该关心检查支持哪些指令集?开发此类程序时的最佳实践是什么?例如,如果不支持指令集,我们应该怎么做;我们应该提供一个非 SIMD 替代方案,还是编译器为我们解向量化整个事情?
【问题讨论】:
-
immintrin.h是专门的英特尔,而不是 ARM NEON。 (而不是特定于 AMD 的内在函数,例如 Bulldozer 系列的 SSE4a 或 XOP)。 -
@PeterCordes 哦,我明白了,我的英特尔,这就是为什么我从来没有注意到。有没有办法包含 AMD 的?
-
是的,x86 编译器带有包含 AMD 内容的头文件,但它们基本上已经过时,因为 AMD 在 Zen 中放弃了对 XOP 的支持。现代 AMD CPU 支持 AVX2+FMA3 和 BMI / BMI2,我的意思是
immintrin.h仅定义 Intel 引入的扩展的内在函数,而不是它们不能在 AMD CPU 上运行。