2010-01-06 64 views
3

考慮加法模型上的維特比解碼器。它花時間做補充和比較。現在,考慮兩種:一種是C/C++ float作爲數據類型,另一種是int。在現代芯片上,你會期望int的運行速度明顯快於float?或者,流水線的奇蹟(以及不存在乘法和除法)是否會讓所有問題都出現?現代芯片上的浮點數與整數算術性能

+1

通常,我會說你應該測量兩種方法,看看哪一種更快。但是,如果您可以訪問要定位的CPU,或者如果您有模擬器,則這更有用/更實際。 – 2010-01-06 00:58:49

+0

我有CPU。我希望有人在這裏進行類似的計算,然後再去測量它的麻煩。 – bmargulies 2010-01-06 00:59:28

回答

3

取決於你的意思是顯着。我通常期望看到整數執行速度快兩倍,但這一切都取決於還在發生什麼。可以處理AMD64(AMD/Core2)指令集的現代處理器通常可以在每個週期有效執行1次浮動操作,如果它們能夠保持流水線進給的話,它們通常也可以做相同數量的2或3個整數操作的時間。甚至可以同時做到這一點。

但是,編寫阻塞管道的代碼並不困難,您必須避免在計算完成後立即使用計算結果,否則管道將停止運行,並且每次乘法運算的結果更像3個週期而不是1個。

在大多數情況下,PowerPC的每個週期指令與AMD/Intel相同或更好。

附錄:

順便說一句,你可能會發現比較(或者說是攀比暗示的分支機構)最終花費了很多比增加更多。錯誤預測的分支是昂貴的,特別是在Pentium 4處理器上。

+1

一些編譯器使用'SETCC'指令而不是'Jcc'指令來實現比較,在這種情況下不涉及分支,並且不會導致分支預測失誤。 – 2010-01-09 17:14:21