如何解决我如何在运行时检测 NEON 和 Helium 指令集的可用性
我正在开发一个跨平台的并行数学库,并且在为 x86/amd64 实施 SSE、AVX、AVX2 和 AVX-512 方面取得了很大进展,包括运行时检测 ISA 可用性。
但是,我遇到了一个大问题。 MSVC 上没有在运行时检测 NEON 或 Helium 支持的文档。 ARM 或 ARM64 上似乎没有 cpuid
指令。尚不清楚是否有跨平台的方式来为 Linux 实现这一点。
您甚至需要手动检测它还是可以仅使用预处理器定义(例如 _M_ARM64
)来检查运行时支持?我的理解是预处理器宏仅在编译时进行评估。
我们是否应该假设每个 ARM CPU 都有 NEON?氦气呢?
我希望这里有人知道怎么做。提前致谢。
解决方法
NEON
和 VFP
在 armv8-a
上是必需的。
因此无需在运行时检查 aarch64
的可用性。
我会完全放弃 aarch32
的支持。
如果使用 MSVC 构建,针对 ARM 或 ARM64 上的现代 Windows(即不是 Windows CE),那么基线功能集确实支持 NEON(在 32 位和 64 位上),因此您无需在所有,您都可以无条件地使用它们。 (如果代码库是可移植的,您当然可能希望避免为其他架构编译该代码,例如使用常规预处理器定义。)因此对于这种情况,检查 _M_ARM
或 _M_ARM64
定义就足够了。
Helium 仅用于 ARM 处理器的 M 配置文件,即用于微控制器等,与 A 配置文件无关(用于“应用程序使用”)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。