gpt4 book ai didi

CPU 特性和编译器符号

转载 作者:太空宇宙 更新时间:2023-11-03 23:54:18 25 4
gpt4 key购买 nike

我有一个关于编译器设置符号的问题,特别是 CPU 功能标志(如 SSE、AES、AVX)的实际设置方式。例如,如果我用 -mavx 调用 gcc,__AVX__ 符号集是否不管将要构建代码的系统是否实际支持 AVX 指令,或者是否它之前检查过吗?

我问这个问题是因为我需要根据 CPU 功能构建特定的代码路径,并希望将其自动化,以便在基于构建系统的编译时确定正确的路径,而不是手动启用所需的功能。但是由于我拥有的唯一 CPU 基本上支持所有功能,所以我无法测试我的上述假设(第一世界问题,我知道)

将会有很多代码,所以简单地保留所有内容并在运行时进行分支是 Not Acceptable - 并且假设我的库无论如何都会在给定系统上使用之前构建。

我的意思是,在最坏的情况下,我可以通过将 gcc 参数包装在可识别 cpuid 的脚本中来强制执行此行为,但如果 gcc 自动执行它,那将是更可取的。那么有人知道吗?


我最感兴趣的是 gcc 对此的看法,但我也很想知道其他 C 编译器的行为方式。

最佳答案

如果您传递 -mavx 标志,__AVX__始终设置为生成的编译(并且生成的代码可能无法运行非 AVX 机器)。

如果传递 -march=native 标志,gcc 将启用构建机器支持的指令集,因此只有构建机器支持时才会设置 __AVX__

关于CPU 特性和编译器符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11805791/

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