#1067732 libmkl-rt not ABI compatible with update-alternatives

#1067732#5
Date:
2024-03-26 07:54:43 UTC
From:
To:
Dear Maintainer,

This package is listed in update-alternatives for providing blas and lapack
implementations, however it is known that Intel and GNU blas implementations
are not ABI compatible. The difference comes from how complex functions in
Fortran return their value (by value or as a first argument). See section about
Fortran bindings in

https://www.open-std.org/JTC1/SC22/WG21/docs/papers/2022/p1674r2.html

Test demonstrating the incompatibility:

echo "
#include <iostream>
#include <complex>
extern \"C\" {
void cdotu_(std::complex<float> *, const int *, const std::complex<float> *,
const int *,
            const std::complex<float> *, const int *);
}
int main() {
    const int one=1;
    std::complex<float> x(1.,2.), y(1.,-2.), result;
    cdotu_(&result, &one, &x, &one, &y, &one);
    std::cout<<result<<std::endl;
    return (fabs(result.real() - 5.) < 1e-8);
}
" > test_blas_cplx_abi.cc


g++ test_blas_cplx_abi.cc -lopenblas -o test_blas_cplx_abi_openblas
g++ test_blas_cplx_abi.cc -lmkl_rt -o test_blas_cplx_abi_mkl_rt


Results:
$ ./test_blas_cplx_abi_openblas
(0,0)
$ ./test_blas_cplx_abi_mkl_rt
(5,0)

The same issue affects both libblas and liblapack alternatives.

Best regards
Kostas