Во время реализации курсовой работы я должен написать программу MPI для решения механики сплошных сред PDE. (FORTRAN)MPI коллективный выход 5 несмежных 3D-массивов в специальной форме
В файле программы последовательности записывается следующим образом:
do i=1,XX
do j=1,YY
do k=1,ZZ
write(ifile) R(i,j,k)
write(ifile) U(i,j,k)
write(ifile) V(i,j,k)
write(ifile) W(i,j,k)
write(ifile) P(i,j,k)
end do
end do
end do
В параллельной программе, я пишу то же самое, следующим образом: /распараллеливание происходит только вдоль оси Х/
call MPI_TYPE_CREATE_SUBARRAY(4, [INT(5), INT(ZZ),INT(YY), INT(XX)], [5,ZZ,YY,PDB(iam).Xelements], [0, 0, 0, PDB(iam).Xoffset], MPI_ORDER_FORTRAN, MPI_FLOAT, slice, ierr)
call MPI_TYPE_COMMIT(slice, ierr)
call MPI_FILE_OPEN(MPI_COMM_WORLD, cFileName, IOR(MPI_MODE_CREATE, MPI_MODE_WRONLY), MPI_INFO_NULL, ifile, ierr)
do i = 1,PDB(iam).Xelements
do j = 1,YY
do k = 1,ZZ
dataTmp(1,k,j,i) = R(i,j,k)
dataTmp(2,k,j,i) = U(i,j,k)
dataTmp(3,k,j,i) = V(i,j,k)
dataTmp(4,k,j,i) = W(i,j,k)
dataTmp(5,k,j,i) = P(i,j,k)
end do
end do
end do
call MPI_FILE_SET_VIEW(ifile, offset, MPI_FLOAT, slice, 'native', MPI_INFO_NULL, ierr)
call MPI_FILE_WRITE_ALL(ifile, dataTmp, 5*PDB(iam).Xelements*YY*ZZ, MPI_FLOAT, wstatus, ierr)
call MPI_BARRIER(MPI_COMM_WORLD, ierr)
Это хорошо работает. Но я не уверен в использовании массива dataTmp. Какое решение будет быстрее и правильнее? Как насчет использования 4D-массива, такого как dataTmp во всей программе? Или, может быть, я должен создать 5 специальных mpi_types с разными смещениями.
Благодарим вас за ответ. Но, к сожалению, я не могу изменить формат файла. Я отчетливо понимаю, что этот формат неудобен, но я не могу. Я новичок в MPI. Не могли бы вы показать какой-нибудь удобный пример того, что вы описали (отдельные типы данных и т. Д.) – Vasiliy
Когда я отправил свой ответ, мне было интересно, почему @ Джонатан Дурси еще не дал ответа. Очевидно, он прилагал немало усилий, чтобы сохранить титул короля StackOverflow. –
@ Vasiliy, возможно, вы можете рассмотреть предварительную обработку и пост-обработку, чтобы получить файл в формате, который вы хотите для производительности? часто шаг преобразования может произойти быстро, хотя для достаточно больших наборов данных, конечно, есть точка, где последовательное пре-или пост-преобразование несостоятельно. –