作者DRLai (蘇打)
看板C_and_CPP
標題[問題] thread 使用請益
時間Fri May 26 23:46:50 2017
開發平台(Platform): (Ex: Win10, Linux, ...)
Linux Centos 7
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
G++ 4.8.5
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
純 C++11
使用 #include <thread>
問題(Question):
想要使用 Thread 加速現有資料計算
不知道該如何開始 ..
程式碼(Code):(請善用置底文網頁, 記得排版)
現有程式碼大至如下
int max_score = 0
for( int a = 0 ; a < 10 ; ++a ) {
for( int b = 0 ; b < 10 ; ++b ) {
int score = algorithm(a,b);
if ( score > max_score ) { max_score = score; }
}
}
簡單來說 algorithm 會帶入 a,b 全部組合
也就是 100 種排列,經過演算法計算後得到 score
我只需要計算最大 score 值
上述程式運作良好
但實際資料大概上億種組合
每次運算約 0.01 秒,耗費時間仍可觀
看過一些文章都是平行做兩件不同 function
我要計算同個 function 而且需要比較結果
找不到類似的 example (包含限制 thread 數量等)
目前機台只有四核心可用
想要透過 thread 加速,不知道該從何入手
希望板友能提供一些簡易說明
(有看過需要使用到 lock / unlcok 或是 mutex .. 因為要避免 race condition)
感謝 :)
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.36.0.3
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1495813613.A.1BD.html
1F:→ aiwhat: 100種結果先存在array裡面,最後再取最大值? 05/27 00:00
2F:→ aiwhat: 漏看了有上億種組合... 05/27 00:07
3F:→ iFEELing: 試看看OpenMP 應該改動幅度比較小 05/27 00:08
4F:→ iFEELing: pthread 要自己控 thread 比較繁雜一點 05/27 00:09
5F:→ aiwhat: 數量上億的話可以考慮用 CUDA 或 OpenCL 05/27 00:12
6F:→ grayStone: openmp? 05/27 00:14
7F:→ iFEELing: openCL 或 cuda 要自己控device/queue/mem 更複雜啊啊啊 05/27 00:15
8F:→ aiwhat: 但是他數量這麼多四核算4倍好了也要跑快三天耶... 05/27 00:16
9F:→ iFEELing: C跟T不一定一樣啊 05/27 01:18
10F:→ iFEELing: 忽略機台限制的話,看起來頗適合MapReduce的啊 05/27 01:24
11F:→ DRLai: 感謝各位建議,後來我直接採用 thread pool 方式實做,降低 06/06 23:22
12F:→ DRLai: 修改的複雜程度, CTPL.h 蠻好用但功能不多,推薦給有相同 06/06 23:23
13F:→ DRLai: 疑問的板友 :) :) 06/06 23:23
※ 編輯: DRLai (1.163.229.152), 06/06/2017 23:24:16