Skip to content

singular-gpispace/git-fans

Repository files navigation

GIT-Fans

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.

Abstract

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.

Installation

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.

Building Singular

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

Building GPI-Space

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:

Building GIT-Fans

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-*

Using GIT-Fans

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.