研究文章

使用Coarrays遗留Fortran程序并行化:策略和案例研究

清单5

使用MPI_ALLGATHER收集本地数组为全球数组。
整数::my_rank num_procs
整数,可分配,维度(:)::&
displs my_first my_last,计数
调用mpi_comm_size (MPI_COMM_WORLD num_procs ierr)
调用mpi_comm_rank (MPI_COMM_WORLD my_rank ierr)
分配(my_first (num_procs), my_last (num_procs) &
计数(num_procs) displs (num_procs))
my_first (my_rank + 1) =lbound(sn, 2)
my_last (my_rank + 1) =ubound(sn, 2)
调用mpi_allgather (MPI_IN_PLACE 1 MPI_INTEGER &
my_first, 1 MPI_INTEGER MPI_COMM_WORLD ierr)
调用mpi_allgather (MPI_IN_PLACE 1 MPI_INTEGER &
my_last, 1 MPI_INTEGER MPI_COMM_WORLD ierr)
我= 1,num_procs
displs (i) = my_first (i)−1
计数(i) = my_last (i)−my_first (i) + 1
最后做
调用mpi_allgatherv (sn, 5 * (my_rank + 1), &
MPI_DOUBLE_PRECISION sn_global 5 *, &
5 * displs MPI_DOUBLE_PRECISION MPI_COMM_WORLD ierr)
调用mpi_allgatherv (cr, 5 * (my_rank + 1), &
MPI_DOUBLE_PRECISION cr_global 5 *, &
5 * displs MPI_DOUBLE_PRECISION MPI_COMM_WORLD ierr)