BLAS, Lapack and OpenMP
BLAS et LAPACK fournissent des routines d'algèbre linéaire tandis qu'OpenMP apporte des primitives pour le parallélisme en mémoire partagée, et ces bibliothèques existent en de nombreuses implémentations optimisées. Les différences d'API/ABI (LP64 vs ILP64, conventions Fortran, noms de symboles) et l'obligation qu'un même environnement utilise une seule implémentation rendent l'intégration délicate. Le packaging Python aggrave la situation car les roues vendent des bibliothèques natives (OpenBLAS, libomp, MKL), ce qui multiplie les copies, empêche le basculement à l'exécution et provoque des conflits de threads, des blocages et des résultats numériques erronés. Concrètement, NumPy et SciPy vendent des versions différentes d'OpenBLAS, PyTorch lie statiquement MKL et vend OpenMP, scikit-learn vend libomp/libgomp et a introduit threadpoolctl, et SciPy limite l'usage d'OpenMP à cause des risques. Les pistes d'atténuation comprennent des bibliothèques de démultiplexage (FlexiBLAS, libblastrampoline, interfaces SciPy), des paquets mutex comme dans conda, la publication de roues séparées pour OpenBLAS/OpenMP ou une évolution du modèle PyPI pour exprimer des dépendances système.