sys-cluster/sionlibl: initial import

Signed-off-by: Alessandro Barbieri <lssndrbarbieri@gmail.com>
This commit is contained in:
Alessandro Barbieri
2021-07-25 20:24:30 +02:00
parent 01a79910e0
commit 0c995ec7d1
4 changed files with 273 additions and 0 deletions

View File

@@ -0,0 +1 @@
DIST sionlibl-1.7.7.tar.gz 490515 BLAKE2B 76971dd6d80222144b40da345d58311911aab09c6a5250b85d4a2731d2f93cdbd39d87dd6bbafdeaba88f06603105076267f6956417916f118ec45e07fa59269 SHA512 6ef46a0905552c558595bf6b72225a290d73dc87fa33c9862de5e4bd4d683792437646f7b4ab8a463b4a50d1b4a79aec96a66e577e815de3f23e9274be2681af

View File

@@ -0,0 +1,120 @@
--- a/config/determine-cc.sh
+++ b/config/determine-cc.sh
@@ -1,7 +1,6 @@
#!/bin/sh
# determine what compiler is behind "cc" (and presumably "CC" and "ftn") wrapper
-CC=`which cc 2>/dev/null`
COMP=
if [ -z "$CC" ]; then
echo "No 'cc' located!"
--- a/config/select-compiler.sh
+++ b/config/select-compiler.sh
@@ -9,7 +9,7 @@
CPS=""
COMP=""
-GNU=`which gcc 2> /dev/null`
+GNU="${CC}"
if [ -n "${GNU}" ]
then
NCPS=`expr ${NCPS} + 1`
--- a/config/select-mpi.sh
+++ b/config/select-mpi.sh
@@ -76,7 +76,6 @@
if [ -z "${MPIS}" ]; then MPIS="${MPI}"; else MPIS="${MPIS}|${MPI}"; fi
fi
-MPICC=`which mpicc 2> /dev/null`
if [ -n "${MPICC}" ]
then
FMPI=""
@@ -86,7 +85,7 @@
MPIROOTDIR1=`dirname ${MBINDIR}`
echo "#include <mpi.h>" > conftest.c
- mpicc -E conftest.c | grep '/mpi.h"' | head -1 > mpiconf.txt
+ "${MPICC}" -E conftest.c | grep '/mpi.h"' | head -1 > mpiconf.txt
MINCDIR=`cat mpiconf.txt | sed -e 's#^.* "##' -e 's#/mpi.h".*##'`
if [ -n "${MINCDIR}" ]
then
--- a/mf/Makefile.defs.linux-gomp
+++ b/mf/Makefile.defs.linux-gomp
@@ -23,24 +23,19 @@
#------------------------------------------------------------------------------
# SIONlib General Settings
#------------------------------------------------------------------------------
-OPTFLAGS = -g -O0 -Wall
+CFLAGS += -std=c99 $(PFLAG) $(OPTFLAGS) -fPIC
-CC = gcc
-CFLAGS = -std=c99 $(PFLAG) $(OPTFLAGS) -fPIC
+CXXFLAGS += $(PFLAG) $(OPTFLAGS) -fPIC
-CXX = g++
-CXXFLAGS = $(PFLAG) $(OPTFLAGS) -O3
-
-F77 = gfortran
-FFLAGS = $(PFLAG) $(OPTFLAGS)
+FFLAGS += $(PFLAG) $(OPTFLAGS) -fPIC
F90 = $(F77)
-F90FLAGS = $(PFLAG) $(OPTFLAGS) -ffree-form
+F90FLAGS += $(PFLAG) $(OPTFLAGS) -ffree-form -fPIC $(FCFLAGS)
FPP =
FDOPT = -D
-LDFLAGS = $(PFLAG) $(OPTFLAGS) $(HINTSLIB)
+LDFLAGS += $(PFLAG) $(OPTFLAGS) $(HINTSLIB)
UTILLIB =
FOBASE = pomp_fwrapper_base.o
@@ -101,10 +96,6 @@
#------------------------------------------------------------------------------
MPIENABLE = 1
-MPICC = mpicc
-MPICXX = mpicxx
-MPIF77 = mpif77
-MPIF90 = mpif90
MPILIB = -lmpich
PMPILIB = -lpmpich
#PMPILIB = # MPICH2
@@ -139,8 +130,7 @@
#------------------------------------------------------------------------------
SZLIB = szlib
-SZLIB_OPTFLAGS = -O3
-SZLIB_CFLAGS = -I$(TOPDIR)/utils/szlib -DELG_COMPRESSED -DCUBE_COMPRESSED
+SZLIB_CFLAGS = -I$(TOPDIR)/utils/szlib -DELG_COMPRESSED -DCUBE_COMPRESSED $(CFLAGS)
SZLIB_LIBPATH = -L$(TOPDIR)/utils/szlib
SZLIB_LIB = -lsc.z
--- a/src/fortraninterface/Makefile
+++ b/src/fortraninterface/Makefile
@@ -121,21 +122,21 @@
$(CPP) $(F90FLAGS) $(F90FLAGS_CPP) $(F90MPIFLAGS) -P -E -I ../lib sion_f90_mpi.F90 > sion_f90_mpi.f90
sion_f90_mpi.mod : sion_f90_mpi.o
sion_f90_mpi.o : sion_f90_mpi.f90 sion_f90.mod $(SION_HDRS)
- $(MPIF90) $(F90FLAGS) -c sion_f90_mpi.f90
+ $(MPIF90) $(F90FLAGS) $(F90MPIFLAGS) -c sion_f90_mpi.f90
# F90 Interface (OMP)
sion_f90_omp.f90: sion_f90_omp.F90
$(CPP) $(F90OMPFLAGS) $(F90FLAGS) $(F90FLAGS_CPP) -P -E -I ../lib sion_f90_omp.F90 > sion_f90_omp.f90
sion_f90_omp.mod : sion_f90_omp.o
sion_f90_omp.o : sion_f90_omp.f90 sion_f90.mod $(SION_HDRS)
- $(OMPF90) $(F90FLAGS) -c sion_f90_omp.f90
+ $(OMPF90) $(F90FLAGS) $(F90OMPFLAGS) -c sion_f90_omp.f90
# F90 Interface (OMPI)
sion_f90_ompi.f90: sion_f90_ompi.F90 $(SION_HDRS)
$(CPP) $(F90MPIFLAGS) $(F90OMPFLAGS) $(F90FLAGS) $(F90FLAGS_CPP) -P -E -I ../lib sion_f90_ompi.F90 > sion_f90_ompi.f90
sion_f90_ompi.mod : sion_f90_ompi.o
sion_f90_ompi.o : sion_f90_ompi.f90 $(SION_HDRS)
- $(MPIF90) $(F90FLAGS) -c sion_f90_ompi.f90
+ $(MPIF90) $(F90FLAGS) $(F90MPIFLAGS) -c sion_f90_ompi.f90

