我正在處理一些代碼,其中包含一些(編譯器生成的)彙編代碼塊,我們已經確定它們是速度瓶頸。是否有任何優秀的現代在線指南來優化彙編代碼?
我有足夠的瞭解裝配矇混過關,尋找手工優化 - 我不知道,不過,如果有在手工優化彙編中使用任何好處,在線指南,提供可重複使用的技術。這不是我希望我經常這樣做的事情,所以我不得不每次都從頭開始再學習如何做。
我正在處理一些代碼,其中包含一些(編譯器生成的)彙編代碼塊,我們已經確定它們是速度瓶頸。是否有任何優秀的現代在線指南來優化彙編代碼?
我有足夠的瞭解裝配矇混過關,尋找手工優化 - 我不知道,不過,如果有在手工優化彙編中使用任何好處,在線指南,提供可重複使用的技術。這不是我希望我經常這樣做的事情,所以我不得不每次都從頭開始再學習如何做。
這看起來像一本很棒的書。我還會推薦關於矢量編程的第13章。 – 2010-09-24 21:01:15
http://www.agner.org/optimize/
http://www.intel.com/intelpress/sum_swcb2.htm - 必須購買,並強調內在,而不是組裝
雖然這可能不需要說...
一般情況下,你會幫助編譯器(我使用GCC作爲一個例子,但是這應該是相關的其他編譯器太)進一步走了很多:
(x>>8)&0xFF
或(x&0xFF00)>>8
?它是PPC上的一條指令,但編譯器可能會使用兩條指令)我會感到驚訝,如果你能得到超過20%的增速更超過一個體面的C編譯器,除非有特殊說明/編譯器不使用的功能。除非它是你的所有應用程序,否則20%很少值得回憶。
+ +1爲了一個好的答案,並取消了無理由的downvote - 這是一個非常重要的一點 - 當談到現代CPU的優化時,要打敗一個*好的編譯器是相當困難的 – 2010-09-27 07:37:57
我同意以前的答案建議Agner Fog的優化手冊。他們真的很棒。另外,英特爾和AMD還提供了一些免費的優化手冊,例如,以下可能是你的興趣:
Intel 64 and IA-32 Architectures Optimization Reference Manual
昂納霧的網站似乎是一個常見的反應。另一個我多年來發現特別有用的頁面是保羅謝的頁面......
如果你心裏有一個特定的架構,請適當地標記(「86」或「臂」或其他)。 – 2010-09-24 22:26:00