Диапазон MPI_offset в MPI - PullRequest
       31

Диапазон MPI_offset в MPI

3 голосов
/ 18 февраля 2012

Я использую стандарт MPI2.2 для написания параллельной программы на C. У меня 64-битная машина.

/* MPI offset is long long*/

MPI_Offset my_offset; printf ("%3d: my offset = %lld\n", my_rank, my_offset);

int count; 
MPI_Get_count(&status, MPI_BYTE, &count);

printf ("%3d: read =%d\n", my_rank, count);

Я читаю файл байта очень большого размера. Чтобы прочитать файл параллельно, я устанавливаю смещение для каждого процесса, используя переменную смещения. У меня путаница с типом данных типа MPI_offset, который "whither it is signed or unsigned" long?

Мой второй вопрос - об ограничении «диапазона переменной количества», который используется в функции MPI_Get_count (). так как эта функция используется здесь для чтения всех элементов из буфера каждого процесса so i think it should also be of the long long type to read such a very large file.

Ответы [ 2 ]

4 голосов
/ 18 февраля 2012
Размер

MPI_Offset не определен стандартом - он примерно настолько велик, насколько это возможно.ROMIO, широко используемая базовая реализация MPI-IO, использует 8-байтовые целые числа в системах, которые их поддерживают.Вы можете наверняка узнать это, посмотрев в mpi.h вашей системы.

MPI_Offset очень точно подписан;Существуют функции, такие как MPI_File_seek, где вполне разумно, чтобы значения типа MPI_Offset принимали отрицательные значения.

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

Как правило, по ряду причин лучше не использовать небольшие низкоуровневые блоки ввода-вывода, подобные байту, при выполнении MPI-IO;с точки зрения производительности и читабельности кода лучше выражать ввод-вывод в единицах базовых типов данных.При этом эти ограничения по размеру становятся меньше проблемой.Однако если ваш базовый тип данных действительно байтовый, вариантов не так много.

0 голосов
/ 01 августа 2014

Вы пытались чередовать MPI_File_read с чем-то вроде MPI_File_seek (mpiFile, mpiOffset, MPI_SEEK_CUR)? Таким образом, вы можете избежать переполнения MPI_Offset

...