MPI并行编程传递多维数组需要注意的若干问题
最近很郁闷的是花了近一个多星期的时间才调试出MPI程序的BUG。由于自己是刚开始接触MPI并行编程,对MPI的通信原理的内部机制以及原理理解不是很深入,导致了写程序过程中出现了一个难以理解的BUG:当MPI_Send在传递一个二维数组时,子进程的接收总是错误。这个BUG在调试上没有任何问题,也能正常运行,但是接收到的数据却是乱码,根本不是父进程发送的数据。
首先贴一下我最初的代码
父进程发送
int *buffer = new int[ rand_sub_dim ];
double **sub_population = new double*[ Population_size ];
double **sub_personal_best = new double*[ Population_size ];
for( j =0; j < Population_size; ++ j )
{
sub_population[j] = new double [rand_sub_dim];
sub_personal_best[j] = new double [rand_sub_dim];
}
for( i = 0 ; i< group_size; ++i )
{
for( j=0; j<rand_sub_dim; ++j )
buffer[j] = dim_index[ j+rand_sub_dim*i ];
MPI_Send( buffer, rand_sub_dim, MPI_INT, i, i + DIM_INDEX_TAG, intercomm );
for( j = 0; j<Population_size; ++j )
for( a = 0; a<rand_sub_dim; ++a )
{
sub_population[j][a] = population[j][buffer[a]];
sub_personal_best[j][a] = personal_best[j][buffer[a]];