Hi folks,

openMPI 1.4.1 seems to have another problem with my machine, or something on 
it. 

This little program here (compiled with mpif90) startet with mpiexec -np 4 
a.out produces the following output:
Suriprisingly the same thing written in C-Code (compiled with mpiCC) works 
without a problem.
May it be a interference with other MPI-distributions although I think I have 
deleted all?

Note: The error occurs also with my climate model. The error is nearly the 
same, only with MPI_ERR_TYPE: invalid root.
I've compiled openMPI not as root root, but in my home-directory.

Thanks for your advice, 
Klaus

My machine:
> OpenMPI-version 1.4.1 compiled with Lahey Fortran 95 (lf95).
> OpenMPI was compiled "out of the box" only changing to the Lahey compiler 
> with a setenv $FC lf95
>
> The System: Linux marvin 2.6.27.6-1 #1 SMP Sat Nov 15 20:19:04 CET 2008 
> x86_64 GNU/Linux
>
> Compiler: Lahey/Fujitsu Linux64 Fortran Compiler Release L8.10a

***************************************
Output:
[marvin:21997] *** An error occurred in MPI_Bcast
[marvin:21997] *** on communicator MPI_COMM_WORLD
[marvin:21997] *** MPI_ERR_TYPE: invalid datatype
[marvin:21997] *** MPI_ERRORS_ARE_FATAL (your MPI job will now abort)
Process 1 : k= 10 before
--------------------------------------------------------------------------
mpiexec has exited due to process rank 1 with PID 21997 on
node marvin exiting without calling "finalize". This may
have caused other processes in the application to be
terminated by signals sent by mpiexec (as reported here).
--------------------------------------------------------------------------
[marvin:21993] 3 more processes have sent help message help-mpi-errors.txt / 
mpi_errors_are_fatal
[marvin:21993] Set MCA parameter "orte_base_help_aggregate" to 0 to see all 
help / error messages
Process 3 : k= 10 before
************************************************************
Program Fortran90:
  include 'mpif.h'

  integer k, rank, size, ierror, tag, p


  call MPI_INIT(ierror)
  call MPI_COMM_SIZE(MPI_COMM_WORLD, size, ierror)
  call MPI_COMM_RANK(MPI_COMM_WORLD, rank, ierror)
  if (rank == 0) then 
     k = 20
  else 
     k = 10
  end if
  do p= 0,size,1

     if (rank == p) then
        print*, 'Process', p,': k=', k,  'before'

     end if

  enddo 
  call MPI_Bcast(k, 1, MPI_INT,0,MPI_COMM_WORLD)
  do p =0,size,1
     if (rank == p) then
        print*, 'Process', p, ': k=', k, 'after'
  end if   
  enddo
  call MPI_Finalize(ierror)

  end  
********************************************************
Program C-Code:

#include <mpi.h>
#include <stdio.h>
int main (int argc, char *argv[])
        {
        int k,id,p,size;
        MPI_Init(&argc,&argv);
        MPI_Comm_rank(MPI_COMM_WORLD, &id);
        MPI_Comm_size(MPI_COMM_WORLD, &size);
        if(id == 0)
                k = 20;
        else
                k = 10;
        for(p=0; p<size; p++){
                if(id == p)
                        printf("Process %d: k= %d before\n",id,k);
        }
        //note MPI_Bcast must be put where all other processes
        //can see it.
        MPI_Bcast(&k,1,MPI_INT,0,MPI_COMM_WORLD);
        for(p=0; p<size; p++){
                if(id == p)
                        printf("Process %d: k= %d after\n",id,k);
        }
        MPI_Finalize();
        return 0 ;
        }
***************************************************************

Reply via email to