这对我来说真的很新。我在机器上测试这个hello world代码。
program hello
include 'mpif.h'
integer rank, size, ierror, tag, status(MPI_STATUS_SIZE)
character(12) message
call MPI_INIT(ierror)
call MPI_COMM_SIZE(MPI_COMM_WORLD, size, ierror)
call MPI_COMM_RANK(MPI_COMM_WORLD, rank, ierror)
tag = 100
if(rank .eq. 0) then
message = 'Hello, world'
do i=1, size-1
call MPI_SEND(message, 12, MPI_CHARACTER, i, tag,&
MPI_COMM_WORLD, ierror)
enddo
else
call MPI_RECV(message, 12, MPI_CHARACTER, 0, tag,&
MPI_COMM_WORLD, status, ierror)
endif
write(*,*) 'node', rank, ':', message
call MPI_FINALIZE(ierror)
end program hello
我使用mpif90编译它并提交了4个节点的作业。这就是输出文件的样子:
nodenodenode 2 1 0:: Hello, worldHello, world:Hello, world
node 3 :Hello, world
所以我真的很担心这种格式。我再也没有多少MPI经验。我在另一台机器上测试了它,它看起来像这样:
node 1 :Hello, world
node 0 :Hello, world
node 2 :Hello, world
node 3 :Hello, world
你能告诉我这是不是一个不寻常的输出,还是真的只是因机器而异?非常感谢。 〜
答案 0 :(得分:0)
这对我来说很正常。
多个进程基本上同时写入同一个终端,o / s交错写入。两个输出之间的差异很容易通过平台之间的缓冲差异来解释;一个似乎是缓冲每一行,另一个是每个单词。
您正在学习的是,在MPI编程中,如果需要,程序员有责任跨进程对操作进行排序。运行时平台不会为您执行此操作,并且运行时平台不同。