2012-05-13 38 views
1

我使用MPI_Scatterv撒一個非常大的數組:誤差與長位移MPI scatterv

MPI_Scatterv(list, counts, displacements, MPI_LONG, pSubList, counts[rank], MPI_LONG, MASTER, MPI_COMM_WORLD); 

,我已經聲明計數位移只要(int類型的變量不夠),但是,MPI_Scatterv只接受計數和位移的int變量。

任何想法,我怎麼能以某種方式解決這個問題?

回答

2

你不能用long來代替int,至少在大多數MPI 2.2實現中不能。即使您按照Greg的建議創建了用戶定義的數據類型,您可能(並且大多數情況下)會遇到實施限制,例如使用整數來表示內部偏移量。 MPI 3.0草案特別解決了此問題,並要求C和Fortran綁定中的偏移量和計數參數都是長(64位)類型。

直到MPI 3.0成爲標準並且符合標準的實現出來以後,我會堅持一些子通信方案,比如將數據分散到多個分散的子集中。

1

爲什麼不分配你的散點以及int類型就足夠了?

您可以考慮將MPI進程作爲樹的節點運行。並且讓中間樹節點具有它們自己的相應子樹的分散/聚集。

0

您可以創建一個自定義MPI數據類型來表示一個LONG塊。位移和計數將是該塊大小的倍數。