楼主:
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