gpt4 book ai didi

parallel-processing - 使用 MPI_Init()

转载 作者:行者123 更新时间:2023-12-01 22:35:55 25 4
gpt4 key购买 nike

我遇到了关于使用MPI_Init() 的问题。

我只想使用下面上下文中的代码在根处理器上初始化随机数“randv”。为了查看我的目标是否实现,我让程序打印出数组“randv”,方法是在“call RANDOM_NUMBER(randv)”行之后立即放置一个 do 循环。

但是,结果屏幕上显示的是随机数数组重复 8 次(假设处理器数量为 8)。我的问题是为什么除了根处理器之外的处理器在调用 MPI_Init() 之前被初始化。如果在调用MPI_Init 之前所有的处理器都被唤醒并且具有相同的随机数数组,为什么还要费心调用MPI_Init() 进行初始化呢?谢谢。

这是我使用的示例:

program main
include 'mpif.h'
integer :: i
integer :: ierr
integer :: irank
integer :: nrow, ncol
real, dimension(:,:), allocatable :: randv
nrow = 4
ncol = 2
allocate(randv(nrow,ncol))
call RANDOM_SEED
call RANDOM_NUMBER(randv)
do i = 1, nrow
write(*,'(2(f5.2,x))') randv(i,:)
enddo
call MPI_Init ( ierr )
allocate(row_list(ncol), col_list(nrow))
call MPI_Comm_rank ( MPI_COMM_WORLD, irank, ierr )
if( irank == 0 )then
do i = 1, nrow
write(*,'(2(f5.2,x))') randv(i,:)
enddo
endif
call MPI_Finalize ( ierr )
deallocate( randv )
end program

最佳答案

我认为您误解了 MPI 的工作原理。您编写的程序由每个进程执行MPI_Init 初始化 MPI 环境 s.t.这些过程可以相互作用。初始化后,每个进程都由其 rank 唯一标识。您必须确保基于这些排名,每个进程都处理数据的不同部分,或执行不同的任务。

通常,您应该在程序中的任何其他操作之前运行 MPI_Init

使用 MPI_Comm_rank 您可以获得当前进程的 ID(它的 rank)。第一个进程的等级始终为 0。因此,如果您只想在“master”进程上运行部分代码,您可以测试 irank == 0:

program main
include 'mpif.h'
integer :: i
integer :: ierr
integer :: irank
integer :: nrow, ncol
real, dimension(:,:), allocatable :: randv

! Initialize MPI
call MPI_Init ( ierr )
! Get process ID
call MPI_Comm_rank ( MPI_COMM_WORLD, irank, ierr )

! Executed on all processes
nrow = 4
ncol = 2
allocate(randv(nrow,ncol))

! Only exectued on the master process
if ( irank == 0 ) then
call RANDOM_SEED
call RANDOM_NUMBER(randv)
do i = 1, nrow
write(*,'(2(f5.2,x))') randv(i,:)
enddo
endif

! Executed on all threads
allocate(row_list(ncol), col_list(nrow))

! Only exectued on the master process
if ( irank == 0 ) then
do i = 1, nrow
write(*,'(2(f5.2,x))') randv(i,:)
enddo
endif

deallocate( randv )

! Finalize MPI, should always be executed last
call MPI_Finalize ( ierr )
end program

关于parallel-processing - 使用 MPI_Init(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23691491/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com