我在優化我的代碼爲我的N體模擬的過程,剖析我的代碼的時候,已經看到了這一點:相同的操作採取不同的時間
這兩條線,
float diffX = (pNode->CenterOfMassx - pBody->posX);
float diffY = (pNode->CenterOfMassy - pBody->posY);
凡pNode
是一個指針,它指向我已經定義Node
類型的對象,並且包含(與其他事物)2個浮筒,CenterOfMassx
和CenterOfMassy
凡是指向Body
型我已經定義的對象,並且包含(與其他事物)2個浮筒,posX
和posY
。
應該採取的時間是相同的,但不要。實際上,第一行佔功能樣本的0.46%,而第二行佔5.20%。
現在我可以看到第二行有3條指令,第一條只有一條。
我的問題是爲什麼這些看似做同樣的事情,但在實踐中不同的事情?
那麼,爲什麼代碼行會變成不同的彙編指令,並且有什麼方法可以加快第二行的速度? –
每行變成相同的兩條asm指令,但是它們被重新排序。一個源代碼行獲取一個insn,另一個獲取3,因爲否則,asm指令將不得不按順序顯示。這不是要利用緩存,順便說一句。這是爲了更好地隱藏負載的延遲。 –
如果'pNode'與'pBody'很遠,是不是通過在'* pBody'之前加載'* pNode'來比較交錯來利用緩存? – timrau