【问题标题】:Does the arithmetic negate count as a floating point operation?算术求反算作浮点运算吗?
【发布时间】:2011-03-07 18:17:08
【问题描述】:

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

d = -a

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

【问题讨论】:

  • 在任意代码上测量 FLOPS 有何用处?
  • @Jonas:它会告诉您 CPU 上 FPU 单元的使用情况。对于计算量大的程序,这可以很好地衡量还有多少空间可以进一步优化。
  • 我正在对一些算法进行基准测试,并且我使用 FLOPS 作为这些算法性能的衡量标准(将实现的性能与我正在使用的架构中可能的最大 FLOPS 进行比较)。
  • 您的架构的 FLOPS 数可能是使用 LINPACK 测量的。我完全不确定您是否真的可以将任意算法与 LINPACK 进行比较。

标签: floating-point flops


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

    MSVC (Visual Studio 2008)

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

    fchs - 看到了吗?

    【讨论】:

    • 是的,但请注意他并没有说他在 x86 上运行
    • 是的,我确定我正在使用的架构中有一个否定汇编指令,我已经这样做了,谢谢。
    【解决方案3】:

    有一种约定是使用 LINPACK 作为一种标准基准来计算 FLOPS。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-07
      • 2011-02-24
      • 2019-03-25
      • 2016-08-23
      • 2015-02-28
      • 2019-07-25
      • 1970-01-01
      相关资源
      最近更新 更多