• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            Dict.CN 在線詞典, 英語學習, 在線翻譯

            學??嘧髦?,書山勤為徑

            留下點回憶

            常用鏈接

            統計

            積分與排名

            Denoise

            English study

            Web技術

            數據壓縮

            一些連接

            最新評論

            代碼優化-刪除分支(實例1)

             

            分支是什么,具體可以參見:http://blog.csdn.net/housisong/archive/2007/10/05/1812117.aspx

            這里舉一個實際的例子來說明如何刪除分支。

            代碼如下:

             

             1#define DIVIDE_BY(a,b) ((a < b)? (a = 0):(a /= b))
             2
             3short CXpegDCT::Quant(long val,long div)
             4
             5{
             6
             7         if (val < 0{
             8
             9                   val = -val + (div>>1);/* for rounding */
            10
            11                   DIVIDE_BY(val, div);
            12
            13                   val = -val;
            14
            15         }
             else {
            16
            17                   val += div>>1/* for rounding */
            18
            19                   DIVIDE_BY(val, div);
            20
            21         }

            22
            23         return (short)val;
            24
            25}

            26
            27


            上面的代碼有兩個分支;一個是用來判斷val的值是否大于0,另外一個是判斷val是否比被除數小。

             

            對于第一個判斷的目的就是要在val小于0的時候將其轉換為正值,然后進行除法運算,最終還要將符號取反。因此對于val為正和負的不同在于運算前后的符號取反。

            為了消除這個分支需要定義一個數組,這個數組包含兩個元素;一個元素保存正val的絕對值,另外一個保存絕對值的負值,修改后的代碼如下:

             

             1Long m_TmpVals[2];
             2
             3short CXpegDCT::Quant(long val,long div)
             4
             5{
             6
             7         long lTmpVal;
             8
             9         m_TmpVals[0= val;
            10
            11         m_TmpVals[1= -val;
            12
            13         lTmpVal = m_TmpVals[val<0];
            14
            15 
            16
            17         lTmpVal += (div>>1);/* for rounding */
            18
            19         DIVIDE_BY(lTmpVal, div);
            20
            21         m_TmpVals[0= lTmpVal;
            22
            23         m_TmpVals[1= -lTmpVal;
            24
            25         return (short)m_TmpVals[val<0];
            26
            27}

            28

             

             

            先要定義一個數組,然后在開始的時候給這個數組賦值,進行除法以后,同樣將結果賦值數組,在對數組取值的時候使用val<0作為索引來查找。上面的程序與前面的程序是等價的。但它卻消除了分支,從而讓CPU能更好的預測。

             

            其實對于除法的也是一個分支,在開始的時候我試圖也消除這個分支,但結果事與愿為,我的轉換確實消除了分支,帶來的確實無能如何都要執行一次整數除法。例如:

             

            Long m_TmpVals[2];

            Long m_TmpVals2[
            2];

            short CXpegDCT::Quant(long val,long div)

            {

                     
            long lTmpVal;

                     m_TmpVals[
            0= val;

                     m_TmpVals[
            1= -val;

                     lTmpVal 
            = m_TmpVals[val<0];

             

                     lTmpVal 
            += (div>>1);/* for rounding */

                     m_TmpVals2[
            1= 0;

                     m_TmpVals2[
            0= lTmpVal/div;

                     m_TmpVals[
            0= m_TmpVals2[lTmpVal<div];

                     m_TmpVals[
            1= - m_TmpVals2[lTmpVal<div];

                     
            return (short)m_TmpVals[val<0];

            }

            如上面的代碼,雖然刪除了分支,但卻帶來了一個必須的除法運算,所以這個分出刪除未必是合適的。

            posted on 2008-09-29 00:00 笨笨 閱讀(1861) 評論(0)  編輯 收藏 引用 所屬分類: 代碼優化

            久久久久久久久波多野高潮| 国产成人精品久久二区二区| 一级a性色生活片久久无少妇一级婬片免费放 | 亚洲国产精品综合久久网络 | 中文国产成人精品久久不卡| 久久国产高潮流白浆免费观看| 亚洲国产精品久久久久婷婷老年| 无码任你躁久久久久久老妇| 国产亚洲精品美女久久久| 久久久久亚洲AV无码去区首| 国产精品美女久久久久久2018 | 久久婷婷五月综合97色 | 国内精品久久久久久99蜜桃| 欧美午夜A∨大片久久 | 精品永久久福利一区二区| 亚洲精品久久久www| 国产成人久久精品二区三区| 久久久久人妻一区二区三区vr| 亚洲国产精品综合久久网络| 国产成人久久777777| 9久久9久久精品| 日韩人妻无码精品久久免费一 | 亚洲天堂久久精品| 国内精品久久九九国产精品| 久久婷婷激情综合色综合俺也去 | 国产精品对白刺激久久久| 精品久久久久久久国产潘金莲| 国产成人精品久久亚洲高清不卡| 精品久久久无码人妻中文字幕豆芽| 久久久这里有精品| 久久99国产精品久久99小说| 亚洲国产高清精品线久久| 亚洲乱码日产精品a级毛片久久 | 国产精品视频久久| WWW婷婷AV久久久影片| 伊人久久大香线蕉av不变影院| 久久亚洲熟女cc98cm| 国产99久久久国产精品小说| 久久久久亚洲AV无码观看| 国产偷久久久精品专区| 7777精品久久久大香线蕉|