分享
 
 
 

再谈MMX优化

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

这几天帮别人做了彩色空间转换的MMX优化,包括YUV420<->RGB,YUV420<->YUV422,UYVY->YUV420,感觉收获不少.MMX指令的确强劲,使用内联的MMX指令后转换速度比优化前平均提高了3-4倍.下面承接原来的MMX优化的入门篇稍微深入点讲解MMX指令的用法.

首先在VC的内联汇编中使用MMX指令的确时相当方便,而且效率也非常高.推荐使用.

一般有两种传送方式:数组和指针.使用数组比较方便,但使用指针更为普遍.

数组传送方式:

int a[6];

...

_asm{

movq mm0,[a]; //movq传送64位,mm0内容为:a[3]a[2]a[1]a[0]

movd mm1,[a+8]; //movd传送低32位,注意这个地方加8而不是4

}

指针传送方式:

int *p;

...

_asm{

mov eax,[p];

movq mm0,[eax];

movq mm1,[eax+8]

}

MMX中的加减使用就比较简单了,唯一值得注意的是有的是那些是带符号的运算,那些是带饱和的运算.

PMADDWD是两对16位数相乘然后再将32位的结果相加的运算.

MMX中乘法比较是分高低位的,因为要保证乘后的结果和乘数的位数一致,而且往往运算的结果都是高位为0,所以用低位乘法就够了.但是如果想得到一个完整的结果要算两次.

移动指令中要注意的是psllw,psrld等都是逻辑位移,是需要移动符号位的,只有psraw,psrad才是算术位移不移动符号位,MMX中没有除法运算,所以要想办法把被除数变换成2的N次方,然后在用psraw mm0,n来实现除法运算.注意移出的空位都用0填充.

MMX中最复杂就要属紧缩指令了.它们负责重新排列MMX寄存器中数,使之能够按照规定顺序输入输出数据.

packsswb mm0,mm1 // mm0中存放4个16位数:ABCD mm1:EFGH packsswb后mm0:ABCDEFGH

packuswb 跟packsswb的唯一区别是就是不带符号位

punpckhbw 展开高阶紧缩数据 punpcklbw展开低阶紧缩数据

例如:mm0和mm1分别存放8个8位数.

mm0:A7,A6,A5,A4,A3,A2,A1,A0 mm1:B7,B6,B5,B4,B3,B2,B1,B0

punpckhbw mm0,mm1; //结果 mm0:B7,A7,B6,A6,B5,A5,B4,A4

punpcklbw mm0,mm1; //结果 mm0:B3,A3,B2,A2,B1,A1,B0,A0

下面具体举例:

比如src数组中存放着UYVYUYVY....的序列(Y,U,V为8位数),我们要把它按顺序转换成YYYYY,UUUU,VVVV进行存放

_asm{

movq mm0,[src]; //mm0:Y3 V1 Y2 U1 Y1 V0 Y0 U0

movq mm1,[src+8]; //mm1:Y7 V3 Y6 U3 Y5 V2 Y4 U2

movq mm2,mm0; //mm2做中转,mm0即将改变

punpcklbw mm0,mm1; //mm0:Y5 Y1 V2 V0 Y4 Y0 U2 U0

punpckhbw mm2,mm1; //mm2:Y7 Y3 V3 V1 Y6 Y2 U3 U1

movq mm3,mm0;

punpcklbw mm0,mm2; //mm0:Y6 Y4 Y2 Y0 U3 U2 U1 U0

movd [U],mm0; //传低32位的U

punpckhbw mm3,mm2; //mm3:Y7 Y5 Y3 Y1 V3 V2 V1 V0

movd [V],mm3; //传低32位的V

punpckhbw mm0,mm3; //mm0:Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0

movq [y],mm0; //传8个Y

emms; //凡是用MMX指令兄弟门别忘拉

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有