我有一個關於MPI_Aint
的簡單問題,但我沒有在任何地方找到任何答案。出於某種原因,至少在OpenMPI 1.8.4和1.10.1中,MPI_Type_size(MPI_Aint)
不起作用(它看起來不像傳統數據類型,例如MPI_Double
或MPI_Int
),但我不認爲這是OpenMPI問題。MPI_Aint的大小?
我必須創建一個類型MPI_Type_create_hindexed()
並動態分配array_of_displacements
數組。計算大小N
後,我寫了
MPI_Aint* disps = (MPI_Aint*) malloc(N*sizeof(MPI_Aint)) ;
,而不是
int mpiAintSize ;
MPI_Type_size(MPI_Aint, &mpiAintSize) ;
MPI_Aint* disps = (MPI_Aint*) malloc(N*mpiAintSize) ;
因爲這個問題。只要我很幸運,sizeof()就可以完成這項工作,而且我不需要可移植性(此數組將用於使用MPI-I/O寫/讀大文件)。
但我想知道:什麼是清潔和便攜的方式來分配我的disps
陣列?我錯過了什麼關於MPI_Aint?
編輯:對於任何感興趣的人,我在Gilles的答覆中發現,不存在MPI_Aint是C類型的可移植性問題。我們從不讀/寫'MPI_Aint',我們只用它們的值來定義結構(不依賴於它們在內存中的大小)。因此不需要爲它們創建一個統一的(便攜式)'MPI_Type'。 –