mpi输出的格式是什么?

时间:2014-10-31 20:10:26

标签: io parallel-processing mpi

这对我来说真的很新。我在机器上测试这个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

你能告诉我这是不是一个不寻常的输出,还是真的只是因机器而异?非常感谢。 〜

1 个答案:

答案 0 :(得分:0)

这对我来说很正常。

多个进程基本上同时写入同一个终端,o / s交错写入。两个输出之间的差异很容易通过平台之间的缓冲差异来解释;一个似乎是缓冲每一行,另一个是每个单词。

您正在学习的是,在MPI编程中,如果需要,程序员有责任跨进程对操作进行排序。运行时平台不会为您执行此操作,并且运行时平台不同。