留下點回憶
分支是什么,具體可以參見:http://blog.csdn.net/housisong/archive/2007/10/05/1812117.aspx
這里舉一個實際的例子來說明如何刪除分支。
代碼如下:
上面的代碼有兩個分支;一個是用來判斷val的值是否大于0,另外一個是判斷val是否比被除數小。
對于第一個判斷的目的就是要在val小于0的時候將其轉換為正值,然后進行除法運算,最終還要將符號取反。因此對于val為正和負的不同在于運算前后的符號取反。
為了消除這個分支需要定義一個數組,這個數組包含兩個元素;一個元素保存正val的絕對值,另外一個保存絕對值的負值,修改后的代碼如下:
先要定義一個數組,然后在開始的時候給這個數組賦值,進行除法以后,同樣將結果賦值數組,在對數組取值的時候使用val<0作為索引來查找。上面的程序與前面的程序是等價的。但它卻消除了分支,從而讓CPU能更好的預測。
其實對于除法的也是一個分支,在開始的時候我試圖也消除這個分支,但結果事與愿為,我的轉換確實消除了分支,帶來的確實無能如何都要執行一次整數除法。例如:
posted on 2008-09-29 00:00 笨笨 閱讀(1861) 評論(0) 編輯 收藏 引用 所屬分類: 代碼優化
Powered by: C++博客 Copyright © 笨笨