Martin,

The name argument to MPI_Get_processor_name is a character string of length at least MPI_MAX_PROCESSOR_NAME, which in OMPI is 256. You are providing a character string of length 200, so OMPI is free to write past the end of your string and into some of your stack variables, hence you are "losing" the values of rank and size. The issue should be gone if you write `char hostName[MPI_MAX_PROCESSOR_NAME];`

Cheers
Joseph

On 2/9/21 9:14 PM, Martín Morales via users wrote:
Hello,

I have what it could be a memory corruption with /MPI_Get_processor_name()/ in Cygwin.

I’m using OMPI 4.1.0; I tried also in Linux (same OMPI version) but there isn’t an issue there.

Below the example of a trivial spawn operation. It has 2 scripts: spawned and spawner.

In the spawned script, if I move the /MPI_Get_processor_name()/ line below /MPI_Comm_size()/ I lose the values of /rank/ and /size/.

In fact, I declared some other variables in the /int hostName_len, rank, size;/ line and I lost them too.

Regards,

Martín

---

*Spawned:*

/#include "mpi.h"/

/#include <stdio.h>/

/#include <stdlib.h>/

//

/int main(int argc, char ** argv){/

*/    int hostName_len,rank, size;/*

/    MPI_Comm parentcomm;/

/    char hostName[200];/

//

/    MPI_Init( NULL, NULL );/

/    MPI_Comm_get_parent( &parentcomm );/

/*MPI_Get_processor_name(hostName, &hostName_len);*/

/   MPI_Comm_rank(MPI_COMM_WORLD, &rank);/

/    MPI_Comm_size(MPI_COMM_WORLD, &size);/

//

/    if (parentcomm != MPI_COMM_NULL) {/

/      printf("I'm the spawned h: %s  r/s: %i/%i\n", hostName, rank, size);/

/    }/

//

/    MPI_Finalize();/

/    return 0;/

/}/

//

*Spawner:*

#include "mpi.h"

#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

int main(int argc, char ** argv){

     int processesToRun;

     MPI_Comm intercomm;

       if(argc < 2 ){

         printf("Processes number needed!\n");

         return 0;

       }

       processesToRun = atoi(argv[1]);

       MPI_Init( NULL, NULL );

       printf("Spawning from parent:...\n");

      MPI_Comm_spawn( "./spawned", MPI_ARGV_NULL, processesToRun, MPI_INFO_NULL, 0, MPI_COMM_SELF, &intercomm, MPI_ERRCODES_IGNORE);

     MPI_Finalize();

     return 0;

}

//

Reply via email to