作者keke0421 (zrae)
看板C_and_CPP
標題Re: [問題] 使用thread提升效率的問題
時間Thu Dec 6 20:57:05 2012
在各位大大的提點下
小弟將code修改如下:
原本的code function:
void* work_y_sobel()
{
for(int j=0; j<imgHeight; j++) {
for(int i=0; i<imgWidth; i++)
{
pic_gx[3*(j*imgWidth+i)+MYRED] = gx_sobelFilter(i, j, MYRED)
pic_gx[3*(j*imgWidth+i)+MYGREEN] = gx_sobelFilter(i, j, MYGREEN);
pic_gx[3*(j*imgWidth+i)+MYBLUE] = gx_sobelFilter(i, j, MYBLUE);
}
}
return NULL;
}
將上述的MYRED , MYGREEN , MYBLEU 分別變成一個fun,我只列出一個
void * work_y_sobel_r()
{
for(int j=0; j<imgHeight; j++)
for(int i=0; i<imgWidth; i++)
pic_gx[3*(j*imgWidth+i)+MYRED] = gx_sobelFilter(i, j, MYRED)
return NULL;
}
而我本來有三個for迴圈 每一個for迴圈拆成3個小的fun
所以總共變成9個小fun 其中六個彼此獨立,所以先下去跑,跑完才跑最後三個加總部分
修改完後,的確效率有變比較好
3個thread時: 2秒 //每一個thread 個別跑上面原始未修改的for loop
6個thread時: 1.4秒左右
9個thread時: 1.1~1.2秒左右
但我的問題是 原始版本 也就是沒有thread的情況下 是跑0.8秒
而原始版本是將三個for迴圈 全部寫在main裡面
有點百思不得其解 所以又來請大大們鞭我 給我一點提示>"<
謝謝><"
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.37.168.197
→ chengcti:你是問為什比較快是嘛? 12/06 21:42
→ xpride:這裡的9個thread是不停的交換執行,也就是說 12/07 03:10
→ xpride:有時候是thread[m]在執行,有時候是thread[n]。 12/07 03:10
→ xpride:你在這裡用了9個function,每個裡面有2個迴圈 12/07 03:13
→ xpride:2層迴圈才對。這樣可以說是9個巢狀迴圈同時交換在跑 12/07 03:14
→ xpride:原本的寫法卻只要一個雙層迴圈,一次跑完。 12/07 03:15
→ xpride:首先thread也是要花費額外的資源的,然後9個迴圈 12/07 03:18
→ xpride:一次做一件事,不一定會比一個迴圈一次做3件事還快 12/07 03:19
→ xpride:這要看迴圈裡的內容而定。最後有一個很重要的事 12/07 03:21
→ xpride:你的9個function裡面的最後3個,好像有參考前6個function 12/07 03:22
→ xpride:的執行結果,如果後3個function都被系統決定要先做 12/07 03:22
→ xpride:那你就會出現讀到錯誤或未完成資料的問題了 12/07 03:23
→ linotwo:計時的起訖點可能要注意一下。 12/07 11:04
※ 編輯: keke0421 來自: 114.37.180.68 (12/07 23:42)
→ keke0421:謝謝各位大大的指點!! 12/08 01:09