Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 8 additions & 5 deletions .github/workflows/end_to_end_regression.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@ on:
branches:
- main

env:
MPICH_VERSION: 4.3.1

jobs:
end_to_end_regression:
strategy:
Expand All @@ -22,16 +25,16 @@ jobs:
sudo apt-get install -y gfortran bc
- name: Install MPICH
run: |
echo "Install MPICH ${MPICH_VERSION} in ${PWD}/mpich_install"
mkdir mpich_install
export MPICH_INSTALL_PATH=$PWD/mpich_install
wget https://www.mpich.org/static/downloads/3.2.1/mpich-3.2.1.tar.gz
tar -xzvf mpich-3.2.1.tar.gz
cd mpich-3.2.1
wget -q https://www.mpich.org/static/downloads/${MPICH_VERSION}/mpich-${MPICH_VERSION}.tar.gz
tar -xzvf mpich-${MPICH_VERSION}.tar.gz
cd mpich-${MPICH_VERSION}
mkdir build
cd build
FFLAGS="-w -fallow-argument-mismatch" ../configure --disable-dependency-tracking --prefix=$MPICH_INSTALL_PATH
make
make install
make -j8 install
- name: Install Darshan
run: |
git submodule update --init
Expand Down
132 changes: 132 additions & 0 deletions .github/workflows/mpich_openmpi.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,132 @@
name: Test MPICH and OpenMPI

on:
push:
branches:
- main
pull_request:
branches:
- main

env:
MPICH_VERSION: 4.3.1
OPENMPI_VERSION: 5.0.8

jobs:
build:
strategy:
matrix:
platform: [ubuntu-latest]
runs-on: ${{ matrix.platform }}
steps:
- uses: actions/checkout@v4
- name: Install dependencies
run: |
sudo apt-get update -y
- name: Build MPICH
run: |
cd ${GITHUB_WORKSPACE}
echo "Install MPICH ${MPICH_VERSION} in ${GITHUB_WORKSPACE}/MPICH"
rm -rf MPICH ; mkdir MPICH ; cd MPICH
wget -q https://www.mpich.org/static/downloads/${MPICH_VERSION}/mpich-${MPICH_VERSION}.tar.gz
gzip -dc mpich-${MPICH_VERSION}.tar.gz | tar -xf -
cd mpich-${MPICH_VERSION}
./configure --prefix=${GITHUB_WORKSPACE}/MPICH \
--silent \
--enable-romio \
--with-file-system=ufs \
--with-device=ch3:sock \
--disable-fortran \
CC=gcc
make -s LIBTOOLFLAGS=--silent V=1 -j 8 install > qout 2>&1
make -s -j 8 distclean >> qout 2>&1
- name: Build OPENMPI
run: |
cd ${GITHUB_WORKSPACE}
echo "Install OPENMPI ${OPENMPI_VERSION} in ${GITHUB_WORKSPACE}/OPENMPI"
rm -rf OPENMPI ; mkdir OPENMPI ; cd OPENMPI
VER_MAJOR=${OPENMPI_VERSION%.*}
wget -q https://download.open-mpi.org/release/open-mpi/v${VER_MAJOR}/openmpi-${OPENMPI_VERSION}.tar.gz
gzip -dc openmpi-${OPENMPI_VERSION}.tar.gz | tar -xf -
cd openmpi-${OPENMPI_VERSION}
./configure --prefix=${GITHUB_WORKSPACE}/OPENMPI \
--silent \
--with-io-romio-flags="--with-file-system=ufs" \
--disable-mpi-cxx --disable-mpi-fortran \
CC=gcc
make -s LIBTOOLFLAGS=--silent V=1 -j 8 install > qout 2>&1
make -s -j 8 distclean >> qout 2>&1
- name: Initialize Darshan
run: |
git submodule update --init
autoreconf -i
- name: Build Darshan using MPICH
run: |
export PATH="${GITHUB_WORKSPACE}/MPICH/bin:${PATH}"
export DARSHAN_ROOT="${GITHUB_WORKSPACE}"
export DARSHAN_LOG_PATH="${GITHUB_WORKSPACE}/LOGS"
export DARSHAN_INSTALL="${GITHUB_WORKSPACE}/INSTALL"
export DARSHAN_BUILD="${GITHUB_WORKSPACE}/BUILD"
rm -rf ${DARSHAN_LOG_PATH} ${DARSHAN_BUILD} ${DARSHAN_INSTALL}
mkdir -p ${DARSHAN_LOG_PATH} ${DARSHAN_BUILD}
cd ${DARSHAN_BUILD}
$DARSHAN_ROOT/configure --prefix=${DARSHAN_INSTALL} \
--with-log-path=${DARSHAN_LOG_PATH} \
--with-jobid-env=NONE \
CC=mpicc RUNTIME_CC=mpicc UTIL_CC=gcc
make -s LIBTOOLFLAGS=--silent V=1 -j8
make -s install
- name: make check (MPICH)
run: |
export PATH="${GITHUB_WORKSPACE}/MPICH/bin:${PATH}"
cd ${GITHUB_WORKSPACE}/BUILD
make check
- name: Print test log files (MPICH)
if: ${{ always() }}
run: |
cat ${GITHUB_WORKSPACE}/BUILD/darshan-runtime/test/tst_runs.log
- name: make check (MPICH) running 4 processes
run: |
export PATH="${GITHUB_WORKSPACE}/MPICH/bin:${PATH}"
cd ${GITHUB_WORKSPACE}/BUILD
make check NP=4
- name: Print test log files (MPICH) running 4 processes
if: ${{ always() }}
run: |
cat ${GITHUB_WORKSPACE}/BUILD/darshan-runtime/test/tst_runs.log
- name: Build Darshan using OpenMPI
run: |
export PATH="${GITHUB_WORKSPACE}/OPENMPI/bin:${PATH}"
export DARSHAN_ROOT="${GITHUB_WORKSPACE}"
export DARSHAN_LOG_PATH="${GITHUB_WORKSPACE}/LOGS"
export DARSHAN_INSTALL="${GITHUB_WORKSPACE}/INSTALL"
export DARSHAN_BUILD="${GITHUB_WORKSPACE}/BUILD"
rm -rf ${DARSHAN_LOG_PATH} ${DARSHAN_BUILD} ${DARSHAN_INSTALL}
mkdir -p ${DARSHAN_LOG_PATH} ${DARSHAN_BUILD}
cd ${DARSHAN_BUILD}
$DARSHAN_ROOT/configure --prefix=${DARSHAN_INSTALL} \
--with-log-path=${DARSHAN_LOG_PATH} \
--with-jobid-env=NONE \
CC=mpicc RUNTIME_CC=mpicc UTIL_CC=gcc
make -s LIBTOOLFLAGS=--silent V=1 -j8
make -s install
- name: make check (OpenMPI)
run: |
export PATH="${GITHUB_WORKSPACE}/OPENMPI/bin:${PATH}"
cd ${GITHUB_WORKSPACE}/BUILD
make check
- name: Print test log files (OpenMPI)
if: ${{ always() }}
run: |
cat ${GITHUB_WORKSPACE}/BUILD/darshan-runtime/test/tst_runs.log
- name: make check (OpenMPI) running 4 processes
run: |
export PATH="${GITHUB_WORKSPACE}/OPENMPI/bin:${PATH}"
cd ${GITHUB_WORKSPACE}/BUILD
make check NP=4
- name: Print test log files (OpenMPI) running 4 processes
if: ${{ always() }}
run: |
cat ${GITHUB_WORKSPACE}/BUILD/darshan-runtime/test/tst_runs.log
2 changes: 1 addition & 1 deletion darshan-runtime/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

ACLOCAL_AMFLAGS = -I ../maint/config

SUBDIRS = lib pkgconfig share
SUBDIRS = lib pkgconfig share test

bin_SCRIPTS = darshan-config \
darshan-gen-cc.pl \
Expand Down
63 changes: 60 additions & 3 deletions darshan-runtime/configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -690,8 +690,11 @@ if test "x$enable_darshan_runtime" = xyes ; then
#error OPENMPI FOUND
#endif
])],
[],
[AC_DEFINE(HAVE_OPEN_MPI, 1, Define if OpenMPI is being used)])
[is_ompi=0], [is_ompi=1])

if test "x$is_ompi" = x1 ; then
AC_DEFINE(HAVE_OPEN_MPI, 1, [Define if OpenMPI is being used])
fi

# determine if the MPI library includes MPI-IO functions or not
AC_MSG_CHECKING(for MPI-IO support in MPI)
Expand Down Expand Up @@ -770,6 +773,55 @@ if test "x$enable_darshan_runtime" = xyes ; then
[AC_MSG_RESULT(yes)], [AC_MSG_RESULT(no)])],
[AC_MSG_RESULT(no)]
)

dnl MPI_Count was first introduced in MPI 3.0. Check MPI-IOfunctions that make
dnl use of MPI_Count.
AC_CHECK_FUNCS([MPI_File_read_c \
MPI_File_read_all_c \
MPI_File_read_all_begin_c \
MPI_File_read_at_c \
MPI_File_read_at_all_c \
MPI_File_read_at_all_begin_c \
MPI_File_read_ordered_c \
MPI_File_read_ordered_begin_c \
MPI_File_read_shared_c \
MPI_File_write_c \
MPI_File_write_all_c \
MPI_File_write_all_begin_c \
MPI_File_write_at_c \
MPI_File_write_at_all_c \
MPI_File_write_at_all_begin_c \
MPI_File_write_ordered_c \
MPI_File_write_ordered_begin_c \
MPI_File_write_shared_c \
MPI_File_iread_c \
MPI_File_iread_all_c \
MPI_File_iread_at_c \
MPI_File_iread_at_all_c \
MPI_File_iread_shared_c \
MPI_File_iwrite_c \
MPI_File_iwrite_all_c \
MPI_File_iwrite_at_c \
MPI_File_iwrite_at_all_c \
MPI_File_iwrite_shared_c],
[have_mpi_io_large_count_apis=yes],
[have_mpi_io_large_count_apis=no])

