Интересно, как MPI (реализации) справляется с «неправильным использованием», вызванным коллективной записью данных, которая фактически является последовательным доступом к записи (одни и те же данные в одном файле с одинаковым смещением).
Это как-то связано с темой mpi-io-mix-of-single-and-множественный-процесс-вывод .
В случае небольших наборов информации (всего несколько байтов),например, информация заголовка, mpi-запись может быть выполнена в пределах ранга == 0, если условие.Это, с другой стороны, может не одобряться чистым стилем программирования, так как это вызывает особый подход к коду, который может вызвать проблемы.Мой вопрос заключается в том, что делает MPI, если я пропускаю это условие if (rank == 0), например,
MPI_File_open(cComm, pCharFilename, MPI_MODE_RDWR | MPI_MODE_CREATE |
MPI_MODE_EXCL, MPI_INFO_NULL, &fileHandler);
const MPI_Offset cCurrOffset = 0;
const MPI_Count cCount = 4;
uint8_t myHeader[cCount] = {1,2,3,4};
MPI_Request mpireq = MPI_REQUEST_NULL;
MPI_Status mpistat;
MPI_File_iwrite_at(fileHandler, cCurrOffset, &myHeader, cCount,
MPI_BYTE, &mpireq);
MPI_Wait(&mpireq, &mpistat);
MPI_File_close(&fileHandler);
Строго говоря, я запускаю условие гонки, но мне все равно, поскольку данные одинаковы.Тестирование показывает, по крайней мере, никаких явных недостатков.Хотя я могу представить, что это не очень хорошо для производительности.Или реализации MPI, такие как openMPI, внутренне оптимизируют такой доступ?Есть ли другие проблемы с таким подходом, которых я не вижу?Поскольку я не нашел ответа ни в спецификации MPI, ни в каких-либо ответах по этой теме, я подумал, что стоит спросить ...