Open MPI logo

Open MPI User's Mailing List Archives

  |   Home   |   Support   |   FAQ   |   all Open MPI User's mailing list

Subject: [OMPI users] g95 + open-mpi
From: nicolas cordier (nicolas.cordier_at_[hidden])
Date: 2011-04-06 07:52:21


hi,

 i need use open-mpi with g95 on debian linux lenny 5.0 - x86_64
 i compile it with FC=g95 F77=g95 and test on my example.c file
 but with g95 mpirun dont use process1 just process 0.
 perhaps my compile option are wrong ?

 i want that mpirun use process 0 and 1 both.

 hostname paola12

 mpicc example.c
 mpirun -np 2 a.out
 C Process 0 on paola12
 0 [1 3 ]
 0 [1.000000 3.000000 ]
 C Process 0 on paola12
 0 [1 3 ]
 0 [1.000000 3.000000 ]

 with gfortran ( 4.3.2 ) + openmpi
 mpirun -np 2 a.out
 C Process 0 on paola12 C Process 1 on paola12 0 [2 9 ] 1 [2 9 ] 0 [3.000000 6.000000 ] 1 [3.000000 6.000000

example.c

 #include <stdlib.h>
 #include <stdio.h>
 #include <math.h>
 #include <mpi.h>

 int main(int argc, char** argv) {
 MPI_Init(&argc, &argv);
 int rank;
 int namelen;
 char processor_name[MPI_MAX_PROCESSOR_NAME];
 MPI_Comm_rank(MPI_COMM_WORLD, &rank);
 MPI_Get_processor_name(processor_name, &namelen);
 printf("C Process %d on %s \n", rank, processor_name);
 MPI_Barrier(MPI_COMM_WORLD);

 int size = 2;
 int *array, *reducedValues;
 array = (int *) malloc((size) * sizeof (int));
 reducedValues = (int *) malloc((size) * sizeof (int));
 array[0] = rank+1;
 array[1] = 3;
 MPI_Allreduce(array, reducedValues, size, MPI_INTEGER, MPI_PROD, MPI_COMM_WORLD);
 int i;
 printf("%d [", rank);
 for (i = 0; i < size; i++) {
 printf("%d ", reducedValues[i]);
 }
 printf("]\n");
 free(reducedValues);
 free(array);

 /* Verif triviale pour un seul entier (OK)
 size=1;
 int *array1, *reducedValues1;
 array1 = (int *) malloc((size) * sizeof (int));
 reducedValues1 = (int *) malloc((size) * sizeof (int));
 array[0] = rank+1;
 MPI_Allreduce(array1, reducedValues1, size, MPI_INTEGER, MPI_PROD, MPI_COMM_WORLD);
 printf(" C scalaire %d \n", reducedValues1[0]);
 free(reducedValues1);
 free(array1);
 */

 /* Verif pour les doubles */
 size=2;
 double *Darray, *DreducedValues;
 Darray = (double *) malloc((size) * sizeof (double));
 DreducedValues = (double *) malloc((size) * sizeof (double));
 Darray[0] = (rank+1)*1.0;
 Darray[1] = 3.0;
 MPI_Allreduce(Darray, DreducedValues, size, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD);
 printf("%d [", rank);
 for (i = 0; i < size; i++) {
 printf("%f ", DreducedValues[i]);
 }
 printf("]\n");
 free(DreducedValues);
 free(Darray);
 MPI_Finalize();
 }

 greetings.

 nicolas cordier