Просмотр MPI-файла и ввод-вывод - PullRequest
2 голосов
/ 15 июня 2011

Я пишу MPI-программу, которая должна считывать часть файла в память, по одной части за раз, причем каждая часть идет в доступный процесс.Поэтому я использую общий указатель файла.Первая часть файла - это заголовок, который я хочу прочитать, чтобы прочитать и распространить по всем процессам. Мне удалось это сделать, прочитав его в главном процессе и передав его всем остальным процессам.

Следующая часть файла представляет собой длинный (теоретически до нескольких гигабайт) массив плавающих троек.Я хочу установить просмотр файла для всех процессов, чтобы он начинался в начале этого массива, и каждый процесс должен видеть весь массив.Кроме того, и это моя настоящая проблема, я не хочу, чтобы процессы видели за пределами этого массива, поэтому после того, как они встретят последний набор из 3-х чисел, они сообщают о EOF.Таким образом, на практике каждый процесс видит только один длинный массив с 3 числами и ничего больше.

После прочтения заголовка это мой код:

MPI_Datatype particle_type;
MPI_Type_contiguous(3,MPI_FLOAT,&particle_type);
MPI_Type_commit(&particle_type);
MPI_Offset cur_file_pos;
MPI_File_get_position_shared(fh,&cur_file_pos);
MPI_File_set_view(fh, cur_file_pos, particle_type, particle_type, (char *) "native", MPI_INFO_NULL); /* fh is the file-handle from MPI_File_open */

Как я понимаю, это просто пропускает заголовок, но просмотр файла не останавливается после массива, он продолжается вследующая часть файла, которая меня не интересует. Может кто-нибудь помочь мне с этой простой проблемой?Я нигде не смог найти подробных объяснений (с примерами) представлений файлов.

1 Ответ

2 голосов
/ 16 июня 2011

К сожалению, MPI_File_set_view не сделает этого за вас; когда вы выходите за рамки filetype, повторяется filetype. Хотя MPI_File_set_view позволит вам разделить представление файла между процессами, оно не позволит вам «усечь» представление файла следующим образом.

Если вы используете указатель общего файла, вероятно, простейшая вещь - это цикл до новой позиции == количество частиц (после того, как представление установлено, указатель файла находится в единицах типов).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...