Я использую openmp для параллелизации цикла for, который вычисляет некоторые значения, и я хочу записать результаты в один выходной файл (порядок не имеет значения). упрощенная версия кода, который я использую, следующая:выходной файл с использованием openmp for loop
#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 или несколько строк, кажется, перепутать который я предполагаю, из-за того, что более чем одно ядро попытаться написать в выходной файл в одно и то же время. Я был бы очень благодарен, если кто-нибудь скажет мне, как решить эту проблему.
wrap 'outfile << ...' с '#pragma omp critical' –
См. [Этот ответ] (http://stackoverflow.com/a/33665044/5239503) для объяснения того, что происходит и как исправить Это. – Gilles