感謝版主上次回答~接續~如何撰寫程式可以增加處理速度 |
尚未結案
|
a4894038
一般會員 發表:3 回覆:0 積分:0 註冊:2005-01-16 發送簡訊給我 |
如何撰寫程式可以增加處理速度 如何增加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 發送簡訊給我 |
|
justdo
高階會員 發表:2 回覆:359 積分:222 註冊:2004-08-17 發送簡訊給我 |
|
arisaka_matsuri
高階會員 發表:25 回覆:205 積分:231 註冊:2003-10-19 發送簡訊給我 |
同意 justdo 的說法
多利用memset或MemoryZero,避免多餘的for迴圈 另外,活用指標也可以稍微讓處理速度快一點
如果對記憶體操作的方式為線性
不妨將雙重for迴圈改為單個for迴圈,或是改為while...
register DWORD i = (DWORD)記憶體起始位置; while(i <= (DWORD)記憶體結束位置) { // do your processing i; }也可以用do...while,判斷條件可以自行修改 累加器 i 可以依照處理的記憶體量更改 以我的經驗,上述幾點若處理的好 大概跟自己用組語寫的感覺差不多 其他最佳化部分 試試看能否搭配MMS/SSE/SSE2等指令 以平行處理的方式加速 參考看看囉~ |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |