3.2.9: `heevr` routine not available in R's BLAS/LAPACK
We are compiling SCS as part of an R-package (similar to scs-r). As of version 3.2.9, the compilation fails on Windows using the default BLAS/LAPACK shipped with R (which are not easily modified), as these do not include the heevr routine now used in cones.c.
Do you see any possibility of compiling the latest version of SCS with BLAS/LAPACK still enabled that does not require the heevr routine?
Thanks for the amazing solver!
Interesting, I didn't know that R didn't ship a full lapack. Is it somehow an old version?
I guess we can try and detect that case and switch to heev, is that exposed? Is syevr also missing?
Alternatively we could disable the complex SD cones if you are not planning to use them?
Interesting, I didn't know that R didn't ship a full lapack. Is it somehow an old version?
It seems to be only on Windows that R comes with a reduced LAPACK library. This is also the LAPACK used by CRAN when compiling for Windows (AFAIK), so using excluded routines fails CRAN's package checks. (I believe e.g. RcppEigen, RcppArmadillo include their own BLAS/LAPACK versions).
These gists: https://gist.github.com/JorisChau/b31e66fc0e189927936aace1dffe1c11, https://gist.github.com/JorisChau/abe7be5331890111986af17d27a86dbb list the BLAS/LAPACK routines parsed from Rblas.dll/Rlapack.dll shipped with R-4.5.1 on Windows (using objdump).
I guess we can try and detect that case and switch to
heev, is that exposed? Issyevralso missing?
zheev, zheevd, dsyev, dsyevd, dsyevr, dsyevx are exposed. ssyev, zheevr, ssyevd, ssyevr appear to be missing (checked by compiling with -lRblas -lRlapack).
Alternatively we could disable the complex SD cones if you are not planning to use them?
We are only using real-valued cones (and are not planning to use complex cones) if that helps.
Thanks for the context! Tagging @araujoms who added the complex psd cone. Maybe we can swap to using zheev instead - is there much performance difference? If not then I suggest we swap.
I can do a benchmark; I wanted to do one anyway to check whether it's worth changing syev to syevr.
But honestly, I think this is a bug in R, it doesn't make sense to have a full LAPACK on Linux and Mac but a lobotomized one on Windows.