链接:https://stackoverflow.com/questions/28939652/how-to-detect-sse-sse2-avx-avx2-avx-512-avx-128-fma-kcvi-availability-at-compile

Most compilers will automatically define:

__SSE__
__SSE2__
__SSE3__
__AVX__
__AVX2__

etc, according to whatever command line switches you are passing. You can easily check this with gcc (or gcc-compatible compilers such as clang), like this:

$ gcc -msse3 -dM -E - < /dev/null | egrep "SSE|AVX" | sort
#define __SSE__ 1
#define __SSE2__ 1
#define __SSE2_MATH__ 1
#define __SSE3__ 1
#define __SSE_MATH__ 1

or:

$ gcc -mavx2 -dM -E - < /dev/null | egrep "SSE|AVX" | sort
#define __AVX__ 1
#define __AVX2__ 1
#define __SSE__ 1
#define __SSE2__ 1
#define __SSE2_MATH__ 1
#define __SSE3__ 1
#define __SSE4_1__ 1
#define __SSE4_2__ 1
#define __SSE_MATH__ 1
#define __SSSE3__ 1

or to just check the pre-defined macros for a default build on your particular platform:

$ gcc -dM -E - < /dev/null | egrep "SSE|AVX" | sort
#define __SSE2_MATH__ 1
#define __SSE2__ 1
#define __SSE3__ 1
#define __SSE_MATH__ 1
#define __SSE__ 1
#define __SSSE3__ 1

More recent Intel processors support AVX-512, which is not a monolithic instruction set. One can see the support available from GCC (version 6.2) for two examples below.

Here is Knights Landing:

$ gcc -march=knl -dM -E - < /dev/null | egrep "SSE|AVX" | sort
#define __AVX__ 1
#define __AVX2__ 1
#define __AVX512CD__ 1
#define __AVX512ER__ 1
#define __AVX512F__ 1
#define __AVX512PF__ 1
#define __SSE__ 1
#define __SSE2__ 1
#define __SSE2_MATH__ 1
#define __SSE3__ 1
#define __SSE4_1__ 1
#define __SSE4_2__ 1
#define __SSE_MATH__ 1
#define __SSSE3__ 1

Here is Skylake AVX-512:

$ gcc -march=skylake-avx512 -dM -E - < /dev/null | egrep "SSE|AVX" | sort
#define __AVX__ 1
#define __AVX2__ 1
#define __AVX512BW__ 1
#define __AVX512CD__ 1
#define __AVX512DQ__ 1
#define __AVX512F__ 1
#define __AVX512VL__ 1
#define __SSE__ 1
#define __SSE2__ 1
#define __SSE2_MATH__ 1
#define __SSE3__ 1
#define __SSE4_1__ 1
#define __SSE4_2__ 1
#define __SSE_MATH__ 1
#define __SSSE3__ 1

Intel has disclosed additional AVX-512 subsets (see ISA extensions). GCC (version 7) supports compiler flags and preprocessor symbols associated with the 4FMAPS, 4VNNIW, IFMA, VBMI and VPOPCNTDQ subsets of AVX-512:

for i in 4fmaps 4vnniw ifma vbmi vpopcntdq ; do echo "==== $i ====" ; gcc -mavx512$i -dM -E - < /dev/null | egrep "AVX512" | sort ; done
==== 4fmaps ====
#define __AVX5124FMAPS__ 1
#define __AVX512F__ 1
==== 4vnniw ====
#define __AVX5124VNNIW__ 1
#define __AVX512F__ 1
==== ifma ====
#define __AVX512F__ 1
#define __AVX512IFMA__ 1
==== vbmi ====
#define __AVX512BW__ 1
#define __AVX512F__ 1
#define __AVX512VBMI__ 1
==== vpopcntdq ====
#define __AVX512F__ 1
#define __AVX512VPOPCNTDQ__ 1

