作者:
sky391 (sky)
2014-10-15 09:02:54使用BCB C++&CUDA
影像處理在CUDA完成然後RGB回傳
for (i=0 ; i<h*w ; i++){
colR=colRR[i]; //colRR[i]為cuda部分回傳R
colG=colGG[i];
colB=colBB[i];
Emp->Canvas->Pixels[i%400][i/400]=(TColor)RGB(colR,colG,colB);
}
※ 引述《sky391 (sky)》之銘言:
: 目前做影像處理,
: 把一張圖處理完後是存成指標(RGB共三個)
: 然後利用迴圈填回變成圖,
: 目前400x300 size ,
: 迴圈跑了12萬次拖了很多速度,
: 不知版上高手,有沒有好意見,
: 謝謝
作者:
sky391 (sky)
2014-10-15 09:14:00這影像處理是一直持續做,讀圖->影像處理->填圖
作者:
johnpage (johnpage)
2014-10-15 11:19:00Emp->Canvas->Pixels[i%400][i/400]=(TColor)RGB(colR,colG,colB); 這段導致緩慢可用double buffer方法改善如果用組合語言,可以把%改用AND,/改用SHIFT
作者:
Feis (永遠睡不著 @@)
2014-10-15 11:44:00試著橫向填圖, 並看看有沒有比較低階的方法填
作者:
hichcock (快樂一整年 ^^~~~)
2014-10-15 11:46:00BCB 沒有貼整張圖的指令嗎??
作者:
sky391 (sky)
2014-10-15 11:52:00BCB不確定有沒有直貼整張的
作者:
dirkc (3781615)
2014-10-15 13:00:000/400有些怪;賦值的過程記憶體一直跳,可能是慢的主因
作者:
sky391 (sky)
2014-10-15 14:20:00我用i = 1開始也沒有改變
作者:
sky391 (sky)
2014-10-15 14:37:00已經是分成RGB三個,還有辦法一次抓記憶體嗎?
合在一起比較好,這樣資料局部性比較高,cache miss的延遲比較低。另外就是切幾個thread,利用cache miss時跑其他thread(如果你的CPU支援hyperthreading的話)不知道RGB函數裡做了些什麼,也許可以用SIMD/FMA指令
作者:
johnpage (johnpage)
2014-10-15 15:11:00記憶體部分沒有問題問題在顯示的部分
i/400確實也是問題,記憶體不連續產生write miss
作者:
EdisonX (卡卡獸)
2014-10-15 21:33:00這問題之前解過, #1HVcO7tV , 效能差 50 倍以上.原文後段已有解法 , 照著解效能應可有明顯提升.
作者:
dirkc (3781615)
2014-10-18 14:45:00阿我的意思就是[][]那裡記憶體一直跳,不是零或一,感謝澄清
作者:
bluesoul (å¿™æ»ä½ è€çˆ¸)
2014-10-18 22:23:00把乘法,除法,取餘數拿掉,用別的方法代替
作者:
sky391 (sky)
2014-10-23 10:02:00謝謝大家的幫忙 問題已解決感謝E大的方法 最後效能從做一次8Xms提升到一次4Xms