BLAS, Lapack and OpenMP
9 hours ago
- #linear-algebra
- #scientific-computing
- #python-libraries
- BLAS and LAPACK are key libraries for linear algebra in scientific computing, with optimized implementations like OpenBLAS and MKL offering 10x-100x performance improvements.
- OpenMP provides shared-memory parallel programming primitives, with common implementations including libgomp, libomp, and libiomp, often vendored in Python packages.
- Python packages such as NumPy, SciPy, and scikit-learn vendor BLAS/LAPACK and OpenMP libraries, leading to issues like multiple library copies, version conflicts, and threading problems.
- Challenges include API/ABI incompatibilities between BLAS/LAPACK implementations, mixing pthreads and OpenMP causing oversubscription, and difficulties in building from source or expressing dependencies.
- Demuxing libraries like FlexiBLAS, libblastrampoline, and SciPy's cython interfaces help manage multiple BLAS/LAPACK implementations by providing uniform APIs.
- Potential solutions include creating separate PyPI wheels for OpenBLAS/OpenMP, improving dependency metadata, and addressing packaging limitations to align with system package managers.