如何在编译时判断是否支持SSE/SSE2/AVX/AVX2/AVX-512
链接: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相关推荐
- ffmpeg编译时添加freetype支持,用于在视频中添加文字
现在对ffmpeg的学习到了往视频指定位置添加对应文字的时候了. 发现添加文字,用的是drawtext滤镜,需要在编译ffmpeg的时候,添加–enable-libfreetype. 为此先编译fre ...
- 调试 configure--当程序不能编译时怎么办
http://www.ibm.com/developerworks/cn/linux/l-debcon/ 现在许多开放源代码的程序都会附带有 configure 脚本.这种脚本的用途之一是自动进行对目 ...
- Faiss(16):编译时添加对AVX512指令的支持
1. 说明 在对Faiss CPU profiling分析时对libfaiss.o进行反汇编发现该程序没有用到avx512指令进行优化,而该指令在进行浮点运算时相比其他指令集会有更好的效率和速度,故在 ...
- cmake编译时支持gdb调试
一般在调用./configure时,可以通过设置CXXFLAGS或者CFLAGS使程序可以支持调试,就是可以用GDB查看程序运行的信息,但在cmake编译时,在cmake过程和后面的make及make ...
- 【Groovy】Groovy 语言特点简介 ( 支持 Java 语法 | 支持 Java 虚拟机 | Groovy 语言是动态语言 | Groovy 扩展 JDK | 编译时元编程 )
文章目录 一.Groovy 支持 Java 语法 二.Groovy 支持 Java 虚拟机 三.Groovy 语言是 动态语言 四.Groovy 扩展 JDK 五.Groovy 编译时元编程 一.Gr ...
- 【错误记录】Android 编译时技术版本警告 ( 注解处理器与主应用支持的 Java 版本不匹配 )
文章目录 一.报错信息 二.问题分析 三.解决方案 一.报错信息 在使用 Android 编译时技术 , 涉及 编译时注解 , 注解处理器 ; 开发注解处理器后 , 编译报如下警告 ; 该警告不会影响 ...
- codeblocks和vscode编译时弹出不支持的16位程序解决方案
codeblocks和vscode编译时弹出不支持的16位程序解决方案 参考文章: (1)codeblocks和vscode编译时弹出不支持的16位程序解决方案 (2)https://www.cnbl ...
- swift-annotations:java编译时警告主版本 52 比 51 新, 此编译器支持最新的主 版本。
今天在java bean代码中加入swift的注释时,编译时提示了警告: [javac] 警告: J:\facelog\db\sql2java\lib\swift-annotations-0.23.1 ...
- 什么叫编译时和运行时
以前经常听说编译时和运行时的概念.但没太搞明白具体代表啥意思.后面花了点时间研究了下.总算知道个大概意思了. 编译时 编译时顾名思义就是正在编译的时候.那啥叫编译呢?就是编译器帮你把源代码翻译成机器能 ...
最新文章
- 替换WCF默认序列化方式
- GEEK学习笔记— —程序猿面试宝典笔记(二)
- 【Python】Spyder编译器“updating indices”问题导致程序无法运行或调试
- Cityscapse 数据集使用 + 训练 STDC踩坑
- softmax with cross-entropy loss求导(转载+细节整理)
- Ubuntu安装并使用sogou输入法
- oracle中的自带函数,求完整的ORACLE自带函数文档
- CSS设置背景透明字体不透明
- 一种极端思维引起的幻觉
- python 迭代器 生成器
- 华为应用市场AppGallery Connect研习社·直播:百万开发者打造优质应用的奥秘
- 数据增广Data Augmentation 动手学深度学习v2
- 2019年系统分析师和系统架构师考试经验
- cad标注样式快捷键_CAD快速入门(二十三):标注样式
- 基于SSH框架的人力资源管理系统设计与实现
- 如何安装火狐浏览器插件
- 关于百度BAE搭建微信公众平台git的使用
- Linux下编译链接动态库符号问题
- MonthCalendar
- ES6数据部分(字符串,数组,对象,symbol,set,map)
热门文章
- apache-Tomcat 8.5.39安装包 安装过程以及启动文件详解
- 你的工作单休,但是工资双休
- vue-router 路由 pushstate replacestate popstate 详解
- 多线程下载器 IDM
- Laravel 使用PHP_XLSXWriter实现大数据量Excel导出
- RabbitMQ六种工作模式
- (邱维声)高等代数课程笔记:行列式的性质
- Tomcat优化经验之谈
- (一)LAMP (CGI,fastcgi, PHP,基于php的LAMP架构,php连接数据库)
- Apache rewrite URL静态化配置与参数详解