2013-03-18 2 views
3

Когда я бегу мои небольшие параллельные коды, я обычно выходные N файлов (N является число процессоров) в виде fileout.dat.xxx, где xxx это номер процессора (с использованием I3.3), а затем просто cat их в один файл fileout.dat после завершения кода.Параллельное IO & Дозапись

Мой вопрос: могу ли я использовать ACCESS='append' или POSITION='append' в операторе OPEN и все ли процессоры записывать в тот же файл?

ответ

3

На практике нет. POSITION = 'append' просто говорит, что указатель файла будет в конце файла после выполнения инструкции open. Тем не менее, можно изменить положение файла, например. с BACKSPACE, REWIND или такими заявлениями. Таким образом, Fortran POSITION = 'append' не соответствует POSIX O_APPEND, и поэтому ОС POSIX не может гарантировать, что все записи только добавляются в файл и не перезаписывают старые данные.

Furhtermore, если вы запустите свой код в кластере, имейте в виду, что O_APPEND не работает во многих сетевых файловых системах, таких как NFS.

Для параллельного ввода-вывода с несколькими процессами/потоками, записываемыми в один файл, используйте ACCESS = 'direct' или ACCESS = 'stream' и согласовывайте процессы, по которым записываются диапазоны записей/байтов.

Смежные вопросы