现在的位置: 首页 > 综合 > 正文

2007.04.09继续优化

2013年01月03日 ⁄ 综合 ⁄ 共 528字 ⁄ 字号 评论关闭

今天优化的部分是缩放, 也就是一个2倍放大的模块.

 

转换成数学表示就是:

有一个序列p1, p2, p3, p4, p5....以数组的方式存放, 每个存储为一个字节.

现在要把这个序列转换成另外一个序列.
(p1*3+p2)/4, (p2*3+p)/41, (p2*3+p3)/4, (p3*3+p2)/4, (p3*3+p4)/4, (p4*3+p3)/4, (p4*3+p5)/4....

每个结果也存到一个字节中.

可以看出来结果序列长度是原始序列长度的2倍.
我今天想出来的办法是一次计算出4个点来,也就是(p1*3+p2)/4, (p2*3+p)/41, (p2*3+p3)/4, (p3*3+p2)/4, 正在想更快的办法中. 

我是这样做的,先算好2个DWORD,分别是
T1 = Xp1Xp2;
T2 = Xp2Xp3;

这里X表示8个0的位,就是把p1和p2分开来
然后计算
((((T1*3+T2)>>2)&0xFF00FF)<<8) + ((((T1+T2*3)>>2))&0xFF00FF)

一次把4个点全算好了.
然后继续来做
T3 = (T2<<16) + p4
T4 = (T3<<16) + p5
然后再计算2个点,其中*3cup会自己优化成加法的.

今天看了专门介绍ARM指令集的文档,感觉收获不少,优化无止境啊.

抱歉!评论已关闭.