【发布时间】:2021-07-30 01:34:33
【问题描述】:
我正在开发一个跨平台的并行数学库,并且在实现适用于 x86/amd64 的 SSE、AVX、AVX2 和 AVX-512 (包括运行时检测 ISA 可用性)方面取得了很大进展。
但是,我遇到了一个大问题。没有在 MSVC 上运行时检测 NEON 或 Helium 支持的文档。看来 ARM 或 ARM64 上没有 cpuid 指令。也不清楚是否有一种跨平台的方式可以在 Linux 上实现这一点。
您甚至需要手动检测它还是只使用预处理器定义(例如_M_ARM64)来检查运行时支持?据我了解,预处理器宏仅在编译时进行评估。
我们是否应该假设每个 ARM CPU 都有 NEON?氦呢?
我希望这里有人知道怎么做。提前谢谢你。
【问题讨论】:
-
是的,我看过那个页面。我仍然不明白如何在 C/C++ 中实现这一点,或者如何在 Windows 上实现这一点。还是谢谢。
-
或许你应该标记这个 Windows。
-
标记前请阅读标记说明。 helium 用于自动化测试工具
-
该链接中有一个已删除的答案。看起来写得很仔细,我想知道它被删除了。由于我无法证明它是否说明了好坏,我至少复制了一个有关 Windows 的链接:Understanding ARM Assembly Part:处理器还必须具有 VFP(硬件浮点)和 NEON(128-位 SIMD 架构)。
标签: c++ arm neon cpuid arm-helium