[问题] 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