2011-02-26 39 views
4

對不起......(早熟)的優化是一切罪惡的根源,但我想知道:更昂貴的是多少有一個jmp指令與沒有它(網點代碼)?我追求知道如何計算這些東西的方法。這是純粹的探索性的,不實際的,我試圖找到我的理論問題的方式,我的測試代碼帶來了這一點。謝謝。跳轉指令(有意義)的成本?

回答

8

你就來測試一下你的架構,如果你真的想知道。

但是總的來說,在現代處理器上,無條件跳轉的成本最低。除了非常少量的指令緩存開銷之外,它基本上幾乎是免費的。它可能會與相鄰指令並行執行,所以甚至不會花費你一個時鐘週期。這是因爲跳轉可以通過幾個並行的execution units之一執行。

看待它這種方式 - 主存儲的單一讀出可能是100-200倍更加昂貴。

它通常是branch prediction的子集,但不存在分支預測失誤的風險,因此您不必沖刷instruction pipeline,這是與條件跳轉相關的主要成本。

+4

我在全球範圍內都認同,但跳轉和內存訪問的比較並不公平。跳躍是無成本的,因爲它是高速緩存(由分支預測發動機)和內存訪問是昂貴的,因爲它沒有被緩存(主存儲器存取)。兩者都是快速它們被緩存的時候,無論是緩慢的,當他們錯過了各自的緩存。關於並行執行的相同評論,如果CPU沒有其他任何事情可以跳轉,那麼跳躍是沒有代價的。如果CPU對執行單元有很高的壓力,則成本會更高。 – 2011-02-26 21:03:33

+0

爲鏈接+1 – BlackBear 2011-02-27 21:03:05

1

那麼,最好不要跳。在早期寫有條件的跳轉,以便最可能的條件不會引起跳躍。所以根本不需要任何指令顯然更快,但我不能告訴你它與其他指令相比的代價如何。也許你應該測量十億跳躍的一種方式或其他...