Параллельный ввод-вывод

Когда я запускаю свои мелкомасштабные параллельные коды, я обычно выводю 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' и попросите процессы согласовать, в какие записи / байтовые диапазоны записывать данные.

Другие вопросы по тегам