作者WPC001 ()
站内Programming
标题Re: [问题] 快速 90/270度 旋转
时间Fri Jan 4 23:01:09 2008
※ 引述《LPH66 (IWH68S0XZ8M89)》之铭言:
: ※ 引述《cjjj21 (追求平凡的幸福)》之铭言:
: : 由於工作的关系需要一个快速的旋转函式...
: : 需求是将一块 bitmap buffer 旋转後填到另一块 buffer 上...
: : 例如 320x240 的 buffer, 旋转後贴到 240x320 的 buffer 上...
: : 一个一个pixel搬的速度实在慢到无法接受...
: : 有没有哪位大大知道一些比较快速的演算法?
: : 非常感谢!!
: 个人以为以cpu cache的角度来说
: 顶多只能加速到一次搬几行/列
: 因为这几乎等同於矩阵转置
: 不管是读出方或写入方总要有一个是直的跑下来
: 而这个地方对cpu cache是最不利的
: (因为阵列是row major排列 但直的读下来却相当於column major顺序)
读取是循序读取... (x方向)
写入的位置不是连续的...
目前CPU的cache都是wirte back型, 非write through
但读取的部分还是需要透过预读(或是CPU自行猜测)来进行快取
依序读取的话, CPU内建的自行猜测就可以以很高的效率执行了...
不需要自己pre-fetch...
如果你慢到无法接受... 恐怕是你程式有问题吧...
转640 x 480... 以目前动则2G的系统... 恐怕至少也是每秒100个frame以上吧...
640 x480 (1MB), 2GHz /1MB ---> 2000
也就是以640 x 480来说, 大约有2000个指令,
那只要你处理一个pixel缩在10个clock之内, 你就可以得到200fps的performance
考虑你仍然需要绘图及其他动作... 所以至少也有100fps吧...
处理bitmap, 你最好直接对记忆体存取,
而不要傻傻的用getpixel / putpixel慢慢存取吧 XD
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 123.195.25.91
1F:推 yun224:我觉得原po可能想做类似iPhone的内嵌系统吧 61.217.107.9 01/05 23:42
2F:→ WPC001:那种不需要输出30fps吧,CPU也是200MHz以上 59.117.167.199 01/06 09:38
3F:推 FlyinDeath:DMA只能照搬不能旋转吧? 202.132.175.17 01/06 11:45
4F:→ WPC001:to FD: 不是已经跟讲"写入部分不连续"了吗 59.117.167.199 01/06 17:34
5F:→ meltice:iPhone连旋转都还有"旋转"的动画效果 122.121.46.123 01/06 23:11
6F:→ meltice:这应该更难吧 122.121.46.123 01/06 23:12
7F:推 FlyinDeath:我只是对你说处理bitmap最好用DMA觉得 122.100.109.48 01/07 11:33
8F:→ FlyinDeath:怪怪的 我印象里面DMA只能照搬不能处理 122.100.109.48 01/07 11:33