作者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/cn.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