问题标签 [fma]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
floating-point - 哪些算法从融合乘加中受益最多?
fma(a,b,c)
相当于a*b+c
除了它不舍入中间结果。
你能给我一些避免这种舍入的算法的例子吗?
这并不明显,因为我们避免的乘法后舍入往往比我们不避免的加法后舍入问题更少。
c++ - VS2010 SP1 是否只支持部分 AVX 指令集?
微软表示 VS2010 支持全套 AVX 指令:
... 在 VS2010 版本中,所有 AVX 功能和指令都通过内在和/arch:AVX
. ...
但我找不到任何用于融合乘加运算的内在函数
我需要使用_mm256_fmadd_ps
函数,但“immintrin.h”标题中缺少它。我真的很坚持。
c - CPU上的乘加`a = a * 2 + b`指令?
经典的乘加运算是a = a + b*c
. 但我目前想知道是否存在允许在 1 个时钟周期内对整数执行以下操作的指令:(a 和 b 是无符号 64 位整数unsigned long long int
:)
目前,我使用:
对于第一个和
对于第二个。而且我认为在 ASM 中每个都被翻译成 2 条指令。但是有没有办法使用 1 条 ASM 指令(以及英特尔 CPU 上的哪个指令集扩展)?
(我搜索那个是因为我做了数十亿次这个操作)
optimization - 乘法和加法函数
这个问题是关于 OpenCL 中可用的 mad 函数,它们承诺显着改进类型的计算:
如果用作mad(a,b,c)
并使用 cl-mad-enable 编译。
我已经尝试a + b * c + d * e
使用 mad 对非常大的尺寸进行计算,并期待有显着的改进。令人惊讶的是,它花了同样的时间。
如果有人有这方面的经验,我将不胜感激。我有一个应该可以工作的 jist,因为大多数资源都对mad()
. 注意:我使用的数据类型都是双精度的,如果它很重要,我的使用会mad
导致巨大的精度损失。
sse - 我在哪里可以找到 AMD FMA 4 内在函数的参考资料?
我正在尝试修改一段使用 SSE(128 位)调用的代码,以使用 Bulldozer Opteron 上的 256 位 FMA 功能。我似乎无法找到这些调用的内在函数。
这个论坛上的一些问题使用了这些内在函数(例如: 如何在 256 位 AVX 向量中找到水平最大值)
我发现了这个:http:
//msdn.microsoft.com/en-us/library/gg445140.aspx
和http://software.intel.com/sites/products/documentation/studio/composer/en-us/2011/ compiler_c/index.htm#intref_cls/common/intref_avx_fmadd_ps.htm
但我似乎无法在 AMD 开发人员文档中找到任何内容。
cuda - fmad=false 提供良好的性能
来自 Nvidia 发行说明:
我有两个内核 - 一个是纯粹的计算绑定,有很多乘法,而另一个是内存绑定。当我这样做时,我注意到我的计算密集型内核的性能持续提高(大约 5%)-fmad=false
......当我为我的内存绑定内核关闭它时,性能下降的百分比大致相同。因此,FMA 对我的内存绑定内核工作得更好,但是我的计算绑定内核可以通过关闭它来压缩一点性能。可能是什么原因?我的设备是 M2090,我使用的是 CUDA 4.2。
完整的编译选项:(
-arch,sm_20,-ftz=true,-prec-div=false,-prec-sqrt=false,-use_fast_math,-fmad=false
或者我只是删除fmad=false
,因为这是默认设置。
c - 有没有可以使用 libc 中的函数 fma 的场景?
我看到这个页面,发现有一个奇怪的浮动乘法相加 函数——fma
和fmaf
。它说结果是这样的:
并且该值是无限精度并四舍五入到结果格式。
但是,AFAICT我以前从未见过这样的三元运算。所以我想知道这个函数的自定义用法是什么。
floating-point - Z3:浮点 FMA 语义
Z3 为该基准返回了一个令人满意的模型:http ://rise4fun.com/Z3/Bnv5m
但是,该查询本质上是断言a*b+0
等同于a*b
使用 FMA 指令,我相信它适用于 IEEE 浮点数。请注意,基准明确确保既不是a
也不b
是NaN
。
我的 FMA 编码有问题吗?
c - 如何在 SSE/AVX 中使用融合乘加 (FMA) 指令
我了解到,一些 Intel/AMD CPU 可以同时使用 SSE/AVX 进行乘法和加法:
sandy-bridge 和 haswell SSE2/AVX/AVX2 的每个周期的 FLOPS。
我想知道如何在代码中做到最好,我也想知道它是如何在 CPU 内部完成的。我的意思是超标量架构。假设我想在 SSE 中做一个很长的总和,如下所示:
我的问题是如何将其转换为同时乘法和加法?数据可以依赖吗?我的意思是 CPU 可以_mm_add_ps(sum, _mm_mul_ps(a1, b1))
同时执行还是乘法和加法中使用的寄存器必须是独立的?
最后,这如何适用于 FMA(与 Haswell)?是_mm_add_ps(sum, _mm_mul_ps(a1, b1))
自动转换成单条FMA指令还是微操作?
linux - 我如何知道我是否可以使用 FMA 指令集进行编译?
我已经看到有关如何使用 FMA 指令集的问题,但在我开始使用它们之前,我首先想知道我是否可以(我的处理器是否支持它们)。我发现一个帖子说我需要查看(在 Linux 上工作)的输出:
找出答案。我明白了:
最有趣的是标志部分,但我不确定如何从该列表中找出处理器是否支持这些指令。
有人知道如何找出来吗?谢谢你。