由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - c++ thread 求助
相关主题
A helloworld OpenMP question?请教,如何设置run time KMP_PLACES_THREADS
[合集] Intel 9编译器在vc 6.0的环境里编译openmp的问题真正的multi-threading是5个thread要5个cpu?那apache是真正的m
我写的C++ ParallelForLoop,感兴趣的来下载测试boost drives me crazy!! Question!
thread c++ 问题boost::thread弱文
如何查看一个程序/进程使用了哪些cpu?pthread on windows?
用root跑程序更快问个multiple core的问题
求助个dll调用的问题multi threading 还是 multi processing
c++11 std::thread 和 openmp 那个额外开销少?thread, semaphore, 问题。
相关话题的讨论汇总
话题: thread话题: boost话题: pstart话题: batchsize话题: num
进入Programming版参与讨论
1 (共1页)
y****k
发帖数: 71
1
有一个50 million 行的文本。每行四列数字。
要求每行求一个特殊函数的值,把此值输出为第五列。次函数的求值所花的时间可能很
快,如果四个数比较小, 也可能要花到10几到100倍的时间如果数比较大。
想用36个boost thread。
有没有人能提供一个boost thread 的代码。谢谢了。
我写了一个下面的,但是cpu浪费比较严重,有的thread 结束早,有的结束慢。而且不
知道2000行一个thread是不是好的选择。
int batchSize = 2000;
int num_of_lines = 50100100;
bool end_of_file = false;
int pstart = 0;
boost::thread_group io;
while( ! end_of_file )
{
boost::thread_group g;
vector > out;
out.resize(num_of_threads);

for( int i = 0; i < num_of_threads; )
{
if(num_of_lines - pstart < BATCHMAX)
{
batchSize = num_of_lines - pstart;
boost::thread *tp = new boost::thread( worker, batchSize
, boost::ref(out[i]) );
g.add_thread(tp);
pstart = pstart + batchSize;
i++;
end_of_file = true;
break;
}
else
{
boost::thread *tp = new boost::thread( worker, batchSize
, boost::ref(out[i]) );
g.add_thread(tp);
pstart = pstart + batchSize;
i++;
}
}
g.join_all();

io.join_all();
boost::thread *tprint = new boost::thread( appendToFile, boost::ref(File
), out);
io.add_thread(tprint);
}
k****5
发帖数: 546
2
use dynamic scheduling(or similar heuristic) instead of static one
y****k
发帖数: 71
3
我想我知道你的意思。但是不知道该如何写出来。可不可以帮忙写一下或者有什么地方
参考参考

【在 k****5 的大作中提到】
: use dynamic scheduling(or similar heuristic) instead of static one
t****t
发帖数: 6806
4
google thread pool

【在 y****k 的大作中提到】
: 我想我知道你的意思。但是不知道该如何写出来。可不可以帮忙写一下或者有什么地方
: 参考参考

k****5
发帖数: 546
5
这个问题不许要用底层的thread api, 用openmp解决比较简单
google openmp pragma omp for schedule
还有,不需要那么多thread, 最多core number的两倍差不多了
n******1
发帖数: 3756
6
没看到什么样的函数

【在 y****k 的大作中提到】
: 有一个50 million 行的文本。每行四列数字。
: 要求每行求一个特殊函数的值,把此值输出为第五列。次函数的求值所花的时间可能很
: 快,如果四个数比较小, 也可能要花到10几到100倍的时间如果数比较大。
: 想用36个boost thread。
: 有没有人能提供一个boost thread 的代码。谢谢了。
: 我写了一个下面的,但是cpu浪费比较严重,有的thread 结束早,有的结束慢。而且不
: 知道2000行一个thread是不是好的选择。
: int batchSize = 2000;
: int num_of_lines = 50100100;
: bool end_of_file = false;

y****k
发帖数: 71
7
哦,我没写。假设是worker(int a, int b, int c, int d)

【在 n******1 的大作中提到】
: 没看到什么样的函数
g*********e
发帖数: 14401
8
#pragma omp parallel num_threads(10)
for(int i=0;i<50million; i++) {
worker(line(i));
}
D*******a
发帖数: 3688
9
你可以用boost asio来做threadpool,就不用担心thread之间分配任务不均的问题。
stackoverflow有例子。

【在 y****k 的大作中提到】
: 有一个50 million 行的文本。每行四列数字。
: 要求每行求一个特殊函数的值,把此值输出为第五列。次函数的求值所花的时间可能很
: 快,如果四个数比较小, 也可能要花到10几到100倍的时间如果数比较大。
: 想用36个boost thread。
: 有没有人能提供一个boost thread 的代码。谢谢了。
: 我写了一个下面的,但是cpu浪费比较严重,有的thread 结束早,有的结束慢。而且不
: 知道2000行一个thread是不是好的选择。
: int batchSize = 2000;
: int num_of_lines = 50100100;
: bool end_of_file = false;

l*********s
发帖数: 5409
10
likely the uneven load is due to data locality, you could alleviate this
issue with interleaved work assignment instead of block assignment.
1 (共1页)
进入Programming版参与讨论
相关主题
thread, semaphore, 问题。如何查看一个程序/进程使用了哪些cpu?
python下的expect用root跑程序更快
多线程编程前景如何?求助个dll调用的问题
c++下如何实现多线程?c++11 std::thread 和 openmp 那个额外开销少?
A helloworld OpenMP question?请教,如何设置run time KMP_PLACES_THREADS
[合集] Intel 9编译器在vc 6.0的环境里编译openmp的问题真正的multi-threading是5个thread要5个cpu?那apache是真正的m
我写的C++ ParallelForLoop,感兴趣的来下载测试boost drives me crazy!! Question!
thread c++ 问题boost::thread弱文
相关话题的讨论汇总
话题: thread话题: boost话题: pstart话题: batchsize话题: num