gpt4 book ai didi

c - 如何验证操作系统是否支持 avx2 指令

转载 作者:太空狗 更新时间:2023-10-29 15:26:32 35 4
gpt4 key购买 nike

我的配置是:Intel(R) Core(TM) i7-4702MQ CPU(采用 Haswell 架构)、Windows 8、Intel C++ Compiller XE 13.0。我想用 avx2 优化运行我的程序并放置编译标志:

/QaxCORE-AVX2, /QxCORE-AVX2

但是当我运行程序时出现错误:

Fatal Error: This program was not built to run in your system. Please verify that both the operating system and the processor support Intel(R) AVX2, BMI, LZCNT, HLE, RTM, and FMA instructions.

我运行页面上给出的 avx2 cpu 支持测试:How to detect new instruction support in the 4th generation Intel Core processor family .结果:

This CPU supports ISA extensions introduced in Haswell.

如何检查我的操作系统是否支持 avx2-extensions 以及可能导致错误的原因是什么?要使用 avx2 扩展,我需要同时设置 /QaxCORE-AVX2/QxCORE-AVX2 标志?

更新:如果我设置标志

/QxAVX

该程序已成功启动。

最佳答案

如果您想检查对一组特定寄存器的支持,您基本上有 2 个选项:

  • 使用 CPUid 扩展组装
  • 编译器提供的内置函数 (if)

编写检测支持哪些寄存器组的程序集是一项繁琐、冗长且可能容易出错的任务,更不用说程序集不能跨不同操作系统、不同 SoC 和不同 ABI 移植,还有 CPUid 的负担并非总是在所有 CPU 中以相同模式实现的指令,不同供应商甚至同一供应商的不同 CPU 系列有不同的方法来获取相同的信息;但这有一个很大的优势,它不受任何限制,如果你真的需要了解你的 CPU/SoC,汇编 + CPUid 相关的东西是要走的路。

现在,当您必须以内置函数的形式调查您的 cpu 能力时,gcc 和其他编译器会为您的基本需求实现一些功能,这意味着这些特殊函数将生成等效的汇编代码,并为您提供所需的答案.

使用gcc,AVX2的检查就像写字一样简单

...
if(__builtin_cpu_supports("avx2"))
{
...
}
...

文档:http://gcc.gnu.org/onlinedocs/gcc/X86-Built-in-Functions.html

对于 Visual Studio/msvc,有 __cpuid__cpuidex 等内在函数,您可以使用它们来检索相同的信息,这里是一个完整且有效的链接例子。

文档:http://msdn.microsoft.com/en-us/library/hskdteyh.aspx

关于c - 如何验证操作系统是否支持 avx2 指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25820290/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com