The mini-chameleon educational-purpose project

Table of Contents

1. Home

1.1. About mini-chameleon

mini-chameleon is an educational-purpose project aiming at designing a dense linear algebra solver for modern supercomputers. Initially, the project includes only testing routines, while the development of the actual computational routines is yet to be completed. The objective is to implement a dense matrix-matrix multiplication (GEMM) and an LU factorization (GETRF).

The project is named after the fully-featured chameleon dense linear algebra library.

1.2. Source of the project

You can browse (web) or visit the source (gitlab) of this page.

1.3. Acknowledgements

The project has been originally written by Emmanuel Agullo and Mathieu Faverge for the option « Calcul Intensif et Sciences des données (CISD) » at Enseirb-Matmeca. Alycia Lisito is currently being contributing as well.

We are immensely thankful to the plafrim team for their constant and responsive support. We thank all CISD students for their very valuable feedback as well.

2. Setup

2.1. Clone mini-chameleon

git clone --recurse-submodules https://gitlab.inria.fr/solverstack/mini-examples/mini-chameleon.git

In the following, we assume to be in the mini-chameleon folder:

cd mini-chameleon

2.2. Set up guix

2.2.1. Install guix package management tool

The project can be conducted on any machine with guix package management tool pre-installed. If you're on a cluster where guix is deployed (see the list), such as plafrim, this step can be skipped. Otherwise, you can install guix on your Linux laptop in 5 minutes: just follow the binary install instructions.

2.2.2. Set up reference guix channels provided for mini-chameleon

As mentioned above, we assume to be in the mini-chameleon folder and we position guix to use reference channels for mini-chameleon

mkdir -p ~/.config/guix # in case it does not already exist
ln -s $(pwd)/channels.scm ~/.config/guix/ # position the proposed channels for later "guix pull" ; alternative: cp ./channels.scm ~/.config/guix/channels.scm
guix build hello # avoid issue with permissions
guix pull --allow-downgrades # set up guix with
hash guix # make sur the new guix is taken into account by bash
guix describe --format=channels # check you have the expected channels

2.2.3. Enter a guix shell environment with dependencies for building mini-chameleon

guix shell --pure -D mini-chameleon bash gcc-toolchain -- bash --norc

2.3. Build and test mini-chameleon

mkdir -p build/debug
cmake . -B build/debug/ -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo -DENABLE_STARPU=ON # -DENABLE_CUDA=ON
ln -s build/debug/compile_commands.json .
# Build:
cmake --build build/debug
# Test correction
./build/debug/testings/check_dgemm -v seq
./build/debug/testings/check_dgetrf -v seq
# Test performance
./build/debug/testings/perf_dgemm -v seq --check
./build/debug/testings/perf_dgetrf -v seq --check

2.4. How to update?

2.4.1. Update mini-chameleon

We assume your git remote on gitlab.inria.fr is named inria:

git remote rename origin inria

You can then update mini-chameleon from gitlab.inria.fr reference with:

git pull inria

2.4.2. Update guix (if required)

Thanks to the above symbolic link to ~/.config/guix/channels.scm, updating mini-chameleon directly positions up-to-date guix channels. We thus can thus simply update guix itself with:

guix pull --allow-downgrades

3. Expected work

4. Tutorials

Created: 2025-12-01 Mon 08:56

Validate