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
- Step 1: sequential design
- Step 2: blocking and vectorisation
- Step 3: shared-memory design (
openmp
) - Step 4: distributed-memory design (
mpi
) - Step 5: GPU
Tutorials
- Further notes to on getting started started.
-
Tutorial: from basic hello world to
slurm
,mpi
andguix
.