Hallo,
Die MPI-Routinen eines vorhandenen Programmes will ich verbessern.
Dabei soll der Buffer, der vorher fest angegeben wurde, nun dynamisch sein:
Das ist der alte I/O-Code, der funktioniert:
Der Nachteil des Codes bestelt nun darin, dass man wissen muss, dass die Datei 64*64 Werte einzulesen hat.
Also wollte ich das anpassen mit dynamischer Speicherverwaltung:
Der neue Code funktioniert nicht.
Jemand eine Idee?
Gruß
mag
Die MPI-Routinen eines vorhandenen Programmes will ich verbessern.
Dabei soll der Buffer, der vorher fest angegeben wurde, nun dynamisch sein:
Das ist der alte I/O-Code, der funktioniert:
C:
double dummyArray[64][64];
pnt_config->MPI_MyOffset = 0;
MPI_File_set_view(pnt_config->MPI_MyFile, pnt_config->MPI_MyOffset, pnt_config->MPI_MyDatatype, pnt_config->MPI_MySubArray, "native", MPI_INFO_NULL);
MPI_File_read_all(pnt_config->MPI_MyFile,&dummyArray,pnt_config->MPI_intArray_Subsize[0]*pnt_config->MPI_intArray_Subsize[1],pnt_config->MPI_MyDatatype,&pnt_config->MPI_MyStatus);
for (k=pnt_config->int_kStartReal; k <= pnt_config->int_kEndReal; k++)
{
for (j=pnt_config->int_jStartReal; j <= pnt_config->int_jEndReal; j++)
{
for (i=pnt_config->int_iStartReal; i <= pnt_config->int_iEndReal; i++)
{
pnt_mesh->x[i][j][k]=dummyArray[i-(pnt_config->int_iStartReal)][j-(pnt_config->int_jStartReal)];
}
}
}
Also wollte ich das anpassen mit dynamischer Speicherverwaltung:
C:
double ** dummyArray;
dummyArray = (double **)malloc(int_iMeshPoints * sizeof(double *));
for (i=0; i < int_iMeshPoints; i++)
{
dummyArray[i] = (double *)malloc(int_jMeshPoints * sizeof(double));
}
pnt_config->MPI_MyOffset = 0;
MPI_File_set_view(pnt_config->MPI_MyFile, pnt_config->MPI_MyOffset, pnt_config->MPI_MyDatatype, pnt_config->MPI_MySubArray, "native", MPI_INFO_NULL);
MPI_File_read_all(pnt_config->MPI_MyFile,dummyArray,pnt_config->MPI_intArray_Subsize[0]*pnt_config->MPI_intArray_Subsize[1],pnt_config->MPI_MyDatatype,&pnt_config->MPI_MyStatus);
for (k=pnt_config->int_kStartReal; k <= pnt_config->int_kEndReal; k++)
{
for (j=pnt_config->int_jStartReal; j <= pnt_config->int_jEndReal; j++)
{
for (i=pnt_config->int_iStartReal; i <= pnt_config->int_iEndReal; i++)
{
pnt_mesh->x[i][j][k]=dummyArray[i-(pnt_config->int_iStartReal)][j-(pnt_config->int_jStartReal)];
}
}
}
Jemand eine Idee?
Gruß
mag
Zuletzt bearbeitet: