X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/e51cc7347665f36a2a71edee93767172ba88f6b2..21fe278c8460849931b37ccde22e944edec46f71:/src/smpi/bindings/smpi_pmpi_file.cpp diff --git a/src/smpi/bindings/smpi_pmpi_file.cpp b/src/smpi/bindings/smpi_pmpi_file.cpp index df39eaeaff..41e1a383bd 100644 --- a/src/smpi/bindings/smpi_pmpi_file.cpp +++ b/src/smpi/bindings/smpi_pmpi_file.cpp @@ -8,6 +8,8 @@ #include "smpi_file.hpp" #include "smpi_datatype.hpp" +extern MPI_Errhandler SMPI_default_File_Errhandler; + int PMPI_File_open(MPI_Comm comm, const char *filename, int amode, MPI_Info info, MPI_File *fh){ if (comm == MPI_COMM_NULL) return MPI_ERR_COMM; @@ -97,7 +99,7 @@ int PMPI_File_read(MPI_File fh, void *buf, int count,MPI_Datatype datatype, MPI_ PASS_ZEROCOUNT(count) smpi_bench_end(); int rank_traced = simgrid::s4u::this_actor::get_pid(); - TRACE_smpi_comm_in(rank_traced, __func__, new simgrid::instr::CpuTIData("IO - read", static_cast(count*datatype->size()))); + TRACE_smpi_comm_in(rank_traced, __func__, new simgrid::instr::CpuTIData("IO - read", count * datatype->size())); int ret = simgrid::smpi::File::read(fh, buf, count, datatype, status); TRACE_smpi_comm_out(rank_traced); smpi_bench_begin(); @@ -114,7 +116,8 @@ int PMPI_File_read_shared(MPI_File fh, void *buf, int count,MPI_Datatype datatyp PASS_ZEROCOUNT(count) smpi_bench_end(); int rank_traced = simgrid::s4u::this_actor::get_pid(); - TRACE_smpi_comm_in(rank_traced, __func__, new simgrid::instr::CpuTIData("IO - read_shared", static_cast(count*datatype->size()))); + TRACE_smpi_comm_in(rank_traced, __func__, + new simgrid::instr::CpuTIData("IO - read_shared", count * datatype->size())); int ret = simgrid::smpi::File::read_shared(fh, buf, count, datatype, status); TRACE_smpi_comm_out(rank_traced); smpi_bench_begin(); @@ -132,7 +135,7 @@ int PMPI_File_write(MPI_File fh, const void *buf, int count,MPI_Datatype datatyp PASS_ZEROCOUNT(count) smpi_bench_end(); int rank_traced = simgrid::s4u::this_actor::get_pid(); - TRACE_smpi_comm_in(rank_traced, __func__, new simgrid::instr::CpuTIData("IO - write", static_cast(count*datatype->size()))); + TRACE_smpi_comm_in(rank_traced, __func__, new simgrid::instr::CpuTIData("IO - write", count * datatype->size())); int ret = simgrid::smpi::File::write(fh, const_cast(buf), count, datatype, status); TRACE_smpi_comm_out(rank_traced); smpi_bench_begin(); @@ -150,7 +153,8 @@ int PMPI_File_write_shared(MPI_File fh, const void *buf, int count,MPI_Datatype PASS_ZEROCOUNT(count) smpi_bench_end(); int rank_traced = simgrid::s4u::this_actor::get_pid(); - TRACE_smpi_comm_in(rank_traced, __func__, new simgrid::instr::CpuTIData("IO - write_shared", static_cast(count*datatype->size()))); + TRACE_smpi_comm_in(rank_traced, __func__, + new simgrid::instr::CpuTIData("IO - write_shared", count * datatype->size())); int ret = simgrid::smpi::File::write_shared(fh, buf, count, datatype, status); TRACE_smpi_comm_out(rank_traced); smpi_bench_begin(); @@ -166,7 +170,7 @@ int PMPI_File_read_all(MPI_File fh, void *buf, int count,MPI_Datatype datatype, CHECK_FLAGS(fh) smpi_bench_end(); int rank_traced = simgrid::s4u::this_actor::get_pid(); - TRACE_smpi_comm_in(rank_traced, __func__, new simgrid::instr::CpuTIData("IO - read_all", static_cast(count*datatype->size()))); + TRACE_smpi_comm_in(rank_traced, __func__, new simgrid::instr::CpuTIData("IO - read_all", count * datatype->size())); int ret = fh->op_all(buf, count, datatype, status); TRACE_smpi_comm_out(rank_traced); smpi_bench_begin(); @@ -182,7 +186,8 @@ int PMPI_File_read_ordered(MPI_File fh, void *buf, int count,MPI_Datatype dataty CHECK_FLAGS(fh) smpi_bench_end(); int rank_traced = simgrid::s4u::this_actor::get_pid(); - TRACE_smpi_comm_in(rank_traced, __func__, new simgrid::instr::CpuTIData("IO - read_ordered", static_cast(count*datatype->size()))); + TRACE_smpi_comm_in(rank_traced, __func__, + new simgrid::instr::CpuTIData("IO - read_ordered", count * datatype->size())); int ret = simgrid::smpi::File::read_ordered(fh, buf, count, datatype, status); TRACE_smpi_comm_out(rank_traced); smpi_bench_begin(); @@ -199,7 +204,7 @@ int PMPI_File_write_all(MPI_File fh, const void *buf, int count,MPI_Datatype dat CHECK_RDONLY(fh) smpi_bench_end(); int rank_traced = simgrid::s4u::this_actor::get_pid(); - TRACE_smpi_comm_in(rank_traced, __func__, new simgrid::instr::CpuTIData("IO - write_all", static_cast(count*datatype->size()))); + TRACE_smpi_comm_in(rank_traced, __func__, new simgrid::instr::CpuTIData("IO - write_all", count * datatype->size())); int ret = fh->op_all(const_cast(buf), count, datatype, status); TRACE_smpi_comm_out(rank_traced); smpi_bench_begin(); @@ -216,7 +221,8 @@ int PMPI_File_write_ordered(MPI_File fh, const void *buf, int count,MPI_Datatype CHECK_RDONLY(fh) smpi_bench_end(); int rank_traced = simgrid::s4u::this_actor::get_pid(); - TRACE_smpi_comm_in(rank_traced, __func__, new simgrid::instr::CpuTIData("IO - write_ordered", static_cast(count*datatype->size()))); + TRACE_smpi_comm_in(rank_traced, __func__, + new simgrid::instr::CpuTIData("IO - write_ordered", count * datatype->size())); int ret = simgrid::smpi::File::write_ordered(fh, buf, count, datatype, status); TRACE_smpi_comm_out(rank_traced); smpi_bench_begin(); @@ -234,7 +240,7 @@ int PMPI_File_read_at(MPI_File fh, MPI_Offset offset, void *buf, int count,MPI_D PASS_ZEROCOUNT(count); smpi_bench_end(); int rank_traced = simgrid::s4u::this_actor::get_pid(); - TRACE_smpi_comm_in(rank_traced, __func__, new simgrid::instr::CpuTIData("IO - read", static_cast(count*datatype->size()))); + TRACE_smpi_comm_in(rank_traced, __func__, new simgrid::instr::CpuTIData("IO - read", count * datatype->size())); int ret = fh->seek(offset,MPI_SEEK_SET); if(ret!=MPI_SUCCESS) return ret; @@ -254,7 +260,8 @@ int PMPI_File_read_at_all(MPI_File fh, MPI_Offset offset, void *buf, int count,M CHECK_FLAGS(fh) smpi_bench_end(); int rank_traced = simgrid::s4u::this_actor::get_pid(); - TRACE_smpi_comm_in(rank_traced, __func__, new simgrid::instr::CpuTIData("IO - read_at_all", static_cast(count*datatype->size()))); + TRACE_smpi_comm_in(rank_traced, __func__, + new simgrid::instr::CpuTIData("IO - read_at_all", count * datatype->size())); int ret = fh->seek(offset,MPI_SEEK_SET); if(ret!=MPI_SUCCESS) return ret; @@ -276,7 +283,7 @@ int PMPI_File_write_at(MPI_File fh, MPI_Offset offset, const void *buf, int coun PASS_ZEROCOUNT(count); smpi_bench_end(); int rank_traced = simgrid::s4u::this_actor::get_pid(); - TRACE_smpi_comm_in(rank_traced, __func__, new simgrid::instr::CpuTIData("IO - write", static_cast(count*datatype->size()))); + TRACE_smpi_comm_in(rank_traced, __func__, new simgrid::instr::CpuTIData("IO - write", count * datatype->size())); int ret = fh->seek(offset,MPI_SEEK_SET); if(ret!=MPI_SUCCESS) return ret; @@ -297,7 +304,8 @@ int PMPI_File_write_at_all(MPI_File fh, MPI_Offset offset, const void *buf, int CHECK_RDONLY(fh) smpi_bench_end(); int rank_traced = simgrid::s4u::this_actor::get_pid(); - TRACE_smpi_comm_in(rank_traced, __func__, new simgrid::instr::CpuTIData("IO - write_at_all", static_cast(count*datatype->size()))); + TRACE_smpi_comm_in(rank_traced, __func__, + new simgrid::instr::CpuTIData("IO - write_at_all", count * datatype->size())); int ret = fh->seek(offset,MPI_SEEK_SET); if(ret!=MPI_SUCCESS) return ret; @@ -357,3 +365,38 @@ int PMPI_File_sync(MPI_File fh) fh->sync(); return MPI_SUCCESS; } + +int PMPI_File_create_errhandler(MPI_File_errhandler_function* function, MPI_Errhandler* errhandler){ + *errhandler=new simgrid::smpi::Errhandler(function); + return MPI_SUCCESS; +} + +int PMPI_File_get_errhandler(MPI_File file, MPI_Errhandler* errhandler){ + if (errhandler==nullptr){ + return MPI_ERR_ARG; + } else if (file == MPI_FILE_NULL) { + *errhandler = SMPI_default_File_Errhandler; + return MPI_SUCCESS; + } + *errhandler=file->errhandler(); + return MPI_SUCCESS; +} + +int PMPI_File_set_errhandler(MPI_File file, MPI_Errhandler errhandler){ + if (errhandler==nullptr){ + return MPI_ERR_ARG; + } else if (file == MPI_FILE_NULL) { + SMPI_default_File_Errhandler = errhandler; + return MPI_SUCCESS; + } + file->set_errhandler(errhandler); + return MPI_SUCCESS; +} + +int PMPI_File_call_errhandler(MPI_File file,int errorcode){ + if (file == nullptr) { + return MPI_ERR_WIN; + } + file->errhandler()->call(file, errorcode); + return MPI_SUCCESS; +}