[問題] 使用thread提升效率的問題
大家好
目前用thread想要提升code的效率 原始版本如下:
for(int i=0;i<width;i++)
for(int j=0;i<heigh;j++)
{
全域變數r = fun1(); // fun1,fun2,fun3,做某種影像處理的運算
全域變數g = fun2(); // 全域變數分別對應到R,G,B
全域變數b = fun3();
};
以上的for loop共有三個 前兩個互相獨立 最後一個是需要前兩個的運算做加總
我自己的CPU是 E3-1230v2 共有八個thread ,cache L3是8mb
在沒有使用thread跑時 跑完時間只需要0.18秒左右
可是當我用3個thread下去跑,因為前兩個for是互相獨立,所以我讓前兩個thread
分別去跑,然後利用wait等兩個跑完,才加總
理論上來說 應該會比較快 但是需要秒數卻要0.4~0.5左右
原本想說是不是cache太小 導致context switch次數太多,算了一下
cache大小8mb 而我的變數的大小是unsigned char = 1 byte
所以約可以裝8百萬個1byte的資料 ,而我的圖片大小是1024*768 約786432
因為RGB所以在乘3,所以2359296約240萬,所以cache理論上來說
可以放三個1024*768的unsigned char矩陣 分析完後覺得好像又不是
cache太小導致context switch太多頻繁的問題
於是不信邪,把3個thread增加到6個thread,反而更慢,變到0.89秒左右
現在想不太出來理由到底是什麼= =..
謝謝各位大大>"<
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.37.179.17
→
11/26 17:40, , 1F
11/26 17:40, 1F
→
11/26 18:07, , 2F
11/26 18:07, 2F
→
11/26 18:08, , 3F
11/26 18:08, 3F
→
11/26 18:10, , 4F
11/26 18:10, 4F
→
11/26 18:11, , 5F
11/26 18:11, 5F
→
11/26 18:16, , 6F
11/26 18:16, 6F
推
11/26 19:25, , 7F
11/26 19:25, 7F
→
11/26 19:26, , 8F
11/26 19:26, 8F
→
11/26 19:26, , 9F
11/26 19:26, 9F
推
11/26 20:52, , 10F
11/26 20:52, 10F
→
11/26 20:53, , 11F
11/26 20:53, 11F
→
11/26 21:58, , 12F
11/26 21:58, 12F
→
11/26 23:17, , 13F
11/26 23:17, 13F
推
11/26 23:44, , 14F
11/26 23:44, 14F
→
11/27 00:15, , 15F
11/27 00:15, 15F
推
11/27 01:57, , 16F
11/27 01:57, 16F
→
11/27 02:11, , 17F
11/27 02:11, 17F
→
11/27 02:11, , 18F
11/27 02:11, 18F
→
11/27 03:39, , 19F
11/27 03:39, 19F
→
11/27 03:40, , 20F
11/27 03:40, 20F
→
11/27 03:42, , 21F
11/27 03:42, 21F
→
11/27 03:42, , 22F
11/27 03:42, 22F
※ 編輯: keke0421 來自: 114.37.180.68 (12/07 23:43)
討論串 (同標題文章)
完整討論串 (本文為第 1 之 2 篇):
4
22
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章