2012-02-24 41 views
0

我正在編譯器上工作,並寫了一個實際上使我的代碼更慢的優化!在調查它時,我發現代碼生成器決定在我的優化關閉時使用Handle(在我們的編譯器中是雙引用),並且在我的優化開始時指向Handle!在訪問數組時,這導致在第二種情況下再引用一個解除引用指令。指令流水線 - 體系結構模擬器和流水線可視化器

但是,這個單一的指令導致代碼運行時間出現32%的令人驚訝的放緩。我懷疑這與指令流水線有關,因爲這個額外的解除引用會導致3條可能解釋放緩的依賴指令。

我需要表現出同樣的,我試圖讓流水線上的詳細信息,這將是巨大的,如果有人能提出對指令流水線的,有用的架構模擬器和管道展示臺一些很好的材料。

回答

0

當您需要取消引用指針時,必須首先從內存加載指針,然後纔可以將值加載的指針指向。如果你有一個指向一個值的指針,那麼你需要做三個連續的加載。這被稱爲指針追逐。如果這些指針不在緩存中,則性能影響可能很大。流水線並沒有多大幫助。關於計算機體系結構的標準書是hennessy & patterson。那裏有幾個建築模擬器。 http://gem5.org是很受歡迎(全面披露,我是提交者),但他們幾乎總是有一個陡峭的學習曲線。