当前位置: 首页 > 知识库问答 >
问题:

如何在运行时检测NEON和氦指令集的可用性

拓拔奇
2023-03-14

我正在开发一个跨平台并行数学库,并且在实现用于x86 / amd64的SSE,AVX,AVX2和AVX-512方面取得了很大进展,包括ISA可用性的运行时检测。

但是,我遇到了一个主要问题。MSVC上没有在运行时检测NEON或Helium支持的留档。在ARM或ARM64上似乎没有cpuid指令。也不清楚是否有跨平台的方法来为Linux完成这一点。

您甚至需要手动检测它还是可以使用预处理器定义(例如_M_ARM64)来检查运行时支持?据我所知,预处理器宏仅在编译时评估。

我们应该假设每个ARM CPU都有NEON吗?氦呢?

我希望这里有人知道怎么做。提前感谢。

共有2个答案

华哲茂
2023-03-14

< code >氖和< code>VFP在< code>armv8-a上是强制性的。

因此,无需在运行时检查aarch64上的可用性。

我会完全放弃aarch32的支持。

洪博艺
2023-03-14

如果使用MSVC构建,针对ARM或ARM64上的现代Windows(即不是Windows CE),那么基线功能集确实支持NEON(32位和64位),因此您根本不需要检查它们,您可以无条件地使用它们。(如果代码库是可移植的,您可能希望避免为其他架构编译该代码,例如使用常规预处理器定义。)因此,对于这种情况,检查_M_ARM_M_ARM64定义就足够了。

氦仅用于ARM处理器的M配置文件,即微控制器等,与A配置文件无关(用于“应用程序使用”)。

 类似资料:
  • 我在摇摆环境中使用javaFX 2.2和jdk1.6。我试图在J面板上显示浏览器,我成功地做到了这一点。我看到的唯一问题是,当我在没有javaFX2.2运行时环境的任何其他机器上运行我的应用程序时,它会卡住并且不显示任何错误消息。我如何确保javafx运行时环境。在执行 新JFX面板()之前,机器上是否可用 因为代码卡在上面的行。

  • 刚开始玩jdk9 - 并且有点卡在一开始: < li >下载并解压缩了eclipse-Java-neon-m4a-win32 < li >已安装java 9支持(通过市场中的免打扰) < li >下载并安装了jdk9u99(只有jdk,没有公共jre) 此时,我可以在默认的Java(8u 60)上运行eclipse,既可以使用JRE/JDK(eclipse . ini中的/out vm参数),也可

  • Gradle如何检测可选命令?我希望可以使用CreateStartScript执行一些附加任务,以添加一些基于staging和prod的类路径,但我不确定该怎么做。谁能给我指出正确的方向吗?说些像这样的话 “./gradlew clean build Staging”或“./gradlew clean build Prod”

  • 问题内容: 我正在使用Celery管理异步任务。但是,有时候,芹菜加工过程会停止,这不会导致任何任务被执行。我希望能够检查芹菜的状态,并确保一切正常,如果我发现任何问题,请向用户显示错误消息。从Celery Worker文档中看来,我可能可以使用ping或inspect进行此操作,但是ping感觉很笨拙,并且不清楚要使用的检查方式是否确切(如果inspect()。registered()为空?)。

  • 它在游戏和其他软件中的工作方式很有趣。 更准确地说,我在中要求解决方案。 类似于: 我的基本想法是在不同的DLL中编译库,并在运行时交换它们,但这似乎不是我的最佳解决方案。

  • 问题内容: 有什么方法可以检查Go程序是否在运行时启用了编译功能(例如,用于日志记录/信息目的)? 我检查了文档以及明显的位置(),但找不到任何东西。 问题答案: 据我所知,没有对此的简单检查,但是启用了 build标签后,您就可以利用它了。 我创建了一个新目录,并在其中放置了两个文件: : : 由于使用了build标签,将仅编译两个文件之一。 这也是围棋标准库是怎么做的(,),但由于这是一个内部