Skip to content

Commit 8b9fe99

Browse files
committed
github action: test OpenMPI
1 parent 1fdbae8 commit 8b9fe99

File tree

2 files changed

+202
-0
lines changed

2 files changed

+202
-0
lines changed

.github/workflows/openmpi.yml

Lines changed: 148 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,148 @@
1+
name: OpenMPI 5.0.5 and 5.0.6
2+
3+
on:
4+
push:
5+
branches:
6+
- main
7+
pull_request:
8+
branches:
9+
- main
10+
11+
jobs:
12+
build:
13+
strategy:
14+
matrix:
15+
platform: [ubuntu-latest]
16+
runs-on: ${{ matrix.platform }}
17+
steps:
18+
- uses: actions/checkout@v4
19+
- name: Install dependencies
20+
run: |
21+
sudo apt-get update -y
22+
- name: Initialize Darshan
23+
run: |
24+
git submodule update --init
25+
autoreconf -i
26+
- name: Build OPENMPI 5.0.6
27+
run: |
28+
cd ${GITHUB_WORKSPACE}
29+
rm -rf OPENMPI ; mkdir OPENMPI ; cd OPENMPI
30+
wget -q https://download.open-mpi.org/release/open-mpi/v5.0/openmpi-5.0.6.tar.gz
31+
gzip -dc openmpi-5.0.6.tar.gz | tar -xf -
32+
cd openmpi-5.0.6
33+
./configure --prefix=${GITHUB_WORKSPACE}/OPENMPI \
34+
CC=gcc \
35+
--disable-mpi-cxx --disable-mpi-fortran
36+
make -s LIBTOOLFLAGS=--silent V=1 -j 8 install
37+
- name: Install Darshan using OPENMPI 5.0.6
38+
if: ${{ always() }}
39+
run: |
40+
export PATH="${GITHUB_WORKSPACE}/OPENMPI/bin:$PATH"
41+
DARSHAN_ROOT=${GITHUB_WORKSPACE}
42+
DARSHAN_INSTALL=${GITHUB_WORKSPACE}/darshan_install
43+
DARSHAN_BUILD=${GITHUB_WORKSPACE}/darshan_build
44+
DARSHAN_LOG_PATH=${GITHUB_WORKSPACE}/darshan_logs
45+
rm -rf ${DARSHAN_LOG_PATH} ${DARSHAN_BUILD} ${DARSHAN_INSTALL}
46+
mkdir -p $DARSHAN_LOG_PATH $DARSHAN_BUILD
47+
cd $DARSHAN_BUILD
48+
$DARSHAN_ROOT/configure --prefix=${DARSHAN_INSTALL} \
49+
--with-log-path=${DARSHAN_LOG_PATH} \
50+
--with-jobid-env=NONE \
51+
CC=mpicc RUNTIME_CC=mpicc UTIL_CC=gcc
52+
make -s LIBTOOLFLAGS=--silent V=1 -j8
53+
make -s install
54+
- name: test a small MPI-IO program using OPENMPI 5.0.6
55+
if: ${{ always() }}
56+
run: |
57+
cd ${GITHUB_WORKSPACE}
58+
export PATH="${GITHUB_WORKSPACE}/OPENMPI/bin:$PATH"
59+
DARSHAN_INSTALL=${GITHUB_WORKSPACE}/darshan_install
60+
TODAY_DATE_PATH=`date "+%Y/%-m/%-d"`
61+
DARSHAN_LOG_PATH=${GITHUB_WORKSPACE}/darshan_logs/${TODAY_DATE_PATH}
62+
DARSHAN_LOG_FILE="${DARSHAN_LOG_PATH}/${USER}_mpi_file_write*"
63+
DARSHAN_PARSER=${DARSHAN_INSTALL}/bin/darshan-parser
64+
65+
mkdir -p $DARSHAN_LOG_PATH
66+
mpicc mpi_file_write.c -o mpi_file_write
67+
68+
export LD_PRELOAD=${DARSHAN_INSTALL}/lib/libdarshan.so
69+
70+
# test Darshan log parser
71+
for iter in 1 2 3 4 5
72+
do
73+
rm -f testfie ${DARSHAN_LOG_FILE}
74+
mpiexec --oversubscribe -n 4 ./mpi_file_write
75+
EXPECT_NBYTE=`stat -c %s ./testfile`
76+
77+
nbytes=`$DARSHAN_PARSER ${DARSHAN_LOG_FILE} | grep MPIIO_BYTES_WRITTEN | cut -f5`
78+
echo "iter=$iter nbytes=$nbytes"
79+
if test "x$nbytes" != "x$EXPECT_NBYTE" ; then
80+
echo "Error: Darshan log parser EXPECT_NBYTE=$EXPECT_NBYTE but nbytes=$nbytes"
81+
exit 1
82+
else
83+
echo "Success: Darshan log parser EXPECT_NBYTE=$EXPECT_NBYTE and nbytes=$nbytes"
84+
fi
85+
done
86+
87+
- name: Build OPENMPI 5.0.5
88+
if: ${{ always() }}
89+
run: |
90+
cd ${GITHUB_WORKSPACE}
91+
rm -rf OPENMPI ; mkdir OPENMPI ; cd OPENMPI
92+
wget -q https://download.open-mpi.org/release/open-mpi/v5.0/openmpi-5.0.5.tar.gz
93+
gzip -dc openmpi-5.0.5.tar.gz | tar -xf -
94+
cd openmpi-5.0.5
95+
./configure --prefix=${GITHUB_WORKSPACE}/OPENMPI \
96+
CC=gcc \
97+
--disable-mpi-cxx --disable-mpi-fortran
98+
make -s LIBTOOLFLAGS=--silent V=1 -j 8 install
99+
- name: Install Darshan using OPENMPI 5.0.5
100+
if: ${{ always() }}
101+
run: |
102+
export PATH="${GITHUB_WORKSPACE}/OPENMPI/bin:$PATH"
103+
DARSHAN_ROOT=${GITHUB_WORKSPACE}
104+
DARSHAN_INSTALL=${GITHUB_WORKSPACE}/darshan_install
105+
DARSHAN_BUILD=${GITHUB_WORKSPACE}/darshan_build
106+
DARSHAN_LOG_PATH=${GITHUB_WORKSPACE}/darshan_logs
107+
rm -rf ${DARSHAN_LOG_PATH} ${DARSHAN_BUILD} ${DARSHAN_INSTALL}
108+
mkdir -p $DARSHAN_LOG_PATH $DARSHAN_BUILD
109+
cd $DARSHAN_BUILD
110+
$DARSHAN_ROOT/configure --prefix=${DARSHAN_INSTALL} \
111+
--with-log-path=${DARSHAN_LOG_PATH} \
112+
--with-jobid-env=NONE \
113+
CC=mpicc RUNTIME_CC=mpicc UTIL_CC=gcc
114+
make -s LIBTOOLFLAGS=--silent V=1 -j8
115+
make -s install
116+
- name: test a small MPI-IO program using OPENMPI 5.0.5
117+
if: ${{ always() }}
118+
run: |
119+
cd ${GITHUB_WORKSPACE}
120+
export PATH="${GITHUB_WORKSPACE}/OPENMPI/bin:$PATH"
121+
DARSHAN_INSTALL=${GITHUB_WORKSPACE}/darshan_install
122+
TODAY_DATE_PATH=`date "+%Y/%-m/%-d"`
123+
DARSHAN_LOG_PATH=${GITHUB_WORKSPACE}/darshan_logs/${TODAY_DATE_PATH}
124+
DARSHAN_LOG_FILE="${DARSHAN_LOG_PATH}/${USER}_mpi_file_write*"
125+
DARSHAN_PARSER=${DARSHAN_INSTALL}/bin/darshan-parser
126+
127+
mkdir -p $DARSHAN_LOG_PATH
128+
mpicc mpi_file_write.c -o mpi_file_write
129+
130+
export LD_PRELOAD=${DARSHAN_INSTALL}/lib/libdarshan.so
131+
132+
# test Darshan log parser
133+
for iter in 1 2 3 4 5
134+
do
135+
rm -f testfie ${DARSHAN_LOG_FILE}
136+
mpiexec --oversubscribe -n 4 ./mpi_file_write
137+
EXPECT_NBYTE=`stat -c %s ./testfile`
138+
139+
nbytes=`$DARSHAN_PARSER ${DARSHAN_LOG_FILE} | grep MPIIO_BYTES_WRITTEN | cut -f5`
140+
echo "iter=$iter nbytes=$nbytes"
141+
if test "x$nbytes" != "x$EXPECT_NBYTE" ; then
142+
echo "Error: Darshan log parser EXPECT_NBYTE=$EXPECT_NBYTE but nbytes=$nbytes"
143+
exit 1
144+
else
145+
echo "Success: Darshan log parser EXPECT_NBYTE=$EXPECT_NBYTE and nbytes=$nbytes"
146+
fi
147+
done
148+

