首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >防止immintrin.h在不支持avx512的情况下编译时包含avx512头

防止immintrin.h在不支持avx512的情况下编译时包含avx512头
EN

Stack Overflow用户
提问于 2022-12-04 19:23:45
回答 1查看 16关注 0票数 0

我在没有AVX512支持的情况下编译,但是我注意到immintrin.h拖着吨的loforAVX512。

代码语言:javascript
复制
/usr/lib/gcc/x86_64-linux-gnu/11/include/avx512fintrin.h

我试过检查指定行军选项是否有帮助,但似乎没有帮助。

代码语言:javascript
复制
cat avx512_include.cpp 
#include <immintrin.h>
int main() {}

g++ -march=core2  -E -P avx512_include.cpp | wc -l
34365

g++ -march=skylake-avx512  -E -P avx512_include.cpp | wc -l
34257

我知道理论上我可以绕开gcc的分期付款,并祈祷当我从avx512标题中删除所有内容时,它会起作用,但如果有,我正在寻找一种支持的方式。

我试图查看gcc的头部,看看是否有一些宏检查是否包括avx512头,但它们似乎是无条件包含的。

我试着找gcc的行军牌,找不到,如果有人知道更合适的标签旁边,请评论。

EN

回答 1

Stack Overflow用户

发布于 2022-12-04 21:15:00

GCC/clang支持__attribute__((target("avx512f")))在没有-march=的情况下编译的文件中使用AVX-512的内容,这意味着-mavx512f。因此,immintrin.h仍然必须引入AVX512定义。

但是,如果您尝试使用__m512i v = _mm512_set1_ps(1.0);而不启用它,您仍然会从GCC和clang那里得到编译错误。看见

为了缩短编译时间,可能可以选择预编译头。大多数Linux发行版在默认情况下都不会这样做。

或者在完全不使用AVX-512的项目中,你可以破解一些东西,这样标题就不会被包含,或者至少不会被编译。

最小的干扰可能是在文件第一次包含之前定义GCC的包含保护宏。GCC的预处理器仍将读取文件,但编译器本身不会在文件上花费任何时间。就大小而言,avx512fintrin.h和avx512vlintrin.h是最大的;AMX和VNNI等都是小得多的标题,因此可能只值得使用avx512*.h

代码语言:javascript
复制
$ grep --no-filename '#define.*_INCLUDED$' /usr/lib/gcc/x86_64-pc-linux-gnu/12.2.0/include/avx512*
#define _AVX5124FMAPSINTRIN_H_INCLUDED
#define _AVX5124VNNIWINTRIN_H_INCLUDED
#define _AVX512BF16INTRIN_H_INCLUDED
#define _AVX512BF16VLINTRIN_H_INCLUDED
#define _AVX512BITALGINTRIN_H_INCLUDED
#define _AVX512BWINTRIN_H_INCLUDED
#define _AVX512CDINTRIN_H_INCLUDED
#define _AVX512DQINTRIN_H_INCLUDED
...

可能会将其重定向到skip-avx512.h

避免对这些行进行预处理的更积极的方法是制作/usr/lib/gcc/x86_64-pc-linux-gnu/12.2.0/include/immintrin.h的自定义版本,只需删除avx512*头的所有#include行,以及对于您来说太新而不想使用的avxvnniintrin.hamx*shaintrin.h等其他行。

也许叫它"custom_gcc_intrin.h",把它包括进来,而不是immintrin.h?或者称其为immintrin.h,但将其放在特定项目中的某个位置,首先将其作为包含路径查找?

不要修改immintrin.h的系统副本或设置默认情况下使用修改后的版本;这可能会在将来的某个时候咬你一口,当您试图编译具有AVX-512代码路径并具有运行时检测的内容时。如果你忘记这些年前的修改,你会非常困惑为什么你的GCC被打破了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74680139

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档