Redian新闻
>
能求到office max的reciept吗?
avatar
能求到office max的reciept吗?# PennySaver - 省钱一族
y*k
1
【 以下文字转载自 Programming 讨论区 】
发信人: ystdpk (ystdpk), 信区: Programming
标 题: c++ thread 求助
发信站: BBS 未名空间站 (Fri Jan 31 21:12:20 2014, 美东)
有一个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);
}
avatar
l*t
2
先问问。谢谢了。
avatar
a*x
3
C++11好像有thread了
avatar
y*m
4
avatar
M*u
5
假定输入是50m,每行4个数字,sizeof(double) * 4 =~ 32 bytes, 如果全部cache在
内存里,大概需要50m * 32 =~ 2GB。有的thread finish的比较早,有的比较晚是因为
每个thread分配到一样多的count,但是有的输入可能需要算很久。这类科学计算的问
题一般使用openmp,非常容易写。
http://en.wikipedia.org/wiki/OpenMP
可以用scheduling clause里的dynamic
avatar
t*9
6
rate很高

【在 l*****t 的大作中提到】
: 先问问。谢谢了。
avatar
l*t
7
rate多少亚?谢谢了

【在 t*****9 的大作中提到】
: rate很高
avatar
f*h
8
这个能干啥用阿
avatar
a*n
9
能。fleamarket上有很多。一般5%左右。

【在 l*****t 的大作中提到】
: 先问问。谢谢了。
avatar
a*n
10
match墨盒!

【在 f*****h 的大作中提到】
: 这个能干啥用阿
avatar
w*1
11
怎么match墨盒呀?我家墨都快烧完了,刚好买了点东西在那家店,多少钱可以换?
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。