2014-01-28 60 views
1

據我所知,在MPI中發送的數據類型存在一些限制。例如,我無法在標準MPI中發送鏈接列表,但我發現Boost可以做到這一點。我真的搜索Boost頁面,但實際上它對我來說是模棱兩可的,我無法理解它。那麼使用Boost發送鏈表的最佳方式是什麼?通過在mpi中使用boost來發送鏈接列表

回答

2

爲什麼使用Boost來做到這一點很重要?對Boost文檔進行快速掃描並不會告訴我任何可以爲你提供魔法的東西。

您可以在MPI中發送鏈接列表,您只需要先做一些工作。您需要有一種方法來打包和解壓縮數據到緩衝區。這相對簡單。有兩種方法可以做到這一點。

正確的做法:

  1. 使用MPI數據類型代碼創建一個數據類型的鏈接列表項。我不能告訴你如何做到這一點,因爲它取決於你的項目是什麼樣子,但網上有很多很好的教程,將教你如何使用數據類型,然後你可以找出你的代碼。
  2. 使用常規功能MPI_SEND/MPI_RECV函數可以使用自定義數據類型(而不是內置數據類型之一)發送數據(例如,MPI_INT,MPI_DOUBLE等)。

另一種方式:

  1. 自己寫的函數,配備了一個列表項到緩衝區中。
  2. 使用MPI_SEND/MPI_RECV將該緩衝區作爲字節數組發送。
  3. 編寫另一個函數來解開接收端的緩衝區。

第二種方式看起來比較簡單,但它最終確實同樣複雜。使用MPI數據類型既可以使代碼更清潔,也可以提高性能,因爲MPI可以在數據類型代碼加速的情況下做更多花哨的事情,從而使您的定製打包/解包功能更快。

+0

正確的「其他方式」是使用'MPI_Pack()',而不是字節數組。它本質上是相同的(即將數據複製到連續的緩衝區並將其作爲一條消息發送),但是具有類型安全性。仍然,「正確的方式」+1。 – suszterpatt

+0

是的。有「正確的方式」,「其他的權利,但不是好的方式」,「其他,錯誤的,但更容易理解的方式」。 –

+0

有人可以提供指向這些教程的鏈接以創建自己的MPI數據類型嗎? – CodeKingPlusPlus