2014-10-31 31 views
0

這對我來說確實很新。我在機器上測試這個hello world代碼。mpi輸出的格式是什麼?

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

謝謝。那麼來自不同節點的輸出可以同時發生,甚至相互重疊?這是這個想法嗎? – enni707 2014-10-31 20:31:49

+0

在另一臺機器上,輸出可能是線路緩衝的。當標準IO被MPI實現通過網絡重定向時,也經常出現這種情況。 – 2014-10-31 23:34:04

+0

@高性能標記謝謝! – enni707 2014-11-02 20:31:50

回答

0

這對我來說看起來很正常。

多個進程正在同時寫入同一個終端,並且o/s交錯寫入。兩個輸出之間的差異很容易通過平臺間緩衝的差異來解釋;一個似乎是緩衝每一行,另一個是每個單詞。

您正在學習的是,在MPI編程中,如果需要的話,程序員有責任跨進程對操作進行排序。運行時平臺不會爲您和運行時平臺做到這一點。