在面向多平台的应用程序中使用 SIMD 指令 OS
Using SIMD instructions in application oriented to multiple platforms and OS
因此,无论我阅读了多少有关 SIMD 指令的内容,我仍然无法正确理解一些基本的内容,因此,我很乐意对此进行一些(概念性的)解释或建议。
我知道许多 SIMD 实现因 CPU 架构而异(MMX、SSE、SSE2 等)。然而,考虑到自 2000 年代中期以来,英特尔和 AMD 的 SIMD 指令集之间似乎有更大的融合(苹果已经开始使用英特尔),我不明白以下内容。
简单地说,如果应用程序具有特定的 SIMD 代码(例如,用于矢量化数学库),它在英特尔和 AMD 中是否同样 运行(因此在 Windows 和 Linux 计算机)并且 iOS 没有任何修改?
或者是否需要为应用程序所针对的每个 CPU architecture/operational 系统实现特定的代码,从而为每种用户类型提供不同的应用程序编译?
对于 Intel/AMD 可能会有一些收敛,具体取决于您想要突破性能极限的努力程度。 iOS 设备是 ARM-based,并且使用 Neon SIMD 而不是 Intel/AMD 的 SSE/AVX,因此没有二进制兼容性,在源代码级别只有最低限度的兼容性(例如通过宏或模板库)。请参阅 this question 了解一些 cross-platform 解决方案。
因此,无论我阅读了多少有关 SIMD 指令的内容,我仍然无法正确理解一些基本的内容,因此,我很乐意对此进行一些(概念性的)解释或建议。
我知道许多 SIMD 实现因 CPU 架构而异(MMX、SSE、SSE2 等)。然而,考虑到自 2000 年代中期以来,英特尔和 AMD 的 SIMD 指令集之间似乎有更大的融合(苹果已经开始使用英特尔),我不明白以下内容。
简单地说,如果应用程序具有特定的 SIMD 代码(例如,用于矢量化数学库),它在英特尔和 AMD 中是否同样 运行(因此在 Windows 和 Linux 计算机)并且 iOS 没有任何修改?
或者是否需要为应用程序所针对的每个 CPU architecture/operational 系统实现特定的代码,从而为每种用户类型提供不同的应用程序编译?
对于 Intel/AMD 可能会有一些收敛,具体取决于您想要突破性能极限的努力程度。 iOS 设备是 ARM-based,并且使用 Neon SIMD 而不是 Intel/AMD 的 SSE/AVX,因此没有二进制兼容性,在源代码级别只有最低限度的兼容性(例如通过宏或模板库)。请参阅 this question 了解一些 cross-platform 解决方案。