在我的循环中,每个线程都有自己要写入的文件,循环完成后,主进程将所有片段收集到一个大文件中,因此这不是问题。
#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使得一切如此缓慢,我应该 用二进制文件按块写?