[問題] thread 使用請益

作者: DRLai (蘇打)   2017-05-26 23:46:50
開發平台(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)
感謝 :)
作者: aiwhat   2017-05-27 00:00:00
100種結果先存在array裡面,最後再取最大值?漏看了有上億種組合...
作者: iFEELing (ing)   2017-05-27 00:08:00
試看看OpenMP 應該改動幅度比較小pthread 要自己控 thread 比較繁雜一點
作者: aiwhat   2017-05-27 00:12:00
數量上億的話可以考慮用 CUDA 或 OpenCL
作者: grayStone (灰色石頭)   2017-05-27 00:14:00
openmp?
作者: iFEELing (ing)   2017-05-27 00:15:00
openCL 或 cuda 要自己控device/queue/mem 更複雜啊啊啊
作者: aiwhat   2017-05-27 00:16:00
但是他數量這麼多四核算4倍好了也要跑快三天耶...
作者: iFEELing (ing)   2017-05-27 01:18:00
C跟T不一定一樣啊忽略機台限制的話,看起來頗適合MapReduce的啊
作者: DRLai (蘇打)   2017-06-06 23:22:00
感謝各位建議,後來我直接採用 thread pool 方式實做,降低修改的複雜程度, CTPL.h 蠻好用但功能不多,推薦給有相同疑問的板友 :) :)

Links booklink

Contact Us: admin [ a t ] ucptt.com