我只是花了一些时间试图让这个循环 openMPed,但是对于 2 个线程,它加倍了 Wall time!我错过了什么重要的东西吗?
总体任务是并行读取一个大文件(~ 1GB),一个 ifstream 被分成几个字符串缓冲区,这些用于将数据插入到结构符号中。到这里为止,一切都很快。同样给循环私有变量 str 和 locVec 进行操作也不会改变什么。
vector<string> strbuf; // filled from ifstream
vector< vector <Symbol> > symVec; // to be filled
#pragma omp parallel for num_threads(2) default(none) shared(strbuf, symVec)
for (int i=0; i<2; i++)
{
string str = strbuf[i];
std::stringstream ss(str);
// no problem until here
// this is where it slows down:
vector<Symbol> locVec;
std::copy(std::istream_iterator<Symbol>(ss), std::istream_iterator<Symbol>(), std::back_inserter(locVec));
symVec[i] = locVec;
}
编辑:: 抱歉不精确,但文件内容已经按顺序读取并在此时分为 strbufs。文件已关闭。在循环内没有文件访问。