if test "x$have_mpi_io_large_count_apis" = "xyes" ; then
AC_DEFINE(HAVE_MPI_LARGE_COUNT, 1,
[Define if MPI-IO support large count feature])
AC_SUBST(HAVE_MPI_LARGE_COUNT, [1])
fi

ac_mpi_path=`AS_DIRNAME(["$CC"])`
if test "x$ac_mpi_path" = "x." ; then
AC_PATH_PROGS(mpicc_path, ${CC})
ac_mpi_path=`AS_DIRNAME(["$mpicc_path"])`
fi
AC_PATH_PROGS(TESTMPIRUN, mpiexec mpirun, [], [$ac_mpi_path])
AC_SUBST(TESTMPIRUN)
else
have_mpi_io_large_count_apis=no
fi

#
Expand Down Expand Up @@ -833,6 +885,8 @@ else
enable_ldms_mod=no
with_log_path=
with_jobid_env=
have_mpi_io_large_count_apis=no
is_ompi=0
fi

AC_SUBST(ENABLE_LD_PRELOAD, ["$enable_ld_preload"])
Expand Down Expand Up @@ -868,6 +922,7 @@ AC_SUBST(HDF5_PATH, ["$with_hdf5"])
AC_SUBST(PNETCDF_PATH, ["$with_pnetcdf"])
AC_SUBST(DAOS_PATH, ["$with_daos"])
AC_SUBST(LDMS_PATH, ["$LDMS_HOME"])
AC_SUBST(HAVE_OPEN_MPI, ["$is_ompi"])

