gpt4 book ai didi

clr - Intel x64 FPU 中的 NaN 算法有多慢?

转载 作者:行者123 更新时间:2023-12-04 18:52:49 24 4
gpt4 key购买 nike

提示和指控比比皆是,在硬件 FPU 中使用 NaN 进行算术可能“慢”。特别是在现代 x64 FPU 中,例如在 Nehalem i7 上,这仍然是真的吗?无论操作数的值如何,FPU 乘法都会以相同的速度产生吗?

我有一些插值代码可能会偏离我们定义的数据的边缘,我正在尝试确定是否更快地检查此处和任何地方的 NaN(或其他一些标记值),或者只是在方便的点。

是的,我将对我的特定情况进行基准测试(它可能完全由其他东西控制,例如内存带宽),但我很惊讶没有在某处看到一个简洁的摘要来帮助我的直觉。

如果它对生成的 NaN 的风格有所不同,我将从 CLR 中执行此操作。

最佳答案

对于它的值(value),使用 SSE 指令 mulsdNaN几乎与常量 4.0 一样快(通过公平的掷骰子选择,保证是随机的)。

这段代码:

for (unsigned i = 0; i < 2000000000; i++)
{
double j = doubleValue * i;
}

使用 clang 生成此机器代码(在循环内)(我假设 .NET 虚拟机也可以使用 SSE 指令):
movsd     -16(%rbp), %xmm0    ; gets the constant (NaN or 4.0) into xmm0
movl -20(%rbp), %eax ; puts i into a register
cvtsi2sdq %rax, %xmm1 ; converts i to a double and puts it in xmm1
mulsd %xmm0, %xmm1 ; multiplies xmm0 (the constant) with xmm1 (i)
movsd %xmm1, -32(%rbp) ; puts the result somewhere on the stack

经过 20 亿次迭代, NaN (由来自 NAN 的 C 宏 <math.h> 定义)版本在我的 i7 上执行时间减少了大约 0.017 秒。差异可能是由任务调度程序引起的。

所以公平地说,它们的速度完全一样。

关于clr - Intel x64 FPU 中的 NaN 算法有多慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3606054/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com