線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1033
推到 Plurk!
推到 Facebook!

感謝版主上次回答~接續~如何撰寫程式可以增加處理速度

尚未結案
a4894038
一般會員


發表:3
回覆:0
積分:0
註冊:2005-01-16

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-09-24 01:04:44 IP:203.68.xxx.xxx 未訂閱
如何撰寫程式可以增加處理速度    如何增加C++處理速度 我目前使用mil函式庫寫vc++.net的影像 因為在C語言讀取影像中,使用矩陣[640][480]以及for迴圈,每兩格跳一點的方式讀取了307200畫素的影像,並且在影像上做處理,使得處理依次畫面要跑兩秒多。 因為應用上需要,這種速度實在太慢了,所以想請問一下有沒有C的高手    因為沒有學過如何精簡程式所以在這邊發問,撰寫C語言要用哪些方式,可以增加執行速度呢?    能減少的矩陣我已經減少到最少,跳點也跳到最大極限了,太大會抓不到所需的影像畫面。 //====================// 這是我上一個問題~    1.善用指標。 2.善用 <<, >> 這些 shift 來做 * 2, /2 之類的動作 3.儘量在記憶體中作業。 4.在適當的地點以組合語言最佳化。 5.全部運算完成才做顯示動作。(減少 I/O) 6.讓 compiler 做速度最佳化。 7.讓迴圈 for (int i.... 這個 i 放在暫存器。而非記憶體。(查文件,可以指定) //================//感謝版主的回答    由於對程式功力不足~想再次請教~第2.3.4.7點不了解 可以請版主在指點指點嗎? 感謝版主 善用<<, >>是什麼意思ㄋ  如何在C改成組合語言 來最佳化呢?    這是我的程式碼? unsigned char imageArray[IMAGE_HEIGHT][IMAGE_WIDTH][IMAGE_BAND]; //掃整個圖30萬畫素.歸零 for(y=0;y
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-09-24 20:40:30 IP:59.104.xxx.xxx 未訂閱
試著把 陣列 換成指標。
justdo
高階會員


發表:2
回覆:359
積分:222
註冊:2004-08-17

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-09-25 19:45:31 IP:221.169.xxx.xxx 未訂閱
將pixel一一填零是很浪費時間的 用memset或MemoryZero等指令,一次全部清成零比較快 另外,你的r.Image當中的r是什麼結構? RGBtoHSV();又在做什麼?
arisaka_matsuri
高階會員


發表:25
回覆:205
積分:231
註冊:2003-10-19

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-09-25 22:03:14 IP:218.166.xxx.xxx 未訂閱
同意 justdo 的說法 多利用memset或MemoryZero,避免多餘的for迴圈    另外,活用指標也可以稍微讓處理速度快一點 如果對記憶體操作的方式為線性 不妨將雙重for迴圈改為單個for迴圈,或是改為while...
register DWORD i = (DWORD)記憶體起始位置;    while(i <= (DWORD)記憶體結束位置)
{
  // do your processing
    i;
}
也可以用do...while,判斷條件可以自行修改 累加器 i 可以依照處理的記憶體量更改 以我的經驗,上述幾點若處理的好 大概跟自己用組語寫的感覺差不多 其他最佳化部分 試試看能否搭配MMS/SSE/SSE2等指令 以平行處理的方式加速 參考看看囉~
系統時間:2024-04-28 0:47:45
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!