fma相关内容

我可以使用 AVX FMA 单元进行位精确 52 位整数乘法吗?

AXV2 没有任何大于 32 位源的整数乘法.它确实提供 32 x 32 -> 32 乘法,以及 32 x 32 -> 64 乘以1,但没有 64 位来源. 假设我需要一个输入大于 32 位但小于或等于 52 位的无符号乘法 - 我可以简单地使用浮点数 DP 乘法 或 FMA 指令,当整数输入和结果可以用 52 位或更少位表示时(即在范围内),输出是否为位精确[0, 2^52-1])? ..
发布时间:2022-01-06 12:54:49 其他开发

融合乘加和默认舍入模式

使用 GCC 5.3 以下代码与 -O3 -fma float mul_add(float a, float b, float c) {返回 a*b + c;} 产生以下组件 vfmadd132ss %xmm1, %xmm2, %xmm0退 我注意到 GCC 使用 -O3 已经在 GCC 4.8 中这样做了. 带有 -O3 -mfma 的 Clang 3.7 生成 vmulss % ..
发布时间:2021-12-18 23:22:42 其他开发

优化快速乘法但缓慢加法:FMA 和 doubledouble

当我第一次获得 Haswell 处理器时,我尝试实施 FMA 来确定 Mandelbrot 集.主要算法是这样的: intn = 0;for(int32_t i=0; i 这确定 n 个像素是否在 Mandelbrot 集中.所以对于双浮点,它运行超过 4 个像素(floatn = __m256d, intn = __m256i).这需要 4 次 SIMD 浮点乘法和 4 次 SIMD 浮点加 ..

我怎么知道我是否可以使用 FMA 指令集进行编译?

我看到了有关如何使用 FMA 指令集的问题,但在我开始使用它们之前,我首先想知道我是否可以(我的处理器是否支持它们).我发现一个帖子说我需要查看(在 Linux 上工作)的输出: more/proc/cpuinfo 来了解一下.我明白了: 处理器:0vendor_id : 正版英特尔CPU系列:6型号 : 30型号名称 : Intel(R) Xeon(R) CPU X3470 @ 2.93G ..
发布时间:2021-09-29 19:36:16 服务器开发

对于Intel Haswell上的XMM/YMM FP操作,可以使用FMA代替ADD吗?

此问题适用于Haswell上具有XMM/YMM寄存器的打包式单精度浮动运算. 因此,根据 awesome , awesome ,表由Agner Fog组合而成,我知道MUL可以在端口p0和p1上完成(recp吞吐量为0.5),而只有ADD可以在端口p1上完成(recp吞吐量为1).除了这个限制,我可以,但我也知道FMA可以在端口p0或p1上完成(recp吞吐量为0.5).因此,当FMA可以使 ..
发布时间:2020-07-22 23:45:47 其他开发

如何解决“非法指示"?对于vfmadd213ps?

我尝试了AVX内部函数.但这会导致"test.exe中0x00E01555的未处理异常:0xC000001D:非法指令." 我使用了Visual Studio2015.异常错误是在"vfmadd213ps ymm2,ymm1,ymm0"指令引起的. 我尝试设置"/arch:AVX"和"/arch:AVX2",但仍然导致错误. 下面是我的代码. #include ..
发布时间:2020-07-22 23:45:35 其他开发

如何从AVX寄存器中获取数据?

使用MSVC 2013和AVX 1,我在寄存器中有8个浮点数: __m256 foo = mm256_fmadd_ps(a,b,c); 现在我要为所有8个浮点数调用inline void print(float) {...}.看来 Intel AVX内部特性会使这变得相当复杂: print(_castu32_f32(_mm256_extract_epi32(foo, 0))); p ..
发布时间:2020-07-22 23:45:20 C/C++开发

C ++是否允许浮点表达式收缩?

浮点表达式有时可以在处理硬件上收缩,例如使用融合的乘法和加法作为单个硬件操作. 显然,使用这些不仅仅是实现细节,还受编程语言规范的约束.具体而言,C89标准不允许此类收缩,而在C99中,只要定义了某些宏,则允许此类收缩.请参阅此SO答案中的详细信息. 但是C ++呢?浮点收缩是不允许的吗?在某些标准中允许?普遍允许吗? 解决方案 摘要 允许进行收缩,但是为用户提供了一种禁 ..
发布时间:2020-07-22 23:44:06 C/C++开发

AVX2:512个浮点数组的计算点积

首先,我将是SIMD内部函数的一个完整的初学者. 从本质上讲,我有一个支持AVX2内部(Intel(R) Core(TM) i5-7500T CPU @ 2.70GHz)的CPU.我想知道计算大小为512的两个std::vector的点积的最快方法. 我已经在网上进行了一些挖掘,发现此和此堆栈溢出问题建议使用下面的函数__m256 _mm256_dp_ps(__m256 ..
发布时间:2020-07-22 23:43:59 C/C++开发

为什么AVX512-IFMA仅支持52位整数?

从该值可以推断出它使用与双精度浮点硬件相同的组件.但是double的尾数为53位,那么为什么AVX512-IFMA限制为52位? 解决方案 IEEE-754 double精度实际上只有52个显式存储的位,第53位(最高有效位)是隐式1. ..
发布时间:2020-06-12 19:23:41 其他开发

gcc -ffp-contract选项的区别

我有一个关于GNU GCC中的 -ffp-contract 标志的问题(参见 https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html )。 $ b $标志文档写成如下: -ffp-contract = off 禁用浮点表达式收缩。 -ffp-contract = fast 启用浮点表达式收缩,例如,如果目标对它们有本地支持,则会形成 ..
发布时间:2018-04-21 10:56:04 其他开发

GCC中的FMA3:如何启用

我有一个有AVX2和FMA3的i5-4250U。我正在测试我编写的Linux上GCC 4.8.1中的一些密集矩阵乘法代码。以下是我编译的三种不同方式的列表。 SSE2:gcc matrix.cpp -o matrix_gcc -O3 -msse2 -fopenmp AVX:gcc matrix.cpp - o matrix_gcc -O3 -mavx -fopenmp AVX2 ..
发布时间:2018-04-20 16:33:24 C/C++开发

使用浮点运算将浮点数转换为十进制数

我试图将浮点双精度值 x 转换为十二进制数,并且有12位(正确舍入)的有效数字。我假设 x 在10 ^ 110和10 ^ 111之间,这样它的十进制表示形式将是 x.xxxxxxxxxxxE110 。而且,为了好玩,我试图只使用浮点算法。 我到达下面的伪代码,其中所有操作都是双精度操作,符号 1e98 是距离数学10 ^ 98最近的两倍, 1e98_2 是离结果最近的两倍的数学减法10 ^ ..
发布时间:2017-12-21 22:00:16 其他开发

fma()如何实现

根据文档,有一个 fma( ) math.h 中的函数。这是非常好的,我知道FMA是如何工作的,以及如何使用它。但是,我不太确定这是如何实施的?我最感兴趣的是 x86 和 x86_64 架构。 有没有FMA的浮点(非向量)指令,也许按照IEEE-754 2008的定义? 是否使用FMA3或FMA4指令? / b> 是否有一个内在的因素来确保使用真实的FMA,当依赖精度时? ..
发布时间:2017-12-21 21:09:58 其他开发

我可以使用AVX FMA单元来执行比特精确的52位整数乘法吗?

AXV2没有任何大于32位的整数乘法。它提供了 32 x 32 - > 32 乘法,以及 64”乘以 1 ,但没有任何与64位来源。 假设我需要一个输入大于32位但小于或等于52位的无符号乘法 - 我可以简单地使用浮点数或FMA指令,并且当整数输入和结果的输出是精确的可以用52位或更少的位来表示(即在[0,2 ^ 52-1]的范围内)? 如果我希望所有的更普遍的情况如何产品的104位? ..
发布时间:2017-12-21 21:08:40 其他开发