如果我用C語言編寫的計算,如矩陣矩陣加法或矩陣矩陣乘法,其中工作在for
循環中完成,並且在每次迭代中發生相同數量和類型的算術運算,輸入數據的值會影響計算速度?例如,如果矩陣元素是值在0和127之間的32位整數,以便它們的表示僅在每四個相應字節中的一箇中變化,那麼其運行速度會快於如果值在0和INT_MAX
之間變化(假設不是未定義的行爲發生)?給定數據類型的算術運算的代價是否隨操作數值而變化?
如果我不得不猜測我會說不,因爲無論值是小還是非常大,因爲它被定義爲32位整數,所以它將被屏蔽以適應相同數量的存儲空間,所以小的和大的值將最終在內存中具有相同的字節量。我是否正確思考這個問題?單/雙精度浮點數不同嗎?
目前尚不清楚你的問題是什麼。如果你想基準測試,請閱讀如何正確執行。如果你有其他問題,你應該更具體。 – Olaf
在現代CPU硬件上,具有數據相關性能的唯一操作是(int和FP)除法和sqrt。 (它們通常是可變延遲,並且不是完全流水線的;請參見[最近的Collatz-conjecture手寫的asm問題,瞭解更多關於DIV與shift的內容,例如](http://stackoverflow.com/questions/40354978/why- IS-這個-C-代碼快於我,手寫具組件進行測試最collat/40355466#40355466))。 add/sub/mul/shift都是固定的延遲/吞吐量。這在所有當前的[x86 CPU](http://agner.org/optimize)上都是如此,在大多數其他系統上幾乎肯定如此。 –
@Olaf我沒有特別的問題,我只是好奇而已。我脫掉了基準標籤,以防它看起來像我有一個特定的基準問題。我認爲內核基準將是一個很好的例子來說明我想要問什麼。 –