View File

@@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
<pkgmetadata>
<maintainer type="person">
<email>lssndrbarbieri@gmail.com</email>
<name>Alessandro Barbieri</name>
</maintainer>
<longdescription lang="en">
SIONlib is a library for writing and reading data from several thousands of parallel tasks into/from one or a small number of physical files. Only the open and close functions are collective while file access can be performed independently.
SIONlib can be used as a replacement for standard I/O APIs (e.g. POSIX) that are used to access distinct files from every parallel process. SIONlib will bundle the data into one or few files in a coordinated fashion in order to sidestep sequentialising mechanism in the file system. At the same time, the task-per-file picture is maintained for the application, every process has access to its logical file only. File access is performed using SIONlib equivalents to standard C-I/O functionality (fwrite becomes sion_write, fseek becomes sion_seek, etc.) which have similar semantics as their C counterparts.
Internally, the physical files are sub-divided into sequences of blocks, which themselves contain one chunk of data belonging to every logical file. In case the amount to be written to a file is known up front, it can optionally be specified when opening the file and the sequence of blocks collapses into a single block with one chunk per task containing all of its data. If a chunk size cannot be specified ahead of time, a sensible default is chosen and reads and writes that cross chunk boundaries are handled transparently by SIONlib.
SIONlib also uses information about the block size of the underlying file system, because access to the same block from different tasks often leads to contention.
Both, the estimated chunk size and file system block size are used to align individual chunks with file system blocks. Ensuring contention-free access to file system blocks enables efficient parallel writing and reading.
SIONlib provides two different interfaces: one for parallel access (with implementations for different parallel programming technologies such as MPI, OpenMP and hybrid MPI+OpenMP) and one for sequential access which is also used internally by the SIONlib utilities.
</longdescription>
<use>
<!--<flag name="cuda">enable CUDA aware interface</flag>-->
<flag name="cxx">Disable C++ support</flag>
<flag name="debug">enable SIONlib debug</flag>
<flag name="fortran">Enable Fortran support</flag>
<flag name="mpi">enable mpi</flag>
<flag name="python">enable python support</flag>
<flag name="ompi">enable hybrid openmp mpi</flag>
<flag name="openmp">enable openmp</flag>
<flag name="parutils">Enable compilation of parutils (used for benchmarking)</flag>
<flag name="pthreads">configure SIONlib to use pthreads for locking</flag>
<!--<flag name="sionfwd">enable I/O forwarding with SIONfwd</flag>-->
</use>
</pkgmetadata>

