2017-02-16 13 views
3

我有一個全球性的陣列,A,其元素最初不均勻分佈在多個過程中MPI程序。爲了負載平衡,我想重新分配A的元素,以便每個進程擁有大約相同數量的元素。重排中有很大的自由度,因爲A的元素排序並不重要 - 我不關心A的哪些元素在哪個過程中結束。當然,我會盡可能快地完成轉移。功能/算法以均勻地重新分配數據處理介乎

是否有這個問題,標準溶液,或能解決這個問題對我來說是MPI函數名稱不規範?

回答

0

通常這被稱爲「負載均衡」,因爲你已經說。

沒有直接的MPI函數,你需要做一些算術計算和發送/接收自己。然而,在那裏有相當多的圖書館,它們提供了很好的分區域等。 Metis是非常流行的網格或基於圖分區。

在你的情況下,困難來自於事實,所有的隊伍可能需要發送(和接收)他們的數據(從)不同的列數只是部分。如果您有可能首先在一個等級上獲得完整的全球A,則可以用MPI_Scatter分散它。否則,你需要做一些計算:

  • 先發(MPI_ALLGATHER)各級的元素計數的每一個等級
  • 指望有多少元素每個等級應該發送(接收)和(從)人。
  • 執行發送/接收或使用單向通訊。