Open MPI logo

Open MPI User's Mailing List Archives

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

Subject: Re: [OMPI users] g95 + open-mpi
From: nicolas.cordier_at_[hidden]
Date: 2011-04-19 08:49:26


all work now with this configure options to compile openmpi with g95 under x86_64:
CC=gcc
FC='/usr/local/bin/g95'
F77='/usr/local/bin/g95'
FFLAGS='-O3 -fPIC'
CXX=g++
./configure --enable-static --with-devel-headers

you can close this call.
:-)
nicolas.

> ----- Message d'origine -----
> De : nicolas cordier
> Envoyés : 06.04.11 13:52
> À : users_at_[hidden]
> Objet : [OMPI users] g95 + open-mpi
>
> 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
>