2014-04-20 64 views
1

我想在使用MPI_Bcast()的MPI中的進程之間共享字符數組。任何人都可以讓我知道在這種情況下必須作爲計數和數據類型傳遞什麼?在MPI中廣播(共享)數組

陣:

char * Var; 

廣播功能在MPI:

int MPI_Bcast(void *buffer, int count, MPI_Datatype datatype, int root, MPI_Comm comm) 

回答

1

你想要MPI_Datatype MPI_BYTEint countstrlen(Var) + 1

這裏是解釋爲什麼: 對於數據類型你需要一些r與您發送MPI_INT來傳送整數數組非常相似,請參閱char。這是MPI_BYTE爲:

MPI_BYTE: 這是betwee 0和255,即,一個字節的8位正整數。

至於長度,這將不得不是數組的大小。如果我理解正確,這可能會因您要發送的字符串的長度而異。因此,您必須首先調用strlen(Var)來獲取字符串的長度。 As

strlen()函數計算字符串s的長度, ,不包括終止空字節('\ 0')。

您必須爲字符串的空字符終止符添加一個字節。

問題:上面的代碼可能導致內存泄漏:您的問題是,它掌握在MPI_Broadcast性質,只有參與的進程之一是意識到被髮送的信息。因此只有這個過程才能夠確定正確的count所有其他過程都處於虧損狀態,因爲他們沒有任何可以撥打strlen的地方。那麼我們能做些什麼呢?

  1. 廣播字符串的由根處理器經由所確定的長度strlen第一,然後廣播的實際字符串組合
  2. 使用MPI_SendMPI_Recv允許你輪詢在接收proceses消息大小。

我會建議使用第二種方法,因爲這樣可以避免不必要的障礙。關於這個話題的一個很好的方法可以找到here

+0

非常感謝。 – user3403765