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
|