- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我看到过有关如何使用 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__
用于 FMA/FMA3 支持的宏,以及 __FMA4__
用于 AMD FMA4 支持的宏。 GCC、clang 和 ICC 确实定义了它们。
不幸的是,除了 __AVX__
之外,MSVC 没有定义任何指令集特定的宏。和 __AVX2__
.
交叉编译器FMA检测
对于 Intel 处理器,FMA 由 Intel Haswell 与 AVX2 一起引入.
对于 AMD 处理器,情况有点困惑。 FMA4 由 AMD Bulldozer 与 AVX 和 XOP 一起引入. FMA3(相当于英特尔 FMA)由 AMD Piledriver 引入.您可以在编译时通过 FMA(__FMA__
宏)和 BMI(__BMI__
宏)指令集将 Piledriver 与其前身 Bulldozer 区分开来。不幸的是,MSVC 两者都没有定义。
不过,与 Intel 处理器一样,如果存在 AVX2,所有 AMD 处理器都支持 FMA/FMA3。
如果要交叉编译检测目标架构是否支持FMA/FMA3,必须检测__AVX2__
宏,因为如果启用了 AVX2,它由所有主要编译器(包括 MSVC)定义:
#if !defined(__FMA__) && defined(__AVX2__)
#define __FMA__ 1
#endif
不幸的是,没有可靠的方法仅使用 __AVX__
来检测 AMD FMA4和 __AVX2__
宏。
注意事项
FMA 指令实际上只有在编译器启用时才在您的程序中可用。在 GCC 和 clang 中,您需要设置正确的目标架构(如 -march=haswell
) 或使用 -mfma
手动启用 FMA 指令集旗帜。 ICC 使用 -xavx2
自动启用 FMA旗帜。 MSVC 使用 /arch:AVX2 /fp:fast /O2
启用 FMA选项。
AMD 宣布 future 将放弃对 FMA4 的支持。
关于linux - 我怎么知道我是否可以使用 FMA 指令集进行编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16348909/
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题? Update the question所以它是on-topic对于堆栈溢出。 9年前关闭。 Improve this que
我有一堆 php 脚本计划在 CentOS 机器上的 cron 中每隔几分钟运行一次。我希望每个脚本在启动时自我检查它的前一个实例是否仍在运行,如果是则停止。 最佳答案 我这样做是为了管理任务并确保它
是否有 bash 命令、程序或 libusb 函数(尽管我没有找到)来指示 USB 设备的 OUT 或 IN 端点是什么? 例如,libusb_interface_descriptor(来自 libu
我如何知道 NSTextField 何时成为第一响应者(即当用户单击它来激活它时,但在他们开始输入之前)。我尝试了 controlTextDidBeginEditing 但直到用户键入第一个字符后才会
我怎么知道我的代码何时完成循环?完成后我还得再运行一些代码,但只有当我在那里写的所有东西都完成后它才能运行。 obj.data.forEach(function(collection) {
我正在使用音频标签,我希望它能计算播放了多少次。 我的代码是这样的: ; ; ; 然后在一个javascript文件中 Var n=0; function doing(onplaying)
我正在尝试向 Package-Explorer 的项目上下文菜单添加一个子菜单。但是,我找不到该菜单的 menuid。 所以我的问题是如何在 eclipse 中找到 menuid? 非常感谢您的帮助。
我有一个名为“下一步”的按钮,它存在于几个 asp.net 页面中。实际上它是在用户控件中。单击“下一步”时,它会调用 JavaScript 中的函数 CheckServicesAndStates。我
我正在尝试在 Visual Studio 中使用 C++ 以纳秒为单位计算耗时。我做了一些测试,结果总是以 00 结尾。这是否意味着我的处理器(Ryzen 7-1800X)不支持 ~1 纳秒的分辨率,
我有一个自定义 ListView ,其中包含一些元素和一个复选框。当我点击一个按钮时。我想知道已检查的元素的位置。下面是我的代码 public class Results extends ListAc
如何在使用 J2ME 编写的应用程序中获取网络运营商名称? 我最近正在尝试在 Nokia s40 上开发一个应用程序,它应该具有对特定网络运营商的独占访问权限。有没有这样的API或库? 最佳答案 没有
我使用服务器客户端组件,当在此组件的 TransferFile 事件中接收文件时,我使用警报消息组件。所以我希望,如果用户单击警报消息,程序将继续执行 TransferFile 事件中的代码,以在单击
如果我创建一个类A具有一些属性,例如 a, b, c我创建对象 A x1; A x2; A x3; ... A xN 。有没有办法在同一个类中创建一个方法来检索我创建的所有对象?我想创建类似 stat
我正在制作一个应用程序,其中包含相同布局的 81 个按钮。它们都被称为我创建的名为“Tile”的对象。问题是这些图 block 存储在数组中,因此我需要知道以 int 格式单击了哪个按钮才能调用图 b
UIProgressView有这个setProgress:animated: API。 有没有办法确切知道动画何时停止? 我的意思是这样的? [myProgress setProgress:0.8f
我正在使用两个 jQuery 队列,我希望其中一个队列在另一个队列完成后出队。我怎么知道第一个是否完成?我应该使用第三个队列吗?! 这是我所拥有的: var $q = $({}); $q.que
jQuery 中有没有一种方法可以知道是否至少有一个复选框已被选中? 我有一个包含很多复选框的表单,每个复选框都不同。 我需要一种 jQuery 的方式来表达这样的内容,这就是逻辑: If at le
给定 2 个选择 100 50 100 在这两种情况下,我都想在 .example 中获取数字,使用相同的选择器或者以某种方式知道 .no-text 和 之间的区别。带文字 执行
我在我的应用程序中使用 System.ComponentModel.BindingList 作为 DataGridView.DataSource。该列表非常大,需要几秒钟才能绘制到 DataGridV
我想知道用户在 Android 中选择的默认键盘。我知道我可以使用 InputMethodManager 访问已启用的输入法列表,但我想知道用户当前使用的是哪一个。 到目前为止,我已经尝试获取当前的输
我是一名优秀的程序员,十分优秀!