我有以下问题:
在我的代码中,我定义了以下矩阵:
col_1
此外,它被声明为自定义类型typedef struct
{
float valor_actual;
int direccion;
} punto;
punto matriz[X][Y];
:
mpi_punto
然后,主进程(等级= 0)将矩阵发送给其他进程。矩阵按列划分:
MPI_Datatype mpi_punto;
int count = 2;
int blocklens[] = {1,1};
MPI_Aint indices[2];
MPI_Type_extent(MPI_DOUBLE, &indices[0]);
MPI_Type_extent(MPI_DOUBLE, &indices[1]);
MPI_Datatype old_types[] = {MPI_FLOAT,MPI_INT};
MPI_Type_struct(count,blocklens,indices,old_types,&mpi_punto);
MPI_Type_commit(&mpi_punto);
这是其他进程的代码:
if (rango == 0) //Proceso maestro
{
//Inicializamos la matriz
for (i=0; i< X; i++)
{
for (j=0; j < Y; j++)
{
matriz[i][j].valor_actual= 0.0;
}
}
col_por_proceso = Y/num_esclavos;
resto = Y%num_esclavos;
desplz = 0;
for (i=1; i<=num_esclavos; i++)
{
MPI_Send(&matriz[0][desplz],X*columnas,mpi_punto,i,1,MPI_COMM_WORLD);
desplz = desplz + columnas;
} .....
在上面的代码中,每个进程用数字4.0填充单元格if (rango != 0) //Procesos
{
MPI_Recv(&matriz[0][desplz],X*columnas,mpi_punto,0,1,MPI_COMM_WORLD,&estado);
matriz[0][rango].valor_actual = 4.0;
printf("proceso %d -> %8.1f\n",rango, matriz[0][rango].valor_actual);
MPI_Send(&matriz[0][desplz], X*columnas, mpi_punto, 0, 4, MPI_COMM_WORLD);
}
并将其矩阵块发送给主单元。
母版从流程中收集数据,当我打印结果时,矩阵的所有值均为0.0,并且没有单元格的值为4.0。我想打印字段matriz[0][number of Rank of the process]
的值,并且该字段属于结构valor_actual
。矩阵中的每个单元格都有一个结构punto
。
punto
但是,主计算机没有发送结构矩阵,而是发送浮点矩阵(for (j = 0; j < Y; j++)
{
printf("maestro (%d y %d) %8.1f\n",0,j, matriz[i][j].valor_actual);
}
),然后在我打印结果时,第0行中的单元格的值为4.0
会有什么问题?
谢谢。