青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

S.l.e!ep.¢%

像打了激速一樣,以四倍的速度運轉,開心的工作
簡單、開放、平等的公司文化;尊重個性、自由與個人價值;
posts - 1098, comments - 335, trackbacks - 0, articles - 1
  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

MMX版本的Alpha Blend算法實現

Posted on 2010-03-31 10:50 S.l.e!ep.¢% 閱讀(671) 評論(0)  編輯 收藏 引用 所屬分類: VC

MMX版本的Alpha Blend算法實現


這次我們的目標是: 超越普通的CPU玩家,用CPU的母語來優化程序!

實驗器材:VC++ 4.2以上的編譯器或C++ Builder 4.0以上編譯器

MMX技術到現在來說可以算是基本大眾化了,目前大多數個人電腦都應該能支持它。P55C,K6,PII,PIII...按照慣例,Intel公司將在以后的x86版本永遠支持它。

要了解MMX指令體系,請一定瀏覽以下URL,獲得系統的MMX體系知識:

http://www.game1st.com/database/mmxd/mmxd.htm

否則將會對我的講解摸不著北,(象聽最優控制或者線性控制理論一樣)

提示:最好自己多寫些Console App來實驗和熟悉MMX指令特性,cout出結果,不要一來就搞Windows App.

MMX技術的優點是什么?

一言蔽之,就是一個指令操作多個整型數據.并且可以自動完成飽和運算

MMX最適合的應用領域是數字圖象處理 ,然后是語音,通訊等領域。

寫圖象處理算法時很影響效率的以下幾點是:

1.不厭其煩的低效鄰域操作: 不厭其煩的寫GfxBuffer[i],GfxBuffer[i+1],GfxBuffer[i+2],...取RGB值等。

2.惱人的環繞:

像素運算溢出,必須拿個大點的數據類型來保存結果再判斷溢出,否則結果就是錯誤的

short int GfxOut=GfxBuf1[i]+GfxBuf2[i]; ...

if(GfxOut>255)GfxOut=255; if(GfxOut<0)GfxOut=0;

問題是你知道那兩個判斷回會生成多少匯編代碼嗎?

3.不必要的高精度: 該死的RGB->YUV運算,我們最熟悉的彩色轉灰度運算: Y=(BYTE)(Red*0.299+Green*0.587+Blue*0.114);

其實我們關心的是一個字節結果,誰愿意讓協處理器做大量運算,得到float結果,還要再轉換為byte結果呢?要知道IEEE浮點轉整數可不象在C程序里看起來那么簡單!(在你為51單片機這種低級的劣質的沒有協處理器的CPU寫過程序就知道了...)代價是相當大的。

尤其圖面比較大的情況下,你會在屏幕面前等得生霉,我們不要那么高的精度啊。

而MMX技術就是黑暗中的燈塔,被老板咒罵的程序員的救命稻草,使圖象處理模式識別和神經網絡專業方向的研究生不被導師訓斥的的葵花寶典...(本人不系Intel中國公司的營銷部經理啊..)

以32-bit為例,下面具體講下用簡單的例子講解MMX技術優化北航老王頭提供的Alpha Blend算法:

絕對為本人在某個深夜所原創,不抄襲自任何資料

char *pSrc,*pOvr; { pSrc=pScanline1+j; pOvr=pScanLine2+j; j+=4; .....

假定我們的源像素在pSrc,覆蓋圖Overlay在pOvr,各指向一個32 bit像素。

( 為什么要以32bit像素?因為老赫有兩年做字幕卡程序的背景,電視字幕是32 bit圖文層嘛! )

如果你閱讀了開始我提供的URL文檔,你就清楚,MMX有八個64bitRegister,叫MM0->MM7,是浮點處理器的別名,也是他們的低64位映象。

__asm{ pxor mm2,mm2 //把MM2清0

mov edx,dword ptr [pSrc] //取32bit像素地址到edx

movd mm0,dword ptr [edx] //把Source像素取到mm0低32bit

mov edx,dword ptr [pOvr]

movd mm1,dword ptr [edx] //把32 bit Overlay像素取到mm1低32bit

punpcklbw mm0,mm2 //Source:8 bit到16 bit以容納結果,32bit expand to 64 bit

punpcklbw mm1,mm2 //Overlay:8 bit到16 bit以容納結果.32bit expand to 64 bit

movq mm3,mm1 // 因為要用Overlay的Alpha值

punpckhwd mm3,mm3 // 高字移動到雙字

punpckhdq mm3,mm3 // 雙字移動到四字,現在有八個像素的Alpha了!

movq mm4,mm0 //Source->mm4

movq mm5,mm1 //Overlay->mm5

psubusw mm4,mm1 //Source-Overlay,飽和減,小于0為0

psubusw mm5,mm0 //Overlay-Source,飽和減,小于0為0

pmullw mm4,mm3 //Alpha * (Source-Overlay)

pmullw mm5,mm3 //Alpha * (Overlay-Source)

psrlw mm4,8 //除以256,now mm4 get the result,(Source-Overlay)<0 部分

psrlw mm5,8 //除以256,now mm5 get the result,(Overlay-Source)>0 部分

paddusw mm0,mm5 //飽和加到原圖象:D=Alpha*(O-S)+S,(Source-Overlay)<0 部分

psubusw mm0,mm4 //飽和加到原圖象D=S-Alpha*(S-O),(Overlay-Source)>0 部分

packuswb mm0,mm0 //緊縮到低32bit

mov edx,dword ptr [pSrc]

movd dword ptr [edx],mm0 //保存結果

emms ///必要的!Empty MMX Status

} 以上算法和常規算法比較:

Legend PII 400 With damnble,extremely Slow Sis6326 Video Card: 640*480*32bit bitmap:

Normal algorithm:170-180 ms

This algorithm:Below 40 ms

均包含拷貝內存時間,純處理時間只要20ms, 就是說如果用DirectX,Blt,BltFast通常比memcpy快很多.就小于40ms了

總結: 反復使用緊縮移位,緊縮擴展,緊縮壓縮指令,并施加飽和運算等,是用MMX寫算法的核心。

程序員必須對數制,內存結構,定點數很熟悉才能寫出高效率的MMX加速的子程序。

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲精品欧美激情| 99人久久精品视频最新地址| 亚洲视频在线免费观看| 久久国产精品一区二区三区| 亚洲精品一区二区三区四区高清| 国产精品久久777777毛茸茸| 久久综合99re88久久爱| 亚洲小说欧美另类婷婷| 亚洲国产精品传媒在线观看| 在线视频亚洲一区| 日韩视频永久免费观看| 亚洲第一精品福利| 国产一区二区三区免费不卡| 国产在线精品自拍| 亚洲欧洲一区二区三区久久| 亚洲精品日本| 欧美专区亚洲专区| 猛干欧美女孩| 欧美高清免费| 亚洲美女诱惑| 西瓜成人精品人成网站| 欧美呦呦网站| 一本色道久久综合狠狠躁篇的优点 | 欧美激情区在线播放| 欧美sm极限捆绑bd| 欧美亚州一区二区三区| 国产视频丨精品|在线观看| 激情一区二区三区| 午夜老司机精品| 99视频精品在线| 欧美日本高清一区| 国自产拍偷拍福利精品免费一| 一区二区三区精品在线| 亚洲国产精品成人| 久久日韩精品| 极品尤物久久久av免费看| 久久国产乱子精品免费女| 麻豆精品精品国产自在97香蕉| 亚洲欧美日韩国产一区| 欧美日韩国产在线一区| 亚洲欧洲一级| 亚洲高清在线| 欧美日韩精品福利| 一本久久综合| 亚洲欧洲日韩在线| 久久噜噜噜精品国产亚洲综合 | 亚洲电影免费观看高清完整版在线观看| 欧美寡妇偷汉性猛交| 久久婷婷成人综合色| 亚洲欧美日韩一区二区三区在线观看 | 国产精品入口| 麻豆av一区二区三区| 久久婷婷国产综合尤物精品| 亚洲伦理网站| 亚洲一区二区三区精品动漫| 国产精品揄拍一区二区| 亚洲国产91精品在线观看| 欧美日韩精品伦理作品在线免费观看| 亚洲精品日韩激情在线电影| 欧美亚洲一区二区在线观看| 亚洲电影免费在线观看| 亚洲一区二区黄| 99在线观看免费视频精品观看| 亚洲女女做受ⅹxx高潮| 99re6这里只有精品| 久久成人资源| 性欧美大战久久久久久久免费观看| 久久久久免费视频| 欧美一进一出视频| 欧美视频官网| 亚洲人成小说网站色在线| 国产欧美日韩麻豆91| 一区二区三区高清在线| 中文一区二区| 欧美韩日一区| 亚洲精品影院在线观看| 亚洲福利视频一区二区| 久久国产精品久久久久久电车| 久久精品国产久精国产爱| 欧美日韩另类国产亚洲欧美一级| 亚洲国产一区二区三区在线播 | 欧美久久电影| 一区国产精品| 久久影音先锋| 欧美激情国产日韩| 在线精品高清中文字幕| 久久一区二区三区av| 亚洲国产精品嫩草影院| 亚洲激情视频网| 国产精品福利网| 蜜臀久久99精品久久久久久9| 老司机午夜精品视频| 亚洲激情成人| 国产精品99免视看9| 羞羞视频在线观看欧美| 亚洲国产色一区| 久久亚洲春色中文字幕久久久| 伊人色综合久久天天| 国产精品呻吟| 欧美精品在线观看一区二区| 亚洲一区在线观看视频| 亚洲精品美女免费| 午夜精品国产| 一区二区三区黄色| 亚洲人成网站精品片在线观看| 欧美日韩亚洲高清| 欧美成人一区二区三区| 久久久久国色av免费观看性色| 亚洲美女视频在线观看| 亚洲黑丝一区二区| 欧美激情国产日韩| 亚洲第一福利在线观看| 欧美激情视频免费观看| 久久嫩草精品久久久精品| 欧美亚洲自偷自偷| 久久大逼视频| 性色av一区二区三区红粉影视| 亚洲性夜色噜噜噜7777| 欧美人成免费网站| 欧美在线日韩在线| 中文网丁香综合网| 亚洲国语精品自产拍在线观看| 国产精品专区一| 欧美视频精品在线| 免费一区二区三区| 久久久久综合| 中日韩男男gay无套| 欧美美女bb生活片| 99re6热只有精品免费观看 | 亚洲一区久久| 国产精品任我爽爆在线播放| 亚洲毛片在线看| 日韩视频在线观看国产| 欧美成人小视频| 亚洲影视在线| 久久高清免费观看| 在线播放国产一区中文字幕剧情欧美| 久久亚洲影院| 蜜桃久久精品一区二区| 亚洲三级毛片| 欧美一区二区三区在线| 在线观看视频免费一区二区三区| 亚洲国产女人aaa毛片在线| 欧美精品国产精品| 中国成人黄色视屏| 一本色道久久88综合亚洲精品ⅰ| 国产精品v欧美精品v日韩精品| 欧美在线亚洲在线| 农夫在线精品视频免费观看| aa级大片欧美三级| 亚洲欧美经典视频| 亚洲国产成人在线播放| 亚洲伦理久久| 伊人色综合久久天天| 中文精品视频一区二区在线观看| 国内揄拍国内精品少妇国语| 亚洲国产综合在线| 国产亚洲电影| 一本色道久久综合精品竹菊| 亚洲激情在线观看视频免费| 亚洲一级二级在线| 在线看片成人| 久久成人亚洲| 欧美日韩一区二区三区在线看| 久久久久免费视频| 久久手机精品视频| 国产精品国产三级国产专播精品人 | 久久久久网址| 欧美日韩国产区一| 久久婷婷国产综合精品青草| 国产精品va| 亚洲视频第一页| 亚洲欧美日韩国产一区二区| 欧美日韩国产a| 亚洲无亚洲人成网站77777 | 一区二区三区无毛| 久久久五月天| 免费在线看一区| 国产在线精品自拍| 欧美高清视频一区| 99pao成人国产永久免费视频| 老司机成人在线视频| 免播放器亚洲| 亚洲特色特黄| 国产一区二区三区的电影| 久久亚洲电影| 亚洲精品裸体| 久久精品国产免费看久久精品| 国产精品午夜在线| 久久婷婷影院| 欧美福利视频在线| 亚洲欧美国产高清va在线播| 欧美网站在线| 久久久五月天| 一区二区三区欧美亚洲| 久久国产精品一区二区三区四区| 国产一区二区三区在线播放免费观看| 久久亚洲精品一区二区| 亚洲黄色性网站| 黄色精品一区二区|