我使用openmp并行化一个for循环来计算一些值,我想把结果写在一个输出文件中(顺序并不重要)。我使用的代码的简化版如下:
#pragma omp parallel for schedule(dynamic)
for(n=0; n<M; n++){
// calculate some parameters, e.g. a,b,c,d
// now write them in the output file which is already opened using the config.dat file
outfile << setprecision(8) << a << ", " << b << ", " << c << ", " << d << "\n";
}
outfile.close();
大多数时候我收到正确的outfile但有时我在outfile中有断行或者某些行似乎混淆了我猜是因为多个核心尝试在输出文件中写入同一时间。 如果有人能告诉我如何解决这个问题,我将非常感激。
答案 0 :(得分:0)
正如其中一条评论所述,您需要一个互斥锁。
但是,如果要使用
转储大量数据#pragma omp critical
可能会对性能产生巨大影响。
考虑一种解决方案,其中每个线程将X行存储在专用缓冲区中,并将它们全部转储到文件中。