“ x + = y”与“ x = x + y”的FLOP计数

时间:2019-04-03 00:50:06

标签: python c++ time

在像C++这样的语言中,有一个像x += y这样的表达式。

如果x已经被特定的浮点数(例如3.0)占据,那么后面两个之间是否存在FLOP计数差异?

    1. x += 1.0
    1. x = x + 1.0

已编辑

具体来说,在Python之类的语言中,

确实存在区别
  • x + = 1.0
  • x = x + 1.0

其中第一个表示数据结构本身的修改,第二个表示变量的重新分配。 (参考:What is the difference between i=i+1 and i+=1 in a for loop?

对于FLOP个计数,可能对以下两件事感兴趣:

  • +的数量
  • *的数量

因此,C++的新手可能会很自然地想知道两者的FLOP计数之间的差异。

正如回答者所指出的,当我们使用C++对象时,即使在volatile中也会出现差异。

1 个答案:

答案 0 :(得分:3)

C和C ++没有提及CPU操作。两种语言都指定了表达式的行为,而不是表达式的实现方式。

x = x + 1.0x += 1.0的行为是相同的,除了评估x的任何副作用在前者中发生两次,在后者中发生一次。如果x是非volatile对象的名称,则没有语义上的区别,任何体面的编译器都应为两者生成完全相同的代码。

如果您编写类似以下内容,则可能会出现差异:

arr[func()] = arr[func()] + 1.0;

vs

arr[func()] ++;