Mentions légales du service

Skip to content
Snippets Groups Projects
Forked from cours-mf / IS328 - TP Algo Num
118 commits ahead of the upstream repository.

The mini-chameleon educational-purpose project

Home

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.

Source of the project

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

Acknowledgements

The project has been originally written by {{{emmanuelagullo}}} and {{{mathieufaverge}}} 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.

Setup

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

Set up guix

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.

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

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

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

Build and test mini-chameleon

mkdir -p build/debug
cmake . -B build/debug/ -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo -DENABLE_MPI=ON -DENABLE_STARPU=ON -DENABLE_MIPP=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

How to update?

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

Update guix (if required)

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

guix pull --allow-downgrades

Expected work

Tutorials