[MPICH] Re: Problems with allreduce

Luiz Mendes luizmendesw at gmail.com
Tue Jan 23 18:36:47 CST 2007


Hi all, Rajeev

Well it is still early in Argonne now, here is 10pm lol

I was testing some reads, and i see that Collective read_all perform slower
times to complete than read only operation. Is this correct? or it would be
notable only in great files?

Below, it follows the code:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <mpi.h>
#include <string.h>
#define FILESIZE 1048576
#define INTS_PER_BLK 16
int main(int argc, char **argv)
{
    int *buf, rank, nprocs, nints, bufsize;
    double tempo_total, tempo1, tempo2, tempo;
    MPI_File fh;
    MPI_Datatype filetype;
    MPI_Init(&argc,&argv);
    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
    MPI_Comm_size(MPI_COMM_WORLD, &nprocs);
    bufsize = FILESIZE/nprocs;
    buf = (int *) malloc(bufsize);
    nints = bufsize/sizeof(int);
    MPI_File_open(MPI_COMM_WORLD, "datafile", MPI_MODE_RDONLY,
    MPI_INFO_NULL, &fh);
    MPI_Type_vector(nints/INTS_PER_BLK, INTS_PER_BLK,INTS_PER_BLK*nprocs,
MPI_INT, &filetype);
    MPI_Type_commit(&filetype);
    MPI_File_set_view(fh, INTS_PER_BLK*sizeof(int)*rank, MPI_INT,
    filetype, "native", MPI_INFO_NULL);
    tempo1=MPI_Wtime();
    MPI_File_read_all(fh, buf, nints, MPI_INT, MPI_STATUS_IGNORE);
    tempo2=MPI_Wtime();
    tempo=tempo2-tempo1;
     printf("\nPrinting Time of current process--> foi %.10f",tempo);
    MPI_Allreduce(&tempo, &tempo_total, 1, MPI_DOUBLE,
MPI_MAX,MPI_COMM_WORLD);
    if(rank==0)
    {
        printf("\nThe longest time is %.10f\n",tempo_total);
    }
    MPI_File_close(&fh);
    MPI_Type_free(&filetype);
    free(buf);
    MPI_Finalize();
    return 0;
}


Thanks.
Luiz.






2007/1/23, Rajeev Thakur <thakur at mcs.anl.gov>:
>
>  Unless dimensao is 1, the Allreduce won't work because the input and
> output buffers are single element doubles (not arrays).
>
> Rajeev
>
>  ------------------------------
> *From:* Luiz Mendes [mailto:luizmendesw at gmail.com]
> *Sent:* Tuesday, January 23, 2007 6:10 PM
> *To:* mpich-discuss
> *Cc:* Rajeev Thakur
> *Subject:* Re: [MPICH] Re: Problems with allreduce
>
> Hi all, Rajeev
>
> I correct this, and i made some simplifications, and the problems appears
> to be caused by the fact of i add double variable declarations.
>
> It is very strange. Some light to this?
>
> Thanks
> Luiz
>
> 2007/1/23, Rajeev Thakur <thakur at mcs.anl.gov>:
> >
> >  Where have you allocated space for arquivo_nome?
> >
> > Rajeev
> >
> >  ------------------------------
> > *From:* owner-mpich-discuss at mcs.anl.gov [mailto:
> > owner-mpich-discuss at mcs.anl.gov] *On Behalf Of *Luiz Mendes
> > *Sent:* Tuesday, January 23, 2007 5:05 PM
> > *To:* mpich-discuss
> > *Subject:* [MPICH] Re: Problems with allreduce
> >
> >  Discard variable "tempo", without this continue getting error.
> >
> > thanks
> >
> > 2007/1/23, Luiz Mendes <luizmendesw at gmail.com>:
> > >
> > > Hi all, i am with a problem in operation MPI_Allreduce.
> > >
> > > The code is the following below:
> > >
> > > int main(int argc, char *argv[])
> > > {
> > >     int opcao, dimensao,nome_tamanho, processo, num_procs;
> > >     int coluna, contador_bytes, contador_bytes_parcial, interacao,
> > > contador_total_bytes;
> > >     char  *palavra = NULL, *arquivo_nome;
> > >         char *arquivo_pv;
> > >     char procname[MPI_MAX_PROCESSOR_NAME];
> > >     double inicio, termino, tempo_parcial, soma_tempo_total, valor;
> > >     long long offset;
> > >     MPI_Datatype linhaMatriz;
> > >     MPI_File arquivo;
> > >     MPI_Status status;
> > >
> > >     MPI_Init(&argc, &argv);
> > >     MPI_Comm_rank(MPI_COMM_WORLD, &processo);
> > >     MPI_Comm_size(MPI_COMM_WORLD, &num_procs);
> > >     MPI_Get_processor_name(procname,&nome_tamanho);
> > >
> > >     while ((opcao = getopt(argc, argv, "A:D:P:h")) != EOF)
> > >     {
> > >         switch(opcao)
> > >         {
> > >             case 'A':
> > >                 arquivo_pv =optarg;
> > >                 sprintf(arquivo_nome,"%s",arquivo_pv);
> > >                 break;
> > >             case 'D':
> > >                 sscanf (optarg, "%d", &dimensao);
> > >                 break;
> > >             case 'P':
> > >
> > >  sprintf(arquivo_nome,"pvfs2:/mnt/pvfs2/%s",arquivo_pv);
> > >         }
> > >     }
> > >
> > >
> > >     MPI_Type_contiguous(dimensao,MPI_DOUBLE,&linhaMatriz);
> > >     MPI_Type_commit(&linhaMatriz);
> > >
> > >     MPI_File_open(MPI_COMM_WORLD, arquivo_nome, MPI_MODE_CREATE |
> > > MPI_MODE_WRONLY, MPI_INFO_NULL, &arquivo);
> > >
> > >     for(interacao=0; interacao<(dimensao/num_procs);interacao++)
> > >     {
> > >         double matrizlocal[dimensao];
> > >
> > >  valor=processo*(dimensao/num_procs)*dimensao+interacao*dimensao;
> > >         offset=valor*sizeof(double);
> > >         for(coluna=0; coluna<dimensao; coluna++)
> > >         {
> > >             matrizlocal[coluna]=valor+coluna;
> > >         }
> > >
> > >         MPI_File_set_view(arquivo, offset, MPI_DOUBLE, linhaMatriz,
> > > "native", MPI_INFO_NULL);
> > >         inicio=MPI_Wtime();
> > >         MPI_File_write(arquivo, matrizlocal, 1, linhaMatriz, &status);
> > >
> > >         termino=MPI_Wtime();
> > >         tempo_parcial=termino-inicio;
> > >         contador_bytes_parcial+=sizeof(matrizlocal);
> > >         soma_tempo_total+=tempo_parcial;
> > >     }
> > >     MPI_File_close(&arquivo);
> > >     MPI_Allreduce(&soma_tempo_total, &tempo, dimensao, MPI_DOUBLE,
> > > MPI_MAX,MPI_COMM_WORLD);
> > >     MPI_Finalize();
> > > .......
> > >
> > >
> > > Do you know what could be happening?
> > >
> > > Thanks
> > >
> > > Luiz Mendes
> > >
> >
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/mpich-discuss/attachments/20070123/a5e3f8db/attachment.htm>


More information about the mpich-discuss mailing list