Re: [问题] RGB填图

楼主: 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:00
Emp->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:00
BCB 没有贴整张图的指令吗??
楼主: sky391 (sky)   2014-10-15 11:52:00
BCB不确定有没有直贴整张的
作者: dirkc (3781615)   2014-10-15 13:00:00
0/400有些怪;赋值的过程内存一直跳,可能是慢的主因
楼主: sky391 (sky)   2014-10-15 14:20:00
我用i = 1开始也没有改变
作者: loveflames (咕啾咕啾魔法阵)   2014-10-15 14:29:00
重点不是i=0或i=1
楼主: sky391 (sky)   2014-10-15 14:37:00
已经是分成RGB三个,还有办法一次抓内存吗?
作者: loveflames (咕啾咕啾魔法阵)   2014-10-15 14:49:00
合在一起比较好,这样资料局部性比较高,cache miss的延迟比较低。另外就是切几个thread,利用cache miss时跑其他thread(如果你的CPU支援hyperthreading的话)不知道RGB函数里做了些什么,也许可以用SIMD/FMA指令
作者: johnpage (johnpage)   2014-10-15 15:11:00
内存部分没有问题问题在显示的部分
作者: loveflames (咕啾咕啾魔法阵)   2014-10-15 15:24: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

Links booklink

Contact Us: admin [ a t ] ucptt.com