AM_CONDITIONAL(ENABLE_MMAP_LOGS, [test "x$enable_mmap_logs" = xyes])
AM_CONDITIONAL(ENABLE_LDPRELOAD, [test "x$enable_ld_preload" = xyes])
Expand Down Expand Up @@ -895,6 +950,7 @@ AC_CONFIG_FILES(Makefile \
darshan-gen-cxx.pl \
darshan-gen-fortran.pl \
lib/Makefile \
test/Makefile \
pkgconfig/Makefile \
pkgconfig/darshan-runtime.pc \
share/Makefile \
Expand Down Expand Up @@ -972,5 +1028,6 @@ if test "x$enable_darshan_runtime" = xyes ; then
Log file env variables - $__log_path_by_env
Location of Darshan log files - $__log_path
Job ID env variable - $with_jobid_env
MPI-IO hints - $__DARSHAN_LOG_HINTS"
MPI-IO hints - $__DARSHAN_LOG_HINTS
MPI-IO large-count support - $have_mpi_io_large_count_apis"
fi
33 changes: 33 additions & 0 deletions darshan-runtime/lib/darshan-dynamic.h
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,39 @@ DARSHAN_EXTERN_DECL(PMPI_Gather, int, (const void *sendbuf, int sendcount, MPI_D
DARSHAN_EXTERN_DECL(PMPI_Gather, int, (void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm));
#endif
DARSHAN_EXTERN_DECL(PMPI_Barrier, int, (MPI_Comm comm));

/* If MPI-IO supports large-count feature */
#ifdef HAVE_MPI_LARGE_COUNT
DARSHAN_EXTERN_DECL(PMPI_File_iread_all_c, int, (MPI_File fh, void *buf, MPI_Count count, MPI_Datatype datatype, __D_MPI_REQUEST *request));
DARSHAN_EXTERN_DECL(PMPI_File_iread_at_all_c, int, (MPI_File fh, MPI_Offset offset, void *buf, MPI_Count count, MPI_Datatype datatype, __D_MPI_REQUEST *request));
DARSHAN_EXTERN_DECL(PMPI_File_iread_at_c, int, (MPI_File fh, MPI_Offset offset, void *buf, MPI_Count count, MPI_Datatype datatype, __D_MPI_REQUEST *request));
DARSHAN_EXTERN_DECL(PMPI_File_iread_c, int, (MPI_File fh, void *buf, MPI_Count count, MPI_Datatype datatype, __D_MPI_REQUEST *request));
DARSHAN_EXTERN_DECL(PMPI_File_iread_shared_c, int, (MPI_File fh, void *buf, MPI_Count count, MPI_Datatype datatype, __D_MPI_REQUEST *request));
DARSHAN_EXTERN_DECL(PMPI_File_iwrite_all_c, int, (MPI_File fh, const void *buf, MPI_Count count, MPI_Datatype datatype, __D_MPI_REQUEST *request));
DARSHAN_EXTERN_DECL(PMPI_File_iwrite_at_all_c, int, (MPI_File fh, MPI_Offset offset, const void *buf, MPI_Count count, MPI_Datatype datatype, __D_MPI_REQUEST *request));
DARSHAN_EXTERN_DECL(PMPI_File_iwrite_at_c, int, (MPI_File fh, MPI_Offset offset, const void *buf, MPI_Count count, MPI_Datatype datatype, __D_MPI_REQUEST *request));
DARSHAN_EXTERN_DECL(PMPI_File_iwrite_c, int, (MPI_File fh, const void *buf, MPI_Count count, MPI_Datatype datatype, __D_MPI_REQUEST *request));
DARSHAN_EXTERN_DECL(PMPI_File_iwrite_shared_c, int, (MPI_File fh, const void *buf, MPI_Count count, MPI_Datatype datatype, __D_MPI_REQUEST *request));
DARSHAN_EXTERN_DECL(PMPI_File_read_all_begin_c, int, (MPI_File fh, void *buf, MPI_Count count, MPI_Datatype datatype));
DARSHAN_EXTERN_DECL(PMPI_File_read_all_c, int, (MPI_File fh, void *buf, MPI_Count count, MPI_Datatype datatype, MPI_Status *status));
DARSHAN_EXTERN_DECL(PMPI_File_read_at_all_begin_c, int, (MPI_File fh, MPI_Offset offset, void *buf, MPI_Count count, MPI_Datatype datatype));
DARSHAN_EXTERN_DECL(PMPI_File_read_at_all_c, int, (MPI_File fh, MPI_Offset offset, void *buf, MPI_Count count, MPI_Datatype datatype, MPI_Status *status));
DARSHAN_EXTERN_DECL(PMPI_File_read_at_c, int, (MPI_File fh, MPI_Offset offset, void *buf, MPI_Count count, MPI_Datatype datatype, MPI_Status *status));
DARSHAN_EXTERN_DECL(PMPI_File_read_c, int, (MPI_File fh, void *buf, MPI_Count count, MPI_Datatype datatype, MPI_Status *status));
DARSHAN_EXTERN_DECL(PMPI_File_read_ordered_begin_c, int, (MPI_File fh, void *buf, MPI_Count count, MPI_Datatype datatype));
DARSHAN_EXTERN_DECL(PMPI_File_read_ordered_c, int, (MPI_File fh, void *buf, MPI_Count count, MPI_Datatype datatype, MPI_Status *status));
DARSHAN_EXTERN_DECL(PMPI_File_read_shared_c, int, (MPI_File fh, void *buf, MPI_Count count, MPI_Datatype datatype, MPI_Status *status));
DARSHAN_EXTERN_DECL(PMPI_File_write_all_begin_c, int, (MPI_File fh, const void *buf, MPI_Count count, MPI_Datatype datatype));
DARSHAN_EXTERN_DECL(PMPI_File_write_all_c, int, (MPI_File fh, const void *buf, MPI_Count count, MPI_Datatype datatype, MPI_Status *status));
DARSHAN_EXTERN_DECL(PMPI_File_write_at_all_begin_c, int, (MPI_File fh, MPI_Offset offset, const void *buf, MPI_Count count, MPI_Datatype datatype));
DARSHAN_EXTERN_DECL(PMPI_File_write_at_all_c, int, (MPI_File fh, MPI_Offset offset, const void *buf, MPI_Count count, MPI_Datatype datatype, MPI_Status *status));
DARSHAN_EXTERN_DECL(PMPI_File_write_at_c, int, (MPI_File fh, MPI_Offset offset, const void *buf, MPI_Count count, MPI_Datatype datatype, MPI_Status *status));
DARSHAN_EXTERN_DECL(PMPI_File_write_c, int, (MPI_File fh, const void *buf, MPI_Count count, MPI_Datatype datatype, MPI_Status *status));
DARSHAN_EXTERN_DECL(PMPI_File_write_ordered_begin_c, int, (MPI_File fh, const void *buf, MPI_Count count, MPI_Datatype datatype));
DARSHAN_EXTERN_DECL(PMPI_File_write_ordered_c, int, (MPI_File fh, const void *buf, MPI_Count count, MPI_Datatype datatype, MPI_Status *status));
DARSHAN_EXTERN_DECL(PMPI_File_write_shared_c, int, (MPI_File fh, const void *buf, MPI_Count count, MPI_Datatype datatype, MPI_Status *status));
#endif

#endif /* HAVE_MPI */

#endif
Expand Down
Loading
Loading