Hello Joseph,

Yes, it was just that. However, for some reason it was working on Linux…
Thank you very much for your help.
Regards,

Martín

From: Joseph Schuchart via users<mailto:users@lists.open-mpi.org>
Sent: martes, 9 de febrero de 2021 17:45
To: users@lists.open-mpi.org<mailto:users@lists.open-mpi.org>
Cc: Joseph Schuchart<mailto:schuch...@hlrs.de>
Subject: Re: [OMPI users] Issue with MPI_Get_processor_name() in Cygwin

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