Skip to content

About this project¤

TL;DR: This project, developed by Pierre Beaujean, provides C headers (missing in the reference scaLAPACK implementation) and C wrappers (similar in spirit to LAPACKe).

Overview¤

Note: This project is in its early stages, and the API is not yet stable and may undergo changes.

Motivation¤

Using scaLAPACK directly in C presents several challenges:

  • Lack of C Headers: The reference scaLAPACK implementation does not include a comprehensive set of C headers, apart from those available through oneMKL.
  • Absence of a Higher-Level Interface: Unlike BLAS and LAPACK, scaLAPACK lacks a middle- or high-level C interface.
  • Limited Documentation: Detailed usage information is often only accessible by diving into the source code, as official documentation is sparse.

This project addresses the first two issues by providing:

  • A set of C headers for scaLAPACK.
  • A low- and middle-level interface to PBLAS, BLACS, and nearly all scaLAPACK functions.

The third issue (documentation) remains an ongoing challenge, reflecting a broader trend in netlib's projects that rely heavily on aging user guides and systematic function design.

For more information on how to use scaLAPACKe in practice, including common caveats, refer to the Quickstart Guide. A more beginner-friendly introduction to (sca)LAPACK(e) is also available here.

Alternatives¤

Currently, there are no direct alternatives to this project that allow for using scaLAPACK in C, other than the aforementioned headers provided by oneMKL (mkl_{blacs,pblas,scalapack}.h). If such an alternative existed, this project likely wouldn't.

However, SLATE, written in C++, aims to replace scaLAPACK and is worth considering. There is also an (undocumented?) C API, which appears to be auto-generated. Additionally, with the rise of GPUs, other projects with different approaches have emerged.

Other libraries interface with or expose LAPACK functions (though not scaLAPACK), including those in languages like Python (e.g., SciPy). See Wikipedia for more details.

Implementation¤

The files are generated using a Python script, with manual adjustments made as needed.

Interested in contributing? Check out our contribution guidelines!

About me¤

I'm Pierre Beaujean, a Ph.D. in quantum chemistry from the University of Namur (Belgium), and the main (and only) developer of this project. My goal is to leverage scaLAPACK(e) to overcome the computational and memory limitations of a single computer node.

I have no affiliation with netlib, MKL, or similar projects, and I'm not an expert in scaLAPACK. I'm just someone who needed this functionality in C and decided to share my solution with the world.

About this documentation¤

English isn't my first language, and to be honest, even in my native tongue, grammar isn't my strong suit. So, I enlisted the help of artificial intelligence to rephrase parts of this documentation. It's better for everyone this way... Trust me! 👼