"x += y" FLOP 计数与 "x = x + y"
FLOP count of "x += y" vs. "x = x + y"
本文关键字:FLOP 更新时间:2023-10-16
在像C++
这样的语言中,有一个像x += y
这样的表达式。
如果x
已经被特定的浮点数占用(例如3.0
),以下两者之间是否有任何 FLOP 计数差异?
-
x += 1.0
-
x = x + 1.0
编辑
具体来说,在Python
等语言中,确实存在差异
- x+= 1.0
- x = x+1.0
其中第一个表示数据结构本身的修改,第二个对应于变量的重新分配。(参考:for 循环中的 i=i+1 和 i+=1 有什么区别?
对于FLOP
计数,人们可能对以下两件事感兴趣:
+
S 的数量*
s 的数量
因此,新手像我一样C++
想知道两者的 FLOP 计数之间的差异可能是很自然的。
正如回答者指出的那样,当我们使用volatile
对象时,即使在C++
中,差异也会显现出来。
C 和 C++ 没有说明任何关于 CPU 操作的信息。这两种语言都指定表达式的行为,而不是它们的实现方式。
x = x + 1.0
和x += 1.0
的行为是相同的,只是评估x
的任何副作用在前者中发生两次,在后者中发生一次。如果x
是非volatile
对象的名称,那么就没有语义差异,任何像样的编译器都应该为两者生成完全相同的代码。
如果您编写以下内容,则可能会出现差异:
arr[func()] = arr[func()] + 1.0;
与
arr[func()] ++;