紧密循环中的OpenMP

时间:2018-10-09 17:27:21

标签: io openmp shared-memory

在我的循环中,每个线程都有自己要写入的文件,循环完成后,主进程将所有片段收集到一个大文件中,因此这不是问题。

#openmp parallel
{

  FILE *foutput; 
  foutput = fopen(...)

  i_min = ...   //I manually and equally share index 'i' between OpenMP threads   
  i_max = ...
     for (i = i_min;  i < i_max; ++i) 
        for (j = 0; j < 255; ++j) 
          for (k = 0; k < 255; ++k) {
             double value = some_function(i, j, k, var1, var2, var3);   
             fprintf(foutput, "%lf\n", value);

          }
 fclose(foutput);
}

'some_function'使用大小为(10MB)的变量'var1,var2,var3' 以及之前在主流程中定义的关键是“ some_function”仅读取变量,但什么都不会改变!

因此,这段代码的工作速度非常慢,我不明白为什么。读取openmp线程的共享变量完全可以,并且不会进行任何错误共享。也许是fprintf使得一切如此缓慢,我应该 用二进制文件按块写?

0 个答案:

没有答案