This repository accompanies the master's thesis "Computation of the GIT-fan using a massively parallel implementation". It enables the computation of GIT-Fans in massively parallel fashion on scalable hardware systems.
The GIT fan of an algebraic group action on an algebraic variety describes all GIT quotients arising from Mumford's construction in Geometric Invariant Theory. In this thesis we enhance an implementation that computes the GIT fan for toric actions on affine varieties such that it may be executed on scalable hardware systems. For this purpose, we combine the parallelisation framework GPI-Space, developed at the Fraunhofer ITWM, and the computer algebra system Singular, developed at the Technische Universität Kaiserslautern. In doing so, we are able to compute the Mori chamber decomposition of Mov(Mbar06) (the cone of movable divisor classes of the Deligne-Mumford compactification of the moduli space of 6-pointed stable curves of genus 0) in approximately 21 minutes, utilising 40 Dell PowerEdge M620 Blade Servers with 16 cores each. The previous implementation executed on a single machine terminated after a whole day.
The project as well as its dependencies have been built on Ubuntu 20.04 LTS with GCC 9.3.0 and CMake 3.16.3. The build process and execution on other setups may or may not succeed.
Note: This package is not yet part of our framework of Spack packages, so it requires manual installation. A Spack package will soon be available.
GIT-Fans requires a compatible Singular installation and has been tested with a build of Singular 4.1.3p2. Make sure to build Singular from sources according to the Singular installation guide. In our test environment, the following Singular dependencies has been installed as well:
- 4ti2 1.6
- Flint 2.4.4 available at ftp://jim.mathematik.uni-kl.de/pub/Math/Singular/src/4-0-0/flint-2.4.4.tar.gz
To build GIT-Fans, the sources as well as a working installation of GPI-Space v20.12 are required. Check out GPI-Space v20.12 and proceed according to the GPI-Space installation guide. We used the following versions of depending packages:
- OpenSSL 1.1.1
- hwloc 2.1.0
- Qt5 5.12.8
- chrpath 0.16
- Boost 1.63 (not 1.61 as in the GPI-Space installation guide)
- GPI-2 1.3.2
- libssh2 1.9.0
We assume
$GPISPACE_REPO
to be the root of the checked out GPI-Space repository containing the GPI-Space sources$GPISPACE_INSTALL
to be the root of the GPI-Space installation$SINGULAR_INSTALL
to be the root of the Singular installation (the path of the--prefix
argument when configuring Singular)$FLINT_INSTALL
to be the root of the flint installation (the path of the--prefix
argument when configuring flint)$ROOT_DIR
to be the root of the checked out GIT-Fans repository$BUILD_DIR
to be a path to a (potentially nonexisting) directory where build files are created$INSTALL_DIR
to be the directory where GIT-Fans is going to be installed
GIT-Fans can be built as follows: First, run cmake to generate the build files.
mkdir -p $BUILD_DIR
cd $BUILD_DIR
cmake -DCMAKE_INSTALL_PREFIX=$INSTALL_DIR \
-DCMAKE_BUILD_TYPE=Release \
-DGSPC_HOME=$GPISPACE_INSTALL \
-DALLOW_ANY_GPISPACE_VERSION=true \
-DGPISPACE_REPO=$GPISPACE_REPO \
-DSINGULAR_HOME=$SINGULAR_INSTALL \
-DFLINT_HOME=$FLINT_INSTALL \
$ROOT_DIR
Second, navigate to the build directory, then build and install the project.
cd $BUILD_DIR
make -j$(nproc) install/strip
To verify the installation, tests can be run by invoking make test
in the build directory. Note that the test suite also contains some third party tests since GIT-Fans rebuilds some subdirectories of GPI-Space. In our test environment, the following third-party tests failed (without notable consequences):
- util-generic-hash-combined_hash-performance
- util-generic-hostname
- rpc-performance
However, the following tests provided by GIT-Fans have to be passed:
- util-gitfan
- logging
- workflows
- singular_commands-*
GIT-Fans can either be used locally or in union with a job scheduler such as SLURM. A sample script for launching GIT-Fans on supercomputers may look like as follows:
set -euo pipefail
GITFAN_HOME=<path to GIT-Fans install>
GITFAN_REPO=<path to GIT-Fans repo from which sample input files are read>
WDIR=<path to working directory where GIT-Fans generates all output>
NODEFILE=`generate_pbs_nodefile || :`
if [ -z "$NODEFILE" ] || [ ! -f $NODEFILE ];
then
echo "Warning, not in cluster session. Run on $HOSTNAME instead"
NODEFILE=`mktemp`
echo $HOSTNAME > $NODEFILE
fi
trap "rm -f $NODEFILE" EXIT SIGHUP SIGINT SIGQUIT SIGTERM
if [[ -d "$WDIR" ]];
then
echo "Working directory exists."
exit 1
fi
$GITFAN_HOME/bin/GITFAN \
--nodefile $NODEFILE \
--rif-strategy ssh \
--worker-per-node 16 \
--job-size 10 \
--working-directory "$WDIR" \
--ideal "$GITFAN_REPO/input_files/m6_reduced_ideal" \
--torus-action "$GITFAN_REPO/input_files/m6_reduced_torus_action" \
--symmetry-group "$GITFAN_REPO/input_files/m6_reduced_symmetry_group" \
--simplex-orbit-representatives "$GITFAN_REPO/input_files/m6_reduced_simplex_orbit_representatives" \
--moving-cone "$WDIR/moving_cone" \
+CONESTORAGE --subdirectory-name-length 4 --implementation rpc -CONESTORAGE \
+LOGGING --logs "$WDIR/logs" -LOGGING
echo "Generating statistics"
$GITFAN_HOME/bin/generate_statistics \
--performance-dumps="$WDIR/logs/performance_dumps"
--counter-dumps="$WDIR/logs/counter_dumps" \
> $WDIR/logs/statistics
For further details about usage, please pass the --help
to the GITFAN executable or result Section 4.6 & 4.7 of the master's thesis.