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 <d...@lanl.gov> 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 > | us...@open-mpi.org > | http://www.open-mpi.org/mailman/listinfo.cgi/users > > _______________________________________________ > users mailing list > us...@open-mpi.org > http://www.open-mpi.org/mailman/listinfo.cgi/users > -- Cumprimentos Luís Miranda