Open MPI logo

Open MPI User's Mailing List Archives

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

Subject: Re: [OMPI users] Can't read values with MPI-IO
From: Luís Miranda (luistm_at_[hidden])
Date: 2010-01-13 21:41:57


I don't know how i dind't see that. :)
I guess i'm still a noob in MPI.

Thanks for the help

On Wed, Jan 13, 2010 at 8:07 PM, David O. Gunter <dog_at_[hidden]> wrote:

> I noticed you never checked the return code from your MPI_File_read
> statement. If you had used your own mpi() function, it would state
> something like this:
>
> MPI_FILE_READ(116): Cannot read from a file opened with amode
> MPI_MODE_WRONLY
>
> -david
>
>
> | Hi, i have this program, that write the rank of a process on a file.
> | Every
> | processes write the rank on the same file. Whe i try to read that value,
> | is
> | always zero.
> |
> |
> | #include <stdio.h> /*IO stuff lives here*/
> | #include <stdlib.h> /*exit lives here*/
> | #include <mpi.h> /*MPI and MPI-IO live here*/
> |
> |
> | //GLobal variables
> | int rank;
> |
> | void mpi(int error_code){
> |
> | if (error_code != MPI_SUCCESS) {
> |
> | char error_string[BUFSIZ];
> | int length_of_error_string, error_class;
> |
> | MPI_Error_class(error_code, &error_class);
> | MPI_Error_string(error_class, error_string, &length_of_error_string);
> | fprintf(stderr, "%3d: %s\n", rank, error_string);
> | MPI_Error_string(error_code, error_string, &length_of_error_string);
> | fprintf(stderr, "%3d: %s\n", rank, error_string);
> | // send_error = TRUE;
> | }
> | }
> |
> | int main(int argc, char *argv[]){
> |
> | int size;
> |
> | MPI_File fh;
> |
> | MPI_Init(&argc, &argv);
> |
> | MPI_Comm_rank(MPI_COMM_WORLD, &rank);
> | MPI_Comm_size(MPI_COMM_WORLD, &size);
> |
> | MPI_Errhandler_set(MPI_COMM_WORLD, MPI_ERRORS_RETURN);
> |
> | /*
> | MPI_MODE_RDONLY --- read only,
> | MPI_MODE_RDWR --- reading and writing,
> | MPI_MODE_WRONLY --- write only,
> | MPI_MODE_CREATE --- create the file if it does not exist,
> | MPI_MODE_EXCL --- error if creating file that already exists,
> | MPI_MODE_DELETE_ON_CLOSE --- delete file on close,
> | MPI_MODE_UNIQUE_OPEN --- file will not be concurrently opened
> elsewhere,
> | MPI_MODE_SEQUENTIAL --- file will only be accessed sequentially,
> | MPI_MODE_APPEND --- set initial position of all file pointers to end of
> | file.
> | */
> |
> | MPI_Barrier(MPI_COMM_WORLD);
> |
> | //OPEN FILE
> | // abertura do ficheiro
> | //printf("[%d] - A abrir ficheiro\n", rank);
> | mpi(MPI_File_open(MPI_COMM_WORLD, "buffer.io", MPI_MODE_CREATE |
> | MPI_MODE_WRONLY, MPI_INFO_NULL, &fh));
> | MPI_Barrier(MPI_COMM_WORLD);
> |
> |
> | //calcular quantidade de bytes a escrever no ficheiro
> | //MPI_Offset totalNumberOfIntegers
> |
> | //DEFINE OFFSET
> | //definir o offset
> | MPI_Offset myOffset = (MPI_Offset)(rank * sizeof(int));
> | mpi(MPI_File_seek(fh, myOffset, MPI_SEEK_SET));
> | MPI_Barrier(MPI_COMM_WORLD);
> |
> | //CHECK OFFSET
> | // verificar a posição no ficheiro
> | MPI_Offset myCurrentOffset;
> |
> | MPI_File_get_position(fh, &myCurrentOffset);
> | printf ("[%d] - My current offset is %lld\n", rank, myCurrentOffset);
> | MPI_Barrier(MPI_COMM_WORLD);
> |
> | //WRITE RANK IN THE FILE
> | // escrita do ficheiro
> | MPI_Status mpiStatus;
> | int write=9;
> |
> | mpi(MPI_File_write(fh, &write, sizeof(int), MPI_BYTE, &mpiStatus));
> | printf("[%d] - Escreveu no ficheiro o valor '%d'\n", rank, rank );
> | MPI_Barrier(MPI_COMM_WORLD);
> |
> | //CALCULATE FILE SIZE
> | //calcular quantidade de bytes a ler do ficheiro
> | int numberOfBytes;
> | MPI_Offset totalNumberOfBytes, numberOfBytesToRead;
> |
> | MPI_File_get_size(fh, &totalNumberOfBytes);
> | numberOfBytesToRead = totalNumberOfBytes / size;
> | numberOfBytes = (int) numberOfBytesToRead;
> | printf("[%d] - A preparar para ler %d bytes\n", rank, numberOfBytes);
> | MPI_Barrier(MPI_COMM_WORLD);
> |
> | //RESET OFFSET
> | //restaurar valor inicial do offset
> | myOffset = (MPI_Offset)(rank * sizeof(int));
> | mpi(MPI_File_seek(fh, myOffset, MPI_SEEK_SET));
> | MPI_Barrier(MPI_COMM_WORLD);
> |
> | //CHECK OFFSET
> | // verificar a posição no ficheiro
> | MPI_File_get_position(fh, &myCurrentOffset);
> | printf ("[%d] - My current offset is %lld\n", rank, myCurrentOffset);
> | MPI_Barrier(MPI_COMM_WORLD);
> |
> | //READ FILE
> | //leitura do ficheiro
> | int readBuffer=0;
> | // MPI_Status mpiStatus;
> | MPI_File_read(fh, &readBuffer, sizeof(int) , MPI_INT,
> | MPI_STATUS_IGNORE);
> | MPI_Barrier(MPI_COMM_WORLD);
> | printf("[%d] - Leu do ficheiro o valor '%d'\n", rank, readBuffer );
> | MPI_Barrier(MPI_COMM_WORLD);
> |
> | //CLOSE FILE
> | // fecho do ficheiro
> | MPI_File_close(&fh);
> | MPI_File_delete("buffer.io", MPI_INFO_NULL );
> |
> | //end program
> | MPI_Finalize();
> |
> | return(0);
> |
> | }
> |
> | --
> | Cumprimentos
> |
> | Luís Miranda
> | _______________________________________________
> | users mailing list
> | users_at_[hidden]
> | http://www.open-mpi.org/mailman/listinfo.cgi/users
>
> _______________________________________________
> users mailing list
> users_at_[hidden]
> http://www.open-mpi.org/mailman/listinfo.cgi/users
>

-- 
Cumprimentos
Luís Miranda