[英]FLOP count of "x += y" vs. "x = x + y"
在像C++
這樣的C++
,有一個像x += y
這樣的表達式。
如果x
已經被一個特定的浮點數(例如3.0
)占用,那么下面兩個之間是否有任何 FLOP 計數差異?
x += 1.0
x = x + 1.0
具體來說,在Python
等語言中,確實是有區別的
其中第一個表示數據結構本身的修改,第二個對應於變量的重新分配。 (參考: for 循環中 i=i+1 和 i+=1 有什么區別?
對於FLOP
計數,人們可能對以下兩件事感興趣:
+
的數量*
的數量所以對於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()] ++;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.