我有一個結構:mpi_gather與動態數組結構
typedef struct
{
double distance;
int* path;
} tour;
然後我試圖從所有進程收集的結果:
MPI_Gather(&best, sizeof(tour), MPI_BEST, all_best, sizeof(tour)*proc_count, MPI_BEST, 0, MPI_COMM_WORLD);
收集我的根之後,會是all_best containts只有1個正常的元素和其他垃圾。 all_best的類型是tour *。 MPI_BEST的
初始化:
void ACO_Build_best(tour *tour,int city_count, MPI_Datatype *mpi_type /*out*/)
{
int block_lengths[2];
MPI_Aint displacements[2];
MPI_Datatype typelist[2];
MPI_Aint start_address;
MPI_Aint address;
block_lengths[0] = 1;
block_lengths[1] = city_count;
typelist[0] = MPI_DOUBLE;
typelist[1] = MPI_INT;
MPI_Address(&(tour->distance), &displacements[0]);
MPI_Address(&(tour->path), &displacements[1]);
displacements[1] = displacements[1] - displacements[0];
displacements[0] = 0;
MPI_Type_struct(2, block_lengths, displacements, typelist, mpi_type);
MPI_Type_commit(mpi_type);
}
任何想法都歡迎。
您確定counts [0]和all_paths [0]來自同一個元素嗎? –
@T_T,'MPI_Gather [v]'按進程的順序排列接收到的塊,因此'counts [0]'將總是排序爲'0'的元素的數量,'all_paths [0]'將是來自等級'0'的路徑中的第一項。但是現在我看到「距離」不是整數,所以事情變得更加複雜。你能告訴我如何分配tour.path嗎? –
我已將距離類型更改爲int。你的回答有幫助。謝謝。 –