0

我目前正在测量 FLOPS 中某些代码的性能。这段代码提供了一些算术否定指令,如下所示:

d = -a

其中da是浮点变量。我目前使用的架构确实有特定的否定指令。我是否必须考虑这种操作来衡量 FLOPS?什么样的操作会导致 FLOPS?有什么约定吗?

4

3 回答 3

2

正如@Andrey 所说,确保您应该检查反汇编代码。

但总的来说,是的,指令可能会在 FPU 上执行。它只是翻转了一点,所以它可以在一个整数单元上完成,但是由于您正在对浮点值进行操作,这些很可能已经加载到 FP 寄存器中,因此会有相当多的开销将它们移动到通用寄存器,翻转位并将它们移回。

我不知道是否有关于“什么应该算作 FLOP”的完整通用指南,但这很可能是在 FPU 上执行的指令,因此它与其他 FP 指令竞争 CPU 上的资源,所以是的,我会将它包含在 FLOPS 计数中。

于 2010-06-24T11:03:23.423 回答
2

尝试反汇编代码并检查此操作是如何执行的。

如果它使用指令FCHS(更改符号),那么你可以考虑它是浮点运算。

MSVC (Visual Studio 2008)

    double c = -b;
00971397  fld         qword ptr [b] 
0097139A  fchs             
0097139C  fstp        qword ptr [c] 

fchs - 看到了吗?

于 2010-06-24T11:00:09.033 回答
1

有一种使用 LINPACK 作为标准基准来计算 FLOPS 的惯例。

于 2010-06-24T11:05:30.250 回答