我已经看到有关如何使用FMA指令集的问题,但在我开始使用它们之前,我首先想知道我是否可以(我的处理器是否支持它们).我找到一篇帖子说我需要查看(在Linux上工作)的输出:

more /proc/cpuinfo

找出来.我明白了:

processor : 0

vendor_id : GenuineIntel

cpu family : 6

model : 30

model name : Intel(R) Xeon(R) CPU X3470 @ 2.93GHz

stepping : 5

cpu MHz : 2933.235

size : 8192 KB

physical id : 0

siblings : 4

core id : 0

cpu cores : 4

apicid : 0

initial apicid : 0

fpu : yes

fpu_exception : yes

cpuid level : 11

wp : yes

flags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni

dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm sse4_1 sse4_2 popcnt lahf_lm ida dts tpr_shadow vnmi flexpriority ept vpid

bogomips : 5866.47

clflush size : 64

cache_alignment : 64

address sizes : 36 bits physical, 48 bits virtual

看起来最有趣的是标志部分,但我不知道如果处理器支持这些指令,如何从该列表中找出.

有人知道如何找到它吗?谢谢.

解决方法:

这是一个古老的问题,但仍然是一个相关的问题.

我假设你想在编译时用C/C++检测它.

FP_FAST_FMA宏不是检测FMA指令集的可靠方法.该宏在“math.h”/< cmath>中定义.如果std :: fma比x * y z快,如果它是基于FMA指令集的内部函数,则可能.否则它将使用非常慢的非内在函数.现在在2016年,GCC的默认glibc / libstdc定义了这个宏,但大多数其他标准库实现都没有(包括LLVM libc,ICC和MSVC).这并不意味着如果可能的话,他们不会将std :: fma实现为内在函数,他们只是忘了定义这个宏.

可靠的FMA检测

要在编译时可靠地检测FMA(或任何指令集),您需要使用指令集特定的宏.这些宏由编译器基于所选择的目标体系结构和/或指令集来定义.

有一个支持FMA / FMA3的__FMA__宏,以及支持AMD FMA4的__FMA4__宏. GCC,clang和ICC确实对它们进行了定义.

不幸的是,MSVC没有定义除__AVX__和__AVX2__之外的任何指令集特定的宏.

交叉编译器FMA检测

对于英特尔处理器,FMA在Intel Haswell之前与AVX2一起推出.

对于AMD处理器来说,事情有点混乱. F004在0700年推出了AVX和XOP.FMA3(Intel FMA等效版)于AMD Piledriver推出.您可以在编译时通过FMA(__FMA__宏)和BMI(__BMI__宏)指令集来区分Piledriver与其前身Bulldozer.不幸的是,MSVC没有定义.

然而,与英特尔处理器一样,如果存在AVX2,所有AMD处理器都支持FMA / FMA3.

如果您希望交叉编译器检测目标体系结构是否支持FMA / FMA3,则必须检测__AVX2__宏,因为如果启用了AVX2,它将由所有主要编译器(包括MSVC)定义:

#if !defined(__FMA__) && defined(__AVX2__)

#define __FMA__ 1

#endif

遗憾的是,没有可靠的方法只使用__AVX__和__AVX2__宏来检测AMD FMA4.

笔记

只有在编译器启用FMA指令时,才能在程序中使用FMA指令.在GCC和clang中,您需要设置正确的目标体系结构(如-march = haswell)或手动启用带有-mfma标志的FMA指令集. ICC使用-xavx2标志自动启用FMA. MSVC使用/ arch:AVX2选项自动启用FMA.

AMD宣布将在未来放弃对FMA4的支持.

标签:linux,x86,intel,processor,fma

来源: https://codeday.me/bug/20190716/1479064.html

