2010-12-12 78 views
1

我最近遇到了與我的並行程序有關的問題。每個進程都有幾個需要與其他進程交換的glib哈希表,這些哈希表可能非常大。什麼是實現這一目標的最佳方法?發送glib與MPI的hashtable

  • 創建派生數據類型
  • 使用MPI包並解壓
  • 發送鍵&值作爲陣列(問題,因爲元素的量沒有在編譯時已知)

我沒有使用1 & 2之前,甚至不知道這是否可能,這就是爲什麼我問你們。

+0

您可能還想調查在MPI-2中實現的單面內存訪問。我強調'可能'一詞。 – 2010-12-12 15:01:34

回答

2

打包/解壓縮創建您的數據的副本:如果你r地圖很大,你會想避免這種情況。這也排除了你的第三種選擇。

你確實可以定義一個自定義數據類型,但它會有點棘手。舉例來說(參見this answer的結尾)(讀取時用「對」替換「圖」和「對」)。我建議您在這些主題上提供read up以深入瞭解您需要做的事情。

在編譯時不知道元素的數量不應該是真正的問題。您可以在發送地圖內容之前發送包含有效負載大小的消息。這將讓接收進程爲接收緩衝區分配足夠的內存。

您可能還想考慮將地圖內容打印到文件,然後讓這些進程讀取彼此的輸出。這比直接更簡單,但也比消息傳遞更不優雅,也更慢。