mpi_file_write.c

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
#include <stdio.h>
2+
#include <stdlib.h>
3+
#include <string.h>
4+
#include <unistd.h> /* unlink() */
5+
#include <mpi.h>
6+
7+
#define CHECK_ERROR(fnc) { \
8+
if (err != MPI_SUCCESS) { \
9+
int errorStringLen; \
10+
char errorString[MPI_MAX_ERROR_STRING]; \
11+
MPI_Error_string(err, errorString, &errorStringLen); \
12+
printf("Error at line %d when calling %s: %s\n",__LINE__,fnc,errorString); \
13+
} \
14+
}
15+
16+
#define NELEMS 8
17+
18+
/*----< main() >------------------------------------------------------------*/
19+
int main(int argc, char **argv)
20+
{
21+
char buf[NELEMS];
22+
int i, err, rank, omode;
23+
MPI_Offset offset;
24+
MPI_Count nbytes;
25+
MPI_File fh;
26+
MPI_Status status;
27+
28+
MPI_Init(&argc, &argv);
29+
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
30+
31+
offset = rank * NELEMS;
32+
nbytes = NELEMS;
33+
for (i=0; i<NELEMS; i++)
34+
buf[i] = 'a'+rank+i;
35+
36+
omode = MPI_MODE_CREATE | MPI_MODE_RDWR;
37+
38+
err = MPI_File_open(MPI_COMM_WORLD, "testfile", omode, MPI_INFO_NULL, &fh);
39+
CHECK_ERROR("MPI_File_open")
40+
41+
err = MPI_File_seek(fh, offset, MPI_SEEK_SET);
42+
CHECK_ERROR("MPI_File_seek")
43+
44+
err = MPI_File_write(fh, buf, nbytes, MPI_BYTE, &status);
45+
CHECK_ERROR("MPI_File_write")
46+
47+
err = MPI_File_close(&fh);
48+
CHECK_ERROR("MPI_File_close")
49+
50+
MPI_Finalize();
51+
return 0;
52+
}
53+
54+

0 commit comments

Comments
 (0)