小编Tom*_*y95的帖子

为什么 sqrtsd 指令的延迟会根据输入而变化?英特尔处理器

好吧,在Intel 的内在指南中指出,名为“sqrtsd”的指令的延迟为 18 个周期。

我用自己的程序对其进行了测试,例如,如果我们将 0.15 作为输入,则它是正确的。但是当我们取 256(或任何 2^x)个数字时,延迟只有 13。这是为什么呢?

我的一个理论是,由于 13 是“sqrtss”的延迟,它与“sqrtsd”相同,但在 32 位浮点上完成,那么也许处理器足够聪明,可以理解 256 可以适应 32 位,因此使用该版本而 0.15 需要完整的 64 位,因为它不能以有限的方式表示。

我正在使用内联汇编来完成它,这是使用 gcc -O3 和 -fno-tree-vectorize 编译的相关部分。

static double sqrtsd (double x) {
    double r;
    __asm__ ("sqrtsd %1, %0" : "=x" (r) : "x" (x));
    return r;
}
Run Code Online (Sandbox Code Playgroud)

c performance assembly intel cpu-architecture

10
推荐指数
1
解决办法
607
查看次数

标签 统计

assembly ×1

c ×1

cpu-architecture ×1

intel ×1

performance ×1