2013-05-20 17 views
3

什麼我問的是,如果我有這樣的事情:使用MPI程序,所有進程都可以從用戶輸入中獲取數據嗎?

int main(int argc, char *argv[]) //<---input from command line 
{ 

我需要使用MPI_Bcast以發送數據到所有進程中,或做所有的進程獲得命令行無論如何輸入數據?

+1

請看[這裏](http://www.mpi-forum.org/docs/mpi-11-html/node151.html) – talonmies

+0

@talonmies嗯,這是否意味着如果我使用MPI_Init(&argc,&argv ),他們會通過沒有廣播? – Mechy

+0

究竟在編輯中提到的「服務器」和「客戶端」在哪裏。我將「核心」改爲「過程」,因爲這是正確的術語。如果「noob」(你的術語不是我的)查看任何MPI版本的任何文檔或教程,他們將看到的只是過程。核心這個詞永遠不會出現。 MPI是分佈式內存計算的進程間消息傳遞協議。沒有任何核心概念。恕我直言,編輯使問題和答案更容易通過搜索找到。我正在回滾你編輯。如果你不喜歡它,把它帶到元。 – talonmies

回答

2

如果使用MPI_INIT(&的argc,argv的&)這能解決你的問題:)

無需任何BCAST)

+0

啊,謝謝。我想知道是否有必要這樣做。 – Mechy

+2

請注意,如果您不需要傳遞argc和argv,則仍然需要調用MPI_Init。你可以傳遞NULL作爲參數。 – Madsen

2

完整的命令行傳遞到所有MPI進程是初始的一部分發射機制。這是從MPI標準中有意省略的,但大多數MPI實現都做了正確的事情(tm),並實際將所有命令行參數傳遞給MPI作業中的所有進程。甚至可以將不同的命令行參數傳遞給不同的等級,甚至可以在單個MPI作業中啓動幾個不同的可執行文件。

例如,下面的命令將開始同一可執行program 10個拷貝,並通過它們中的每同一命令行參數arg1arg2

$ mpiexec -n 10 program arg1 arg2 

下面的命令將開始的program 10份和通過arg1到第一五個過程(行列0至4)和arg2到下一五個過程(行列5至9):

$ mpiexec -n 5 program arg1 : -n 5 program arg2 

以下命令將啓動與參數arg1program1 5個人副本和program2 5份帶參數arg2

$ mpiexec -n 5 program1 arg1 : -n 5 program2 arg2 

調用MPI_Init()無關通過該MPI啓動進程的機制。由於許多MPI實現使用附加命令行參數來引導MPI作業,因此在舊MPI-1規範中需要傳遞argcargvMPI_Init。然而,由於Fortran綁定沒有這個參數(在Fortran 77中沒有獲得命令行參數的標準方法),並且以某種方式正確實現了這個要求,所以這種要求在某種程度上是人爲的。因此,MPI-2取消了這個要求,並且允許NULL被代之以傳遞,以便可以編寫通常不能訪問命令行參數的並行庫。因此,大多數MPI實現切換到通過環境變量或其他特定於操作系統的機制來提供所有必要的引導信息。

相關問題