看板 Programming 關於我們 聯絡資訊
※ 引述《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