View File

@@ -0,0 +1,118 @@
# Copyright 2019-2021 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
DOCS_BUILDER="doxygen"
DOCS_CONFIG_NAME="doxy"
FORTRAN_NEEDED="fortran"
PYTHON_COMPAT=( pypy3 python3_{8..10} )
inherit docs flag-o-matic fortran-2 python-any-r1 toolchain-funcs
DESCRIPTION="Scalable I/O library for parallel access to task-local files"
HOMEPAGE="https://www.fz-juelich.de/ias/jsc/EN/Expertise/Support/Software/SIONlib/_node.html"
SRC_URI="http://apps.fz-juelich.de/jsc/sionlib/download.php?version=${PV}l -> ${P}.tar.gz"
S="${WORKDIR}/sionlib"
LICENSE="BSD"
SLOT="0"
KEYWORDS="~amd64"
IUSE="+cxx debug doc examples +fortran +mpi +ompi +openmp +parutils +pthreads python"
#TODO: cuda sionfwd msa
#--enable-sionfwd=/path/to/sionfwd
#--msa=(hostname-regex|deep-est-sdv)] MSA aware collective operations for the given system
PATCHES=( "${FILESDIR}/${PN}-respect-flags.patch" )
RDEPEND="
mpi? ( virtual/mpi )
ompi? (
|| ( sys-devel/gcc:*[openmp] sys-libs/libomp )
virtual/mpi
)
openmp? ( || ( sys-devel/gcc:*[openmp] sys-libs/libomp ) )
"
DEPEND="
${RDEPEND}
${PYTHON_DEPS}
"
pkg_setup() {
FORTRAN_NEED_OPENMP=0
use openmp && FORTRAN_NEED_OPENMP=1
use ompi && FORTRAN_NEED_OPENMP=1
fortran-2_pkg_setup
}
src_prepare() {
default
sed 's/CXXFLAGS = $(CXXFLAGS)/CXXFLAGS = /' -i test/serial/Makefile || die
sed 's/`gcc/`${CC}/' -i config/determine-compiler-version.sh || die
}
src_configure() {
tc-export AR CC CXX F77 FC
export MPICC=/usr/bin/mpicc
export MPICXX=/usr/bin/mpicxx
export MPIF77=/usr/bin/mpif77
export MPIF90=/usr/bin/mpif90
export F90=$(tc-getFC)
export OMPF77=$(tc-getF77)
export OMPF90=$(tc-getFC)
append-fflags -fallow-argument-mismatch
local myconf=(
--disable-mic
--prefix="${T}/prefix/usr"
)
#custom configure?
use cxx || myconf+=( "--disable-cxx" )
use fortran || myconf+=( "--disable-fortran" )
use mpi || myconf+=( "--disable-mpi" )
use ompi || myconf+=( "--disable-ompi" )
use openmp || myconf+=( "--disable-omp" )
use parutils || myconf+=( "--disable-parutils" )
use pthreads || myconf+=( "--disable-pthreads" )
use debug && myconf+=( "--enable-debug" )
use python && myconf+=( "--enable-python=3" )
./configure "${myconf[@]}" || die
}
src_compile() {
export VARTEXFONTS="${T}/fonts"
emake C_AR=$(tc-getAR) F90=$(tc-getFC)
docs_compile
}
src_install() {
mkdir -p "${T}/prefix/usr/share/doc/${PF}" || die
default
if use examples ; then
mv "${T}/prefix/usr/examples" "${T}/prefix/usr/share/doc/${PF}/" || die
else
rm -r "${T}/prefix/usr/examples" || die
fi
# move 64 bit libraries to lib64
libs64=( "${T}"/prefix/usr/lib/*64* )
if [[ ${#libs64[@]} -gt 0 ]]; then
mkdir "${T}/prefix/usr/lib64" || die
for l in "${libs64[@]}" ; do
mv "${l}" "${T}/prefix/usr/lib64/" || die
done
fi
rsync -ravXHA "${T}/prefix/usr" "${ED}/" || die
docompress -x "/usr/share/doc/${PF}/examples"
#TODO: build shared libs
#find "${ED}" -name '*.a' -delete || die
find "${ED}" -name '*.la' -delete || die
}