首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >openmp循环在开始时非常快,但后来变得很慢(几乎停滞)

openmp循环在开始时非常快,但后来变得很慢(几乎停滞)
EN

Stack Overflow用户
提问于 2016-04-12 17:40:03
回答 1查看 51关注 0票数 0

我有一段代码,我已经帕拉图,请看下面。代码在开始时运行得非常快,但是在特定的迭代之后它会变慢。

代码语言:javascript
复制
// something before this ...
// filename_list is quite long, 100k+ files

vector<string> some_string_list(filename_list.size(), " ");
int file_count = filename_list.size();

int counter = 0;

#pragma omp parallel for reduction(+:counter) schedule(auto)  
for (int i = 0; i < file_count; i++)
{
  string loop_filename = filename_list[i];  
  counter++;

  // The filename is used to call a class member function and get some data, the file is used for reading
  // This is the heavy part of code
  some_string_list[i] = someclassinstance.getSomeString(loop_filename, param1, param2);
  int temp = counter;
  if(temp % 1000 == 0)
  {
    cout << "." << flush;
  }
}

cout << endl;

我尝试了不同的调度和块大小,但没有帮助。我很感谢你的建议。

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2016-04-12 21:59:58

感谢你们所有的有用的评论。实际上,瓶颈在于HDD上的IO (读取)。初始速度的提高也是文件被缓存的结果。我复制了SSD驱动器上的数据,在这种情况下,并行化产生了巨大而明显的差异,IO不会成为一个大瓶颈。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36569394

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档