作者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
推 yun224:我覺得原po可能想做類似iPhone的內嵌系統吧 61.217.107.9 01/05 23:42
→ WPC001:那種不需要輸出30fps吧,CPU也是200MHz以上 59.117.167.199 01/06 09:38
推 FlyinDeath:DMA只能照搬不能旋轉吧? 202.132.175.17 01/06 11:45
→ WPC001:to FD: 不是已經跟講"寫入部分不連續"了嗎 59.117.167.199 01/06 17:34
→ meltice:iPhone連旋轉都還有"旋轉"的動畫效果 122.121.46.123 01/06 23:11
→ meltice:這應該更難吧 122.121.46.123 01/06 23:12
推 FlyinDeath:我只是對你說處理bitmap最好用DMA覺得 122.100.109.48 01/07 11:33
→ FlyinDeath:怪怪的 我印象裡面DMA只能照搬不能處理 122.100.109.48 01/07 11:33