我目前正在测量 FLOPS 中某些代码的性能。这段代码提供了一些算术否定指令,如下所示:
d = -a
其中d
和a
是浮点变量。我目前使用的架构确实有特定的否定指令。我是否必须考虑这种操作来衡量 FLOPS?什么样的操作会导致 FLOPS?有什么约定吗?
我目前正在测量 FLOPS 中某些代码的性能。这段代码提供了一些算术否定指令,如下所示:
d = -a
其中d
和a
是浮点变量。我目前使用的架构确实有特定的否定指令。我是否必须考虑这种操作来衡量 FLOPS?什么样的操作会导致 FLOPS?有什么约定吗?
正如@Andrey 所说,确保您应该检查反汇编代码。
但总的来说,是的,指令可能会在 FPU 上执行。它只是翻转了一点,所以它也可以在一个整数单元上完成,但是由于您正在对浮点值进行操作,这些很可能已经加载到 FP 寄存器中,因此会有相当多的开销将它们移动到通用寄存器,翻转位并将它们移回。
我不知道是否有关于“什么应该算作 FLOP”的完整通用指南,但这很可能是在 FPU 上执行的指令,因此它与其他 FP 指令竞争 CPU 上的资源,所以是的,我会将它包含在 FLOPS 计数中。
尝试反汇编代码并检查此操作是如何执行的。
如果它使用指令FCHS
(更改符号),那么你可以考虑它是浮点运算。
MSVC (Visual Studio 2008)
double c = -b;
00971397 fld qword ptr [b]
0097139A fchs
0097139C fstp qword ptr [c]
fchs - 看到了吗?
有一种使用 LINPACK 作为标准基准来计算 FLOPS 的惯例。