diff --git a/CMakeLists.txt b/CMakeLists.txt index 944ba06..af4a5db 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -120,14 +120,16 @@ endif() option(BUILD_SHARED_LIBS "Build with shared libraries." ON) option(RECORDER_ENABLE_PARQUET "Build Parquet format converter." OFF) option(RECORDER_ENABLE_POSIX_TRACE "Enable tracing of POSIX calls." ON) -option(RECORDER_ENABLE_MPIO_TRACE "Enable tracing of MPI-IO calls." ON) +option(RECORDER_ENABLE_MPI_TRACE "Enable tracing of MPI communication calls." ON) +option(RECORDER_ENABLE_MPIIO_TRACE "Enable tracing of MPI-IO calls." ON) option(RECORDER_ENABLE_HDF5_TRACE "Enable tracing of HDF5 calls." ON) option(RECORDER_ENABLE_CUDA_TRACE "Enable tracing of CUDA kernels." OFF) option(RECORDER_ENABLE_FCNTL_TRACE "Enable tracing of fcntl()." ON) option(RECORDER_INSTALL_TESTS "Enable installation of tests." OFF) #mark_as_advanced(RECORDER_ENABLE_POSIX_TRACE) -#mark_as_advanced(RECORDER_ENABLE_MPIO_TRACE) +#mark_as_advanced(RECORDER_ENABLE_MPI_TRACE) +#mark_as_advanced(RECORDER_ENABLE_MPIIO_TRACE) #mark_as_advanced(RECORDER_ENABLE_HDF5_TRACE) #mark_as_advanced(RECORDER_ENABLE_FCNTL_TRACE) diff --git a/README.md b/README.md index 6d1adff..018f4e7 100644 --- a/README.md +++ b/README.md @@ -54,9 +54,10 @@ cmake .. \ (2) Enable/disable tracing levels -By default, Recorde traces function calls from all levels: HDF5, MPI and POSIX. The following options can be used to enable/disable specific levels. +By default, Recorde traces function calls from all levels: HDF5, MPI, MPI-IO and POSIX. The following options can be used to enable/disable specific levels. * -DRECORDER_ENABLE_POSIX_TRACE=[ON|FF] - * -DRECORDER_ENABLE_MPIO_TRACE=[ON|FF] + * -DRECORDER_ENABLE_MPI_TRACE=[ON|FF] + * -DRECORDER_ENABLE_MPIIO_TRACE=[ON|FF] * -DRECORDER_ENABLE_HDF5_TRACE=[ON|FF] (3) Intercepting `fcntl()` call: diff --git a/include/recorder.h b/include/recorder.h index 0bd74b0..422c347 100644 --- a/include/recorder.h +++ b/include/recorder.h @@ -122,16 +122,22 @@ void write_record(Record* record); * Decide wether to intercept (override) funciton calls */ #ifdef RECORDER_PRELOAD - #ifdef RECORDER_ENABLE_MPIO_TRACE + #ifdef RECORDER_ENABLE_POSIX_TRACE + #define RECORDER_POSIX_DECL(func) func + #else + #define RECORDER_POSIX_DECL(func) __warp_##func + #endif + + #ifdef RECORDER_ENABLE_MPI_TRACE #define RECORDER_MPI_DECL(func) func #else #define RECORDER_MPI_DECL(func) __warp_##func #endif - #ifdef RECORDER_ENABLE_POSIX_TRACE - #define RECORDER_POSIX_DECL(func) func + #ifdef RECORDER_ENABLE_MPIIO_TRACE + #define RECORDER_MPIIO_DECL(func) func #else - #define RECORDER_POSIX_DECL(func) __warp_##func + #define RECORDER_MPIIO_DECL(func) __warp_##func #endif #ifdef RECORDER_ENABLE_HDF5_TRACE @@ -140,8 +146,9 @@ void write_record(Record* record); #define RECORDER_HDF5_DECL(func) __warp_##func #endif #else - #define RECORDER_MPI_DECL(func) func #define RECORDER_POSIX_DECL(func) func + #define RECORDER_MPI_DECL(func) func + #define RECORDER_MPIIO_DECL(func) func #define RECORDER_HDF5_DECL(func) func #endif diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index e00e719..719519b 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -108,7 +108,8 @@ target_compile_definitions(recorder PUBLIC _LARGEFILE64_SOURCE PUBLIC RECORDER_PRELOAD PRIVATE $<$:RECORDER_ENABLE_POSIX_TRACE> - PRIVATE $<$:RECORDER_ENABLE_MPIO_TRACE> + PRIVATE $<$:RECORDER_ENABLE_MPI_TRACE> + PRIVATE $<$:RECORDER_ENABLE_MPIIO_TRACE> PRIVATE $<$:RECORDER_ENABLE_HDF5_TRACE> PRIVATE $<$:RECORDER_ENABLE_FCNTL_TRACE> PRIVATE $<$:RECORDER_ENABLE_CUDA_TRACE> diff --git a/lib/recorder-mpi.c b/lib/recorder-mpi.c index d54eedd..bd00998 100644 --- a/lib/recorder-mpi.c +++ b/lib/recorder-mpi.c @@ -352,14 +352,14 @@ int RECORDER_MPI_DECL(MPI_Type_commit)(MPI_Datatype *datatype) { RECORDER_INTERCEPTOR(1, args); } -int RECORDER_MPI_DECL(MPI_File_open)(MPI_Comm comm, CONST char *filename, int amode, MPI_Info info, MPI_File *fh) { +int RECORDER_MPIIO_DECL(MPI_File_open)(MPI_Comm comm, CONST char *filename, int amode, MPI_Info info, MPI_File *fh) { RECORDER_INTERCEPTOR_NOIO(int, PMPI_File_open, (comm, filename, amode, info, fh)); add_mpi_file(comm, fh); char **args = assemble_args_list(5, comm2name(&comm), realrealpath(filename), itoa(amode), ptoa(&info), file2id(fh)); RECORDER_INTERCEPTOR(5, args); } -int RECORDER_MPI_DECL(MPI_File_close)(MPI_File *fh) { +int RECORDER_MPIIO_DECL(MPI_File_close)(MPI_File *fh) { char* fid = file2id(fh); MPIFileHash *entry = NULL; HASH_FIND(hh, mpi_file_table, fh, sizeof(MPI_File), entry); @@ -375,182 +375,200 @@ int RECORDER_MPI_DECL(MPI_File_close)(MPI_File *fh) { RECORDER_INTERCEPTOR(1, args); } -int RECORDER_MPI_DECL(MPI_File_sync)(MPI_File fh) { +int RECORDER_MPIIO_DECL(MPI_File_sync)(MPI_File fh) { RECORDER_INTERCEPTOR_NOIO(int, PMPI_File_sync, (fh)); char **args = assemble_args_list(1, file2id(&fh)); RECORDER_INTERCEPTOR(1, args); } -int RECORDER_MPI_DECL(MPI_File_set_size)(MPI_File fh, MPI_Offset size) { +int RECORDER_MPIIO_DECL(MPI_File_set_size)(MPI_File fh, MPI_Offset size) { RECORDER_INTERCEPTOR_NOIO(int, PMPI_File_set_size, (fh, size)); char **args = assemble_args_list(2, file2id(&fh), itoa(size)); RECORDER_INTERCEPTOR(2, args); } -int RECORDER_MPI_DECL(MPI_File_set_view)(MPI_File fh, MPI_Offset disp, MPI_Datatype etype, +int RECORDER_MPIIO_DECL(MPI_File_set_view)(MPI_File fh, MPI_Offset disp, MPI_Datatype etype, MPI_Datatype filetype, CONST char *datarep, MPI_Info info) { RECORDER_INTERCEPTOR_NOIO(int, PMPI_File_set_view, (fh, disp, etype, filetype, datarep, info)); char **args = assemble_args_list(6, file2id(&fh), itoa(disp), type2name(etype), type2name(filetype), ptoa(datarep), ptoa(&info)); RECORDER_INTERCEPTOR(6, args); } -int RECORDER_MPI_DECL(MPI_File_read)(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPI_Status *status) { +int RECORDER_MPIIO_DECL(MPI_File_read)(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPI_Status *status) { RECORDER_INTERCEPTOR_NOIO(int, PMPI_File_read, (fh, buf, count, datatype, status)); char **args = assemble_args_list(5, file2id(&fh), ptoa(buf), itoa(count), type2name(datatype), status2str(status)); RECORDER_INTERCEPTOR(5, args); } -int RECORDER_MPI_DECL(MPI_File_read_at)(MPI_File fh, MPI_Offset offset, void *buf, int count, MPI_Datatype datatype, MPI_Status *status) { +int RECORDER_MPIIO_DECL(MPI_File_read_at)(MPI_File fh, MPI_Offset offset, void *buf, int count, MPI_Datatype datatype, MPI_Status *status) { RECORDER_INTERCEPTOR_NOIO(int, PMPI_File_read_at, (fh, offset, buf, count, datatype, status)); char **args = assemble_args_list(6, file2id(&fh), itoa(offset), ptoa(buf), itoa(count), type2name(datatype), status2str(status)); RECORDER_INTERCEPTOR(6, args); } -int RECORDER_MPI_DECL(MPI_File_read_at_all)(MPI_File fh, MPI_Offset offset, void *buf, int count, MPI_Datatype datatype, MPI_Status *status) { +int RECORDER_MPIIO_DECL(MPI_File_read_at_all)(MPI_File fh, MPI_Offset offset, void *buf, int count, MPI_Datatype datatype, MPI_Status *status) { RECORDER_INTERCEPTOR_NOIO(int, PMPI_File_read_at_all, (fh, offset, buf, count, datatype, status)); char **args = assemble_args_list(6, file2id(&fh), itoa(offset), ptoa(buf), itoa(count), type2name(datatype), status2str(status)); RECORDER_INTERCEPTOR(6, args); } -int RECORDER_MPI_DECL(MPI_File_read_all)(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPI_Status *status) { +int RECORDER_MPIIO_DECL(MPI_File_read_all)(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPI_Status *status) { RECORDER_INTERCEPTOR_NOIO(int, PMPI_File_read_all, (fh, buf, count, datatype, status)); char **args = assemble_args_list(5, file2id(&fh), ptoa(buf), itoa(count), type2name(datatype), status2str(status)); RECORDER_INTERCEPTOR(5, args); } -int RECORDER_MPI_DECL(MPI_File_read_shared)(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPI_Status *status) { +int RECORDER_MPIIO_DECL(MPI_File_read_shared)(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPI_Status *status) { RECORDER_INTERCEPTOR_NOIO(int, PMPI_File_read_shared, (fh, buf, count, datatype, status)); char **args = assemble_args_list(5, file2id(&fh), ptoa(buf), itoa(count), type2name(datatype), status2str(status)); RECORDER_INTERCEPTOR(5, args); } -int RECORDER_MPI_DECL(MPI_File_read_ordered)(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPI_Status *status) { +int RECORDER_MPIIO_DECL(MPI_File_read_ordered)(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPI_Status *status) { RECORDER_INTERCEPTOR_NOIO(int, PMPI_File_read_ordered, (fh, buf, count, datatype, status)); char **args = assemble_args_list(5, file2id(&fh), ptoa(buf), itoa(count), type2name(datatype), status2str(status)); RECORDER_INTERCEPTOR(5, args); } -int RECORDER_MPI_DECL(MPI_File_read_at_all_begin)(MPI_File fh, MPI_Offset offset, void *buf, int count, MPI_Datatype datatype) { +int RECORDER_MPIIO_DECL(MPI_File_read_at_all_begin)(MPI_File fh, MPI_Offset offset, void *buf, int count, MPI_Datatype datatype) { RECORDER_INTERCEPTOR_NOIO(int, PMPI_File_read_at_all_begin, (fh, offset, buf, count, datatype)); char **args = assemble_args_list(5, file2id(&fh), itoa(offset), ptoa(buf), itoa(count), type2name(datatype)); RECORDER_INTERCEPTOR(5, args); } -int RECORDER_MPI_DECL(MPI_File_read_all_begin)(MPI_File fh, void *buf, int count, MPI_Datatype datatype) { +int RECORDER_MPIIO_DECL(MPI_File_read_all_begin)(MPI_File fh, void *buf, int count, MPI_Datatype datatype) { RECORDER_INTERCEPTOR_NOIO(int, PMPI_File_read_all_begin, (fh, buf, count, datatype)); char **args = assemble_args_list(4, file2id(&fh), ptoa(buf), itoa(count), type2name(datatype)); RECORDER_INTERCEPTOR(4, args); } -int RECORDER_MPI_DECL(MPI_File_read_ordered_begin)(MPI_File fh, void *buf, int count, MPI_Datatype datatype) { +int RECORDER_MPIIO_DECL(MPI_File_read_ordered_begin)(MPI_File fh, void *buf, int count, MPI_Datatype datatype) { RECORDER_INTERCEPTOR_NOIO(int, PMPI_File_read_ordered_begin, (fh, buf, count, datatype)); char **args = assemble_args_list(4, file2id(&fh), ptoa(buf), itoa(count), type2name(datatype)); RECORDER_INTERCEPTOR(4, args); } -int RECORDER_MPI_DECL(MPI_File_iread_at)(MPI_File fh, MPI_Offset offset, void *buf, int count, +int RECORDER_MPIIO_DECL(MPI_File_iread_at)(MPI_File fh, MPI_Offset offset, void *buf, int count, MPI_Datatype datatype, __D_MPI_REQUEST *request) { RECORDER_INTERCEPTOR_NOIO(int, PMPI_File_iread_at, (fh, offset, buf, count, datatype, request)); char **args = assemble_args_list(6, file2id(&fh), itoa(offset), ptoa(buf), itoa(count), type2name(datatype), ptoa(request)); RECORDER_INTERCEPTOR(6, args); } -int RECORDER_MPI_DECL(MPI_File_iread)(MPI_File fh, void *buf, int count, +int RECORDER_MPIIO_DECL(MPI_File_iread)(MPI_File fh, void *buf, int count, MPI_Datatype datatype, __D_MPI_REQUEST *request) { RECORDER_INTERCEPTOR_NOIO(int, PMPI_File_iread, (fh, buf, count, datatype, request)); char **args = assemble_args_list(5, file2id(&fh), ptoa(buf), itoa(count), type2name(datatype), ptoa(request)); RECORDER_INTERCEPTOR(5, args); } -int RECORDER_MPI_DECL(MPI_File_iread_shared)(MPI_File fh, void *buf, int count, +int RECORDER_MPIIO_DECL(MPI_File_iread_shared)(MPI_File fh, void *buf, int count, MPI_Datatype datatype, __D_MPI_REQUEST *request) { RECORDER_INTERCEPTOR_NOIO(int, PMPI_File_iread_shared, (fh, buf, count, datatype, request)); char **args = assemble_args_list(5, file2id(&fh), ptoa(buf), itoa(count), type2name(datatype), ptoa(request)); RECORDER_INTERCEPTOR(5, args); } -int RECORDER_MPI_DECL(MPI_File_write)(MPI_File fh, CONST void *buf, int count, +int RECORDER_MPIIO_DECL(MPI_File_write)(MPI_File fh, CONST void *buf, int count, MPI_Datatype datatype, MPI_Status *status) { RECORDER_INTERCEPTOR_NOIO(int, PMPI_File_write, (fh, buf, count, datatype, status)); char **args = assemble_args_list(5, file2id(&fh), ptoa(buf), itoa(count), type2name(datatype), status2str(status)); RECORDER_INTERCEPTOR(5, args); } -int RECORDER_MPI_DECL(MPI_File_write_at)(MPI_File fh, MPI_Offset offset, CONST void *buf, +int RECORDER_MPIIO_DECL(MPI_File_write_at)(MPI_File fh, MPI_Offset offset, CONST void *buf, int count, MPI_Datatype datatype, MPI_Status *status) { RECORDER_INTERCEPTOR_NOIO(int, PMPI_File_write_at, (fh, offset, buf, count, datatype, status)); char **args = assemble_args_list(6, file2id(&fh), itoa(offset), ptoa(buf), itoa(count), type2name(datatype), status2str(status)); RECORDER_INTERCEPTOR(6, args); } -int RECORDER_MPI_DECL(MPI_File_write_at_all)(MPI_File fh, MPI_Offset offset, CONST void *buf, +int RECORDER_MPIIO_DECL(MPI_File_write_at_all)(MPI_File fh, MPI_Offset offset, CONST void *buf, int count, MPI_Datatype datatype, MPI_Status *status) { RECORDER_INTERCEPTOR_NOIO(int, PMPI_File_write_at_all, (fh, offset, buf, count, datatype, status)); char **args = assemble_args_list(6, file2id(&fh), itoa(offset), ptoa(buf), itoa(count), type2name(datatype), status2str(status)); RECORDER_INTERCEPTOR(6, args); } -int RECORDER_MPI_DECL(MPI_File_write_all)(MPI_File fh, CONST void *buf, int count, +int RECORDER_MPIIO_DECL(MPI_File_write_all)(MPI_File fh, CONST void *buf, int count, MPI_Datatype datatype, MPI_Status *status) { RECORDER_INTERCEPTOR_NOIO(int, PMPI_File_write_all, (fh, buf, count, datatype, status)); char **args = assemble_args_list(5, file2id(&fh), ptoa(buf), itoa(count), type2name(datatype), status2str(status)); RECORDER_INTERCEPTOR(5, args); } -int RECORDER_MPI_DECL(MPI_File_write_shared)(MPI_File fh, CONST void *buf, int count, +int RECORDER_MPIIO_DECL(MPI_File_write_shared)(MPI_File fh, CONST void *buf, int count, MPI_Datatype datatype, MPI_Status *status) { RECORDER_INTERCEPTOR_NOIO(int, PMPI_File_write_shared, (fh, buf, count, datatype, status)); char **args = assemble_args_list(5, file2id(&fh), ptoa(buf), itoa(count), type2name(datatype), status2str(status)); RECORDER_INTERCEPTOR(5, args); } -int RECORDER_MPI_DECL(MPI_File_write_ordered)(MPI_File fh, CONST void *buf, int count, +int RECORDER_MPIIO_DECL(MPI_File_write_ordered)(MPI_File fh, CONST void *buf, int count, MPI_Datatype datatype, MPI_Status *status) { RECORDER_INTERCEPTOR_NOIO(int, PMPI_File_write_ordered, (fh, buf, count, datatype, status)); char **args = assemble_args_list(5, file2id(&fh), ptoa(buf), itoa(count), type2name(datatype), status2str(status)); RECORDER_INTERCEPTOR(5, args); } -int RECORDER_MPI_DECL(MPI_File_write_at_all_begin)(MPI_File fh, MPI_Offset offset, CONST void *buf, +int RECORDER_MPIIO_DECL(MPI_File_write_at_all_begin)(MPI_File fh, MPI_Offset offset, CONST void *buf, int count, MPI_Datatype datatype) { RECORDER_INTERCEPTOR_NOIO(int, PMPI_File_write_at_all_begin, (fh, offset, buf, count, datatype)); char **args = assemble_args_list(5, file2id(&fh), itoa(offset), ptoa(buf), itoa(count), type2name(datatype)); RECORDER_INTERCEPTOR(5, args); } -int RECORDER_MPI_DECL(MPI_File_write_all_begin)(MPI_File fh, CONST void *buf, int count, MPI_Datatype datatype) { +int RECORDER_MPIIO_DECL(MPI_File_write_all_begin)(MPI_File fh, CONST void *buf, int count, MPI_Datatype datatype) { RECORDER_INTERCEPTOR_NOIO(int, PMPI_File_write_all_begin, (fh, buf, count, datatype)); char **args = assemble_args_list(4, file2id(&fh), ptoa(buf), itoa(count), type2name(datatype)); RECORDER_INTERCEPTOR(4, args); } -int RECORDER_MPI_DECL(MPI_File_write_ordered_begin)(MPI_File fh, CONST void *buf, int count, MPI_Datatype datatype) { +int RECORDER_MPIIO_DECL(MPI_File_write_ordered_begin)(MPI_File fh, CONST void *buf, int count, MPI_Datatype datatype) { RECORDER_INTERCEPTOR_NOIO(int, PMPI_File_write_ordered_begin, (fh, buf, count, datatype)); char **args = assemble_args_list(4, file2id(&fh), ptoa(buf), itoa(count), type2name(datatype)); RECORDER_INTERCEPTOR(4, args); } -int RECORDER_MPI_DECL(MPI_File_iwrite_at)(MPI_File fh, MPI_Offset offset, CONST void *buf, +int RECORDER_MPIIO_DECL(MPI_File_iwrite_at)(MPI_File fh, MPI_Offset offset, CONST void *buf, int count, MPI_Datatype datatype, __D_MPI_REQUEST *request) { RECORDER_INTERCEPTOR_NOIO(int, PMPI_File_iwrite_at, (fh, offset, buf, count, datatype, request)); char **args = assemble_args_list(6, file2id(&fh), itoa(offset), ptoa(buf), itoa(count), type2name(datatype), ptoa(request)); RECORDER_INTERCEPTOR(6, args); } -int RECORDER_MPI_DECL(MPI_File_iwrite)(MPI_File fh, CONST void *buf, int count, +int RECORDER_MPIIO_DECL(MPI_File_iwrite)(MPI_File fh, CONST void *buf, int count, MPI_Datatype datatype, __D_MPI_REQUEST *request) { RECORDER_INTERCEPTOR_NOIO(int, PMPI_File_iwrite, (fh, buf, count, datatype, request)); char **args = assemble_args_list(5, file2id(&fh), ptoa(buf), itoa(count), type2name(datatype), ptoa(request)); RECORDER_INTERCEPTOR(5, args); } -int RECORDER_MPI_DECL(MPI_File_iwrite_shared)(MPI_File fh, CONST void *buf, int count, +int RECORDER_MPIIO_DECL(MPI_File_iwrite_shared)(MPI_File fh, CONST void *buf, int count, MPI_Datatype datatype, __D_MPI_REQUEST *request) { RECORDER_INTERCEPTOR_NOIO(int, PMPI_File_iwrite_shared, (fh, buf, count, datatype, request)); char **args = assemble_args_list(5, file2id(&fh), ptoa(buf), itoa(count), type2name(datatype), ptoa(request)); RECORDER_INTERCEPTOR(5, args); } +int RECORDER_MPIIO_DECL(MPI_File_seek) (MPI_File fh, MPI_Offset offset, int whence) { + RECORDER_INTERCEPTOR_NOIO(int, PMPI_File_seek, (fh, offset, whence)); + char **args = assemble_args_list(3, file2id(&fh), itoa(offset), whence2name(whence)); + RECORDER_INTERCEPTOR(3, args); +} + +int RECORDER_MPIIO_DECL(MPI_File_seek_shared) (MPI_File fh, MPI_Offset offset, int whence) { + RECORDER_INTERCEPTOR_NOIO(int, PMPI_File_seek_shared, (fh, offset, whence)); + char **args = assemble_args_list(3, file2id(&fh), itoa(offset), whence2name(whence)); + RECORDER_INTERCEPTOR(3, args); +} + +int RECORDER_MPIIO_DECL(MPI_File_get_size) (MPI_File fh, MPI_Offset *offset) { + RECORDER_INTERCEPTOR_NOIO(int, PMPI_File_get_size, (fh, offset)); + char **args = assemble_args_list(2, file2id(&fh), itoa(*offset)); + RECORDER_INTERCEPTOR(2, args); +} + int RECORDER_MPI_DECL(MPI_Finalized)(int *flag) { // TODO: flag RECORDER_INTERCEPTOR_NOIO(int, PMPI_Finalized, (flag)); @@ -688,24 +706,6 @@ int RECORDER_MPI_DECL(MPI_Comm_dup) (MPI_Comm comm, MPI_Comm *newcomm) { } -int RECORDER_MPI_DECL(MPI_File_seek) (MPI_File fh, MPI_Offset offset, int whence) { - RECORDER_INTERCEPTOR_NOIO(int, PMPI_File_seek, (fh, offset, whence)); - char **args = assemble_args_list(3, file2id(&fh), itoa(offset), whence2name(whence)); - RECORDER_INTERCEPTOR(3, args); -} - -int RECORDER_MPI_DECL(MPI_File_seek_shared) (MPI_File fh, MPI_Offset offset, int whence) { - RECORDER_INTERCEPTOR_NOIO(int, PMPI_File_seek_shared, (fh, offset, whence)); - char **args = assemble_args_list(3, file2id(&fh), itoa(offset), whence2name(whence)); - RECORDER_INTERCEPTOR(3, args); -} - -int RECORDER_MPI_DECL(MPI_File_get_size) (MPI_File fh, MPI_Offset *offset) { - RECORDER_INTERCEPTOR_NOIO(int, PMPI_File_get_size, (fh, offset)); - char **args = assemble_args_list(2, file2id(&fh), itoa(*offset)); - RECORDER_INTERCEPTOR(2, args); -} - // Add MPI_Test, MPI_Testany, MPI_Testsome, MPI_Testall, // MPI_Ireduce and MPI_Igather on 2020 12/18