如何用linux指令集,linux – 如何知道我是否可以使用FMA指令集进行编译?相关推荐

  1. linux perl模块检测,Linux有问必答:如何用Perl检测Linux的发行版本

    提问:我需要写一个Perl程序,它会包含Linux发行版相关的代码.为此,Perl程序需要能够自动检测运行中的Linux的发行版(如Ubuntu.CentOS.Debian.Fedora等等),以及它 ...

  2. 怎么用vm安装linux系统,如何用虚拟机安装linux系统

    原标题:如何用虚拟机安装linux系统 相信大家的电脑都是win10的操作系统 昨天,小编作死了一下 把原来的win10家庭版卸了 之后制作了一个启动盘 重装了另一个版本的win10系统 (还好电脑没 ...

  3. 【Android NDK 开发】NDK 交叉编译 ( NDK 函数库目录 | Linux 交叉编译环境搭建 | 指定头文件目录 | 指定函数库目录 | 编译 Android 命令行可执行文件 )

    文章目录 I . NDK platforms 目录下的 函数库 II . Ubuntu 配置 NDK 交叉编译环境 III . 同时指定编译的头文件和库文件 IV . 指定编译的头文件 V . 指定编 ...

  4. (一)专题介绍:移动端安卓手机改造成linux服务器linux服务器中安装软件、部署前后端分离项目实战

    快捷目录 前言 一.涉及到的相关技术简介 二.具体实现过程及踩坑杂谈 1.安卓手机改造成linux系统实现方案 2.改造后的手机Linux中软件的安装 3.手机Linux中安装MySQL5.7踩坑实录 ...

  5. nvidia命令不可用linux,在Linux命令行下如何正确配置nVIDIA显卡

    在图形芯片领域,nVidia是一个后来者,它的历史仅相当于ATi的一半.1993年初,NVIDIA 由 Jen-Hsun Huang,,Chris Malachowsky和 Curtis Priem ...

  6. 20155301 滕树晨linux基础——linux进程间通信(IPC)机制总结

    20155301 滕树晨linux基础--linux进程间通信(IPC)机制总结 共享内存 共享内存是在多个进程之间共享内存区域的一种进程间的通信方式,由IPC为进程创建的一个特殊地址范围,它将出现在 ...

  7. 如何制作linux文件系统,linux文件系统制作(一)

    文件制作4步骤 一.准备制作(创建系统目录) 二.编译busybox(制作文件系统的必备工具) 三.制作文件系统(添加必备的文件,制作镜像) 四.完善文件系统(根据需要,移植更多的应用程序) step ...

  8. 【Linux 内核】调度器 ① ( 调度器概念 | 调度器目的 | 调度器主要工作 | 调度器位置 | 进程优先级 | 抢占式调度器 | Linux 进程状态 | Linux 内核进程状态 )

    文章目录 一.调度器 0.调度器概念 1.调度器目的 2.调度器主要工作 3.调度器位置 4.进程优先级 5.抢占式调度器 二.Linux 内核进程状态 API 简介 三.Linux 进程状态 一.调 ...

  9. 在Windows里备份Linux分区,在Windows里分出Linux分区(Linux分区).pdf

    在Windows里分出Linux分区(Linux分区) ks2886v的个人空间 分区 作者:红联 分区 和大部分同学一样,我的电脑全部都是FAT32格式和NTFS格式,之前并没有考虑其他的系统,也 ...

最新文章

  1. 用开满鲜花的情怀对待每一份求知欲
  2. 模拟一个连接来自搜索引擎
  3. anaconda和vscode配置python_vscode配置anaconda3的方法步骤
  4. Scala集合数据结构特点
  5. 离散数学实验题目-关系
  6. 非科班出身,如何成为程序员?
  7. centos7火狐浏览器上不了网_网络问题备忘:能ping通,就是上不了网
  8. html形状圆形,html – 使用CSS的圆形标记形状
  9. 深入理解Nginx~文件路径的定义
  10. 股票指标php源码,自编技术指标公式源码(一)_股票学习网
  11. 联想电脑无法正常开机常见现象和方案汇总(拯救者R7000)
  12. 一款好看透明个人主页源码
  13. 百度地图、腾讯地图、高德地图经纬度转换
  14. css垂直居中怎么设?文字上下居中和图片垂直居中
  15. st7789 旋转_有没有人调过 ST7789V驱动的显示屏啊
  16. YOLO v5与双目测距结合,实现目标的识别和定位测距
  17. Android面试(下篇)
  18. 【学术写作规范】论文写作注意事项
  19. 实时频谱分析仪作下变频器的技术实现
  20. 安卓手机管理_七色米ERP(七色米ERP进销存管理)V1.2.1 安卓手机版

热门文章

  1. 银行降转账额度 “余额宝”要当心了
  2. 华为18级工程师耗时三年才总结出这份Java亿级高并发核心编程手册
  3. SDOI2013 淘金
  4. DR模式——LVS负载均衡群集
  5. Centos 7 无法上网的解决办法
  6. 液晶面板价格继续下跌,大屏电视跌幅更大,小屏跌无可跌
  7. 云服务器同账号不同地域数据迁移的方法
  8. 【学习笔记】GPS测量与数据处理(观测值的线性组合(单差、双差、三差))
  9. 数组中元素旋转移位的三种实现方法 --By LXW
  10. 如何利用Pycharm将工程文件上传到服务器