如何在编译时判断是否支持SSE/SSE2/AVX/AVX2/AVX-512相关推荐

  1. ffmpeg编译时添加freetype支持,用于在视频中添加文字

    现在对ffmpeg的学习到了往视频指定位置添加对应文字的时候了. 发现添加文字,用的是drawtext滤镜,需要在编译ffmpeg的时候,添加–enable-libfreetype. 为此先编译fre ...

  2. 调试 configure--当程序不能编译时怎么办

    http://www.ibm.com/developerworks/cn/linux/l-debcon/ 现在许多开放源代码的程序都会附带有 configure 脚本.这种脚本的用途之一是自动进行对目 ...

  3. Faiss(16):编译时添加对AVX512指令的支持

    1. 说明 在对Faiss CPU profiling分析时对libfaiss.o进行反汇编发现该程序没有用到avx512指令进行优化,而该指令在进行浮点运算时相比其他指令集会有更好的效率和速度,故在 ...

  4. cmake编译时支持gdb调试

    一般在调用./configure时,可以通过设置CXXFLAGS或者CFLAGS使程序可以支持调试,就是可以用GDB查看程序运行的信息,但在cmake编译时,在cmake过程和后面的make及make ...

  5. 【Groovy】Groovy 语言特点简介 ( 支持 Java 语法 | 支持 Java 虚拟机 | Groovy 语言是动态语言 | Groovy 扩展 JDK | 编译时元编程 )

    文章目录 一.Groovy 支持 Java 语法 二.Groovy 支持 Java 虚拟机 三.Groovy 语言是 动态语言 四.Groovy 扩展 JDK 五.Groovy 编译时元编程 一.Gr ...

  6. 【错误记录】Android 编译时技术版本警告 ( 注解处理器与主应用支持的 Java 版本不匹配 )

    文章目录 一.报错信息 二.问题分析 三.解决方案 一.报错信息 在使用 Android 编译时技术 , 涉及 编译时注解 , 注解处理器 ; 开发注解处理器后 , 编译报如下警告 ; 该警告不会影响 ...

  7. codeblocks和vscode编译时弹出不支持的16位程序解决方案

    codeblocks和vscode编译时弹出不支持的16位程序解决方案 参考文章: (1)codeblocks和vscode编译时弹出不支持的16位程序解决方案 (2)https://www.cnbl ...

  8. swift-annotations:java编译时警告主版本 52 比 51 新, 此编译器支持最新的主 版本。

    今天在java bean代码中加入swift的注释时,编译时提示了警告: [javac] 警告: J:\facelog\db\sql2java\lib\swift-annotations-0.23.1 ...

  9. 什么叫编译时和运行时

    以前经常听说编译时和运行时的概念.但没太搞明白具体代表啥意思.后面花了点时间研究了下.总算知道个大概意思了. 编译时 编译时顾名思义就是正在编译的时候.那啥叫编译呢?就是编译器帮你把源代码翻译成机器能 ...

最新文章

  1. 替换WCF默认序列化方式
  2. GEEK学习笔记— —程序猿面试宝典笔记(二)
  3. 【Python】Spyder编译器“updating indices”问题导致程序无法运行或调试
  4. Cityscapse 数据集使用 + 训练 STDC踩坑
  5. softmax with cross-entropy loss求导(转载+细节整理)
  6. Ubuntu安装并使用sogou输入法
  7. oracle中的自带函数,求完整的ORACLE自带函数文档
  8. CSS设置背景透明字体不透明
  9. 一种极端思维引起的幻觉
  10. python 迭代器 生成器
  11. 华为应用市场AppGallery Connect研习社·直播:百万开发者打造优质应用的奥秘
  12. 数据增广Data Augmentation 动手学深度学习v2
  13. 2019年系统分析师和系统架构师考试经验
  14. cad标注样式快捷键_CAD快速入门(二十三):标注样式
  15. 基于SSH框架的人力资源管理系统设计与实现
  16. 如何安装火狐浏览器插件
  17. 关于百度BAE搭建微信公众平台git的使用
  18. Linux下编译链接动态库符号问题
  19. MonthCalendar
  20. ES6数据部分(字符串,数组,对象,symbol,set,map)

热门文章

  1. apache-Tomcat 8.5.39安装包 安装过程以及启动文件详解
  2. 你的工作单休,但是工资双休
  3. vue-router 路由 pushstate replacestate popstate 详解
  4. 多线程下载器 IDM
  5. Laravel 使用PHP_XLSXWriter实现大数据量Excel导出
  6. RabbitMQ六种工作模式
  7. (邱维声)高等代数课程笔记:行列式的性质
  8. Tomcat优化经验之谈
  9. (一)LAMP (CGI,fastcgi, PHP,基于php的LAMP架构,php连接数据库)
  10. Apache rewrite URL静态化配置与参数详解