scs icon indicating copy to clipboard operation
scs copied to clipboard

3.2.9: `heevr` routine not available in R's BLAS/LAPACK

Open JorisChau opened this issue 1 month ago • 2 comments

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!

JorisChau avatar Dec 11 '25 09:12 JorisChau

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?

bodono avatar Dec 12 '25 18:12 bodono

Alternatively we could disable the complex SD cones if you are not planning to use them?

bodono avatar Dec 12 '25 18:12 bodono

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? Is syevr also 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.

JorisChau avatar Dec 13 '25 19:12 JorisChau

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.

bodono avatar Dec 19 '25 16:12 bodono

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.

araujoms avatar Dec 19 '25 16:12 araujoms