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