Параллельный ввод-вывод
Когда я запускаю свои мелкомасштабные параллельные коды, я обычно выводю N файлов (N - это число процессоров) в виде fileout.dat.xxx
где xxx
номер процессора (используя I3.3
) а потом просто cat
их в один fileout.dat
файл после завершения кода.
Мой вопрос, могу ли я использовать ACCESS='append'
или же POSITION='append'
в OPEN
оператор и все процессоры пишут в один файл?
1 ответ
На практике нет. POSITION='append' просто говорит, что указатель файла будет в конце файла после выполнения оператора open. Однако возможно изменить положение файла, например, с помощью BACKSPACE, REWIND или таких операторов. Таким образом, Fortran POSITION='append' не соответствует POSIX O_APPEND, и, следовательно, POSIX OS не может гарантировать, что все записи только присоединяются к файлу и не перезаписывают более старые данные.
Более того, если вы запускаете свой код в кластере, помните, что O_APPEND не работает во многих сетевых файловых системах, таких как NFS.
Чтобы выполнить параллельный ввод-вывод с несколькими процессами / потоками, записывающими в один файл, используйте ACCESS='direct' или ACCESS='stream' и попросите процессы согласовать, в какие записи / байтовые диапазоны записывать данные.