X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/e1b4987a80f98fb1266086561cefef20c1993a6b..503aa37006d22d261b792dd00d526976fafa7052:/src/smpi/mpi/smpi_file.cpp diff --git a/src/smpi/mpi/smpi_file.cpp b/src/smpi/mpi/smpi_file.cpp index 124fc876bf..872d9a7e3c 100644 --- a/src/smpi/mpi/smpi_file.cpp +++ b/src/smpi/mpi/smpi_file.cpp @@ -35,7 +35,7 @@ namespace smpi{ size_t found=fullname.find('/'); //in case no fullpath is provided ... just pick the first mountpoint. - if(found==std::string::npos){ + if(found==std::string::npos || fullname.rfind("./", 1) != std::string::npos){ auto disk = simgrid::s4u::Host::current()->get_disks().front(); std::string mount; if (disk->get_host() != simgrid::s4u::Host::current()) @@ -43,8 +43,12 @@ namespace smpi{ else mount = disk->extension()->get_mount_point(); XBT_DEBUG("No absolute path given for file opening, use '%s'", mount.c_str()); - mount.append("/"); - fullname.insert(0, mount); + if(fullname.rfind("./",1) != std::string::npos) + fullname.replace(fullname.begin(), fullname.begin() + 1, mount); + else{ + mount.append("/"); + fullname.insert(0, mount); + } } file_= new simgrid::s4u::File(fullname, nullptr); @@ -99,12 +103,14 @@ namespace smpi{ return MPI_SUCCESS; } - int File::get_position(MPI_Offset* offset){ + int File::get_position(MPI_Offset* offset) const + { *offset=file_->tell(); return MPI_SUCCESS; } - int File::get_position_shared(MPI_Offset* offset){ + int File::get_position_shared(MPI_Offset* offset) const + { shared_mutex_->lock(); *offset=*shared_file_pointer_; shared_mutex_->unlock(); @@ -139,7 +145,7 @@ namespace smpi{ return MPI_SUCCESS; } - int File::read(MPI_File fh, void* /*buf*/, int count, MPI_Datatype datatype, MPI_Status* status) + int File::read(MPI_File fh, void* /*buf*/, int count, const Datatype* datatype, MPI_Status* status) { //get position first as we may be doing non contiguous reads and it will probably be updated badly MPI_Offset position = fh->file_->tell(); @@ -167,7 +173,8 @@ namespace smpi{ /* address="Berlin, Heidelberg",*/ /* pages="84--93"*/ /* }*/ - int File::read_shared(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPI_Status *status){ + int File::read_shared(MPI_File fh, void* buf, int count, const Datatype* datatype, MPI_Status* status) + { fh->shared_mutex_->lock(); fh->seek(*(fh->shared_file_pointer_),MPI_SEEK_SET); read(fh, buf, count, datatype, status); @@ -176,7 +183,8 @@ namespace smpi{ return MPI_SUCCESS; } - int File::read_ordered(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPI_Status *status){ + int File::read_ordered(MPI_File fh, void* buf, int count, const Datatype* datatype, MPI_Status* status) + { //0 needs to get the shared pointer value MPI_Offset val; if(fh->comm_->rank()==0){ @@ -199,7 +207,7 @@ namespace smpi{ return ret; } - int File::write(MPI_File fh, void* /*buf*/, int count, MPI_Datatype datatype, MPI_Status* status) + int File::write(MPI_File fh, void* /*buf*/, int count, const Datatype* datatype, MPI_Status* status) { //get position first as we may be doing non contiguous reads and it will probably be updated badly MPI_Offset position = fh->file_->tell(); @@ -217,7 +225,8 @@ namespace smpi{ return MPI_SUCCESS; } - int File::write_shared(MPI_File fh, const void *buf, int count, MPI_Datatype datatype, MPI_Status *status){ + int File::write_shared(MPI_File fh, const void* buf, int count, const Datatype* datatype, MPI_Status* status) + { fh->shared_mutex_->lock(); XBT_DEBUG("Write shared on %s - Shared ptr before : %lld",fh->file_->get_path(), *(fh->shared_file_pointer_)); fh->seek(*(fh->shared_file_pointer_),MPI_SEEK_SET); @@ -228,7 +237,8 @@ namespace smpi{ return MPI_SUCCESS; } - int File::write_ordered(MPI_File fh, const void *buf, int count, MPI_Datatype datatype, MPI_Status *status){ + int File::write_ordered(MPI_File fh, const void* buf, int count, const Datatype* datatype, MPI_Status* status) + { //0 needs to get the shared pointer value MPI_Offset val; if(fh->comm_->rank()==0){ @@ -259,7 +269,7 @@ namespace smpi{ return MPI_SUCCESS; } - int File::get_view(MPI_Offset* /*disp*/, MPI_Datatype* etype, MPI_Datatype* filetype, char* datarep) + int File::get_view(MPI_Offset* /*disp*/, MPI_Datatype* etype, MPI_Datatype* filetype, char* datarep) const { *etype=etype_; *filetype=filetype_; @@ -267,11 +277,13 @@ namespace smpi{ return MPI_SUCCESS; } - int File::size(){ + int File::size() const + { return file_->size(); } - int File::flags(){ + int File::flags() const + { return flags_; } @@ -297,7 +309,8 @@ namespace smpi{ info_->ref(); } - MPI_Comm File::comm(){ + MPI_Comm File::comm() const + { return comm_; }