2016-05-30 5 views
0

私はopenmpを使っていくつかの値を計算するforループを並列化しています。結果を1つの出力ファイルに書きたい(順序は関係ありません)。私が使用しているコードの簡略版は次のとおりです。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の行が壊れているか、いくつかの行が複数のコアが中に書いてみることに起因している私は推測混同しているようだほとんどの時間を同時に出力ファイル。 誰かが私にこの問題を解決する方法を教えてもらえると本当に感謝しています。

+1

'' outfile << ... 'を' #pragma omp critical 'で囲んでください –

+0

何が起こっているのかの説明と修正方法については、[この回答](http://stackoverflow.com/a/33665044/5239503)を参照してください。それ。 – Gilles

答えて

0

コメントの1つに書かれているように、あなたはミューテックスが必要です。

しかし、あなたは

#pragma omp critical 

を使用して、大量のデータをダンプしようとしている場合は、大きなパフォーマンスの影響を与える可能性があります。

各スレッドがプライベートバッファにX行を格納し、それらをすべて1つのバッチでファイルにダンプする解決策を考えてみましょう。

関連する問題