Меня интересует, есть ли в OpenMPI команда или техника, чтобы иметь атомный вызов для записи в stdout (или, если на то пошло, любой поток).«Атомный» вызов cout в MPI
Что я заметил, так это то, что во время выполнения программ MPI вызовы write to cout (или другие потоки) могут запутаться, так как каждый proc может писать каждый раз, когда попадает в определенный раздел кода. При представлении результатов строка может быть записана несколькими процедурами, что путает проблему. Таким образом, 2 различных прок может сделать что-то вроде этого:
//Proc 10 - results calculated somewhere above
// result1 = 10
// result2 = 11
cout << "My results are: " << result1 << " " << resul2 << endl;
и:
//Proc 20 - results calculated somewhere above
// result1 = 20
// result2 = 21
cout << "My results are: " << result1 << " " << resul2 << endl;
Но результат может быть:
My results are: 20 My results are: 10 11 21
Что я ищу что-то вроде " блокировка "или атомный cout (а также, возможно, запись в другие потоки, такие как потоки файлов). Поэтому, как только я начинаю писать cout, он блокируется до конца инструкции или до тех пор, пока не будет выпущен endl или flush в поток. Если бы это было так, я бы гарантирован, что 2 линия будет отдельной (но, конечно, я до сих пор не знаю, какая линия придет первым):
My results are: 20 21
My results are: 10 11
Два разных ПРОЦЕССА или ВТОРОЙ поток? –
Я спрашивал о двух разных процессах. –
Запуск на той же машине или на разных машинах? –