HLR is available as open source under the LGPL license.


Currently, there are no official releases of HLR.


Source code for HLR is available from the official repository via

git clone

Please note, that only the default branch is considered stable, e.g., most example programs will run. However, since HLR is still under heavy development, API changes should be expected.


A C++17 compiler is needed for compiling HLR (some code may require C++20 compatibility). This is also a prerequisite for some of the parallelization frameworks. HLR is tested with GCC version ≥ 9, and Clang version ≥ 10. Recommended is at least GCC-10.

Download HLIBpro, unpack and set the prefix variable in the file bin/hlib-config to the directory where you have installed HLIBpro (this is standard HLIBpro installation).

Alternatively, you may install HLIBcore, which contains the basic definitions (classes, functions, etc.), for HLR to compile and run.

Install all wanted frameworks according to the corresponding installation instructions. Please note, that if no framework is available, HLR can still be used in sequential mode.

For MPI, it is assumed that at least MPI_THREAD_SERIALIZED is supported (optimal is MPI_THREAD_MULTIPLE).

For compilation, the scons make replacement is needed.

Optionally, you may install one of the supported malloc libraries (jemalloc, mimalloc, tbbmalloc and tcmalloc). I recommend to use jemalloc.


Set compiler and compiler flags in the top section of the SConstruct file.

Various options are available for scons to alter the default set of programs or frameworks used during compilation.

By default, all programs together with all frameworks are used. To limit both sets, use the options programs and frameworks

The available programs are automatically detected in the programs subdirectory. For this, the naming scheme, e.g., with dag-lu being the program and tbb the framework, is assumed with the latter being one of the supported frameworks.

Option Values Description
programs tlr, hodlr, tileh, tiled-h, tiled-hca, tiled-hodlr, dag-lu, dag-gauss, dag-inv, dag-waz, dag-hodlr, uniform, uniform-mm, uniform-lu, approx-mm, approx-lu, dpt, polykern, cuda comma separated list of programs to build
frameworks seq, omp, tbb, tf, hpx, mpi, gpi2, cuda comma separated list of frameworks to use
Installation Paths of external Libraries
hpro installation path of HLIBpro
tbb installation path of TBB
tf installation path of C++-TaskFlow
hpx installation path of HPX
gpi2 installation path of GPI-2
mkl base directory of Intel MKL
cuda base directory of CUDA
jemalloc installation path of jemalloc
mimalloc installation path of mimalloc
tcmalloc installation path of tcmalloc
Compilation Options
malloc default, system, jemalloc, mimalloc, tbbmalloc, tcmalloc specify malloc library to use
likwid 0/1 use LikWid library
optimise 0/1 disable/enable optimisation options
debug 0/1 disable/enable debug options
fullmsg 0/1 disable/enable full output of compiler call
color 0/1 disable/enable colorized compilation output

An example for the options:

scons debug=1 programs=dag-lu,tlr frameworks=seq,tbb,hpx hpro=/home/user/hlibcore

The chosen options are saved. To recompile with the same options, you just need to enter