1
據我所知,在MPI中發送的數據類型存在一些限制。例如,我無法在標準MPI中發送鏈接列表,但我發現Boost可以做到這一點。我真的搜索Boost頁面,但實際上它對我來說是模棱兩可的,我無法理解它。那麼使用Boost發送鏈表的最佳方式是什麼?通過在mpi中使用boost來發送鏈接列表
據我所知,在MPI中發送的數據類型存在一些限制。例如,我無法在標準MPI中發送鏈接列表,但我發現Boost可以做到這一點。我真的搜索Boost頁面,但實際上它對我來說是模棱兩可的,我無法理解它。那麼使用Boost發送鏈表的最佳方式是什麼?通過在mpi中使用boost來發送鏈接列表
爲什麼使用Boost來做到這一點很重要?對Boost文檔進行快速掃描並不會告訴我任何可以爲你提供魔法的東西。
您可以在MPI中發送鏈接列表,您只需要先做一些工作。您需要有一種方法來打包和解壓縮數據到緩衝區。這相對簡單。有兩種方法可以做到這一點。
正確的做法:
MPI_SEND
/MPI_RECV
函數可以使用自定義數據類型(而不是內置數據類型之一)發送數據(例如,MPI_INT
,MPI_DOUBLE
等)。另一種方式:
MPI_SEND
/MPI_RECV
將該緩衝區作爲字節數組發送。第二種方式看起來比較簡單,但它最終確實同樣複雜。使用MPI數據類型既可以使代碼更清潔,也可以提高性能,因爲MPI可以在數據類型代碼加速的情況下做更多花哨的事情,從而使您的定製打包/解包功能更快。
正確的「其他方式」是使用'MPI_Pack()',而不是字節數組。它本質上是相同的(即將數據複製到連續的緩衝區並將其作爲一條消息發送),但是具有類型安全性。仍然,「正確的方式」+1。 – suszterpatt
是的。有「正確的方式」,「其他的權利,但不是好的方式」,「其他,錯誤的,但更容易理解的方式」。 –
有人可以提供指向這些教程的鏈接以創建自己的MPI數據類型嗎? – CodeKingPlusPlus