Ramon Diaz-Uriarte
2023-Dec-30 18:51 UTC
[R-sig-Debian] custom built R will not change BLAS/LAPACK with update-alternatives
Thanks. I answer below. And now I realize I must have read this not paying enough attention: "You can specify a particular BLAS library via a value for the configuration option --with-blas. If this is given with no =, its value is taken from the environment variable BLAS_LIBS, set for example in config.site. If neither the option nor the environment variable supply a value, a search is made for a suitable59 BLAS." (https://cran.r-project.org/doc/manuals/r-devel/R-admin.html#BLAS ), and footnote 59 says: "The search order is currently OpenBLAS, BLIS, ATLAS, platform-specific choices (see below) and finally a generic libblas." It is in the configure script of R: line 46396 searches for OpenBLAS, on 46453 it looks for BLIS, later (46510) for ATLAS, etc. Indeed, that is what I see looking more carefully at the output. If I have OpenBLAS, then it locates it immediately: configure: searching for an external BLAS configure: searching for BLAS in default libraries checking for dgemm_... no configure: searching for OpenBLAS checking for sgemm_ in -lopenblas... yes checking whether double complex BLAS can be used... yes If I don't, but I have ATLAS, it does this (OpenBLAS, then BLIS, then ATLAS) configure: searching for an external BLAS configure: searching for BLAS in default libraries checking for dgemm_... no configure: searching for OpenBLAS checking for sgemm_ in -lopenblas... no configure: searching for BLIS checking for sgemm_ in -lblis... no configure: searching for ATLAS checking for ATL_xerbla in -latlas... yes So I think what I am seeing is expected. But this would suggest your build machine did not have OpenBLAS, but it seems it did (from your ldd output); or else, maybe your machine had a config.site or BLAS_LIBS? On Sat, 30-December-2023, at 19:16:42, Dirk Eddelbuettel <edd at debian.org> wrote:> If you match the exact build-deps I use and the exact options from > debian/rules you should end up with the exact same output. As that is whay > you desire but do not get we need to drill down into where it deviates. FWIW > last time I build the Debian the (relevant) part (of the large) configure log > was below. What do you get for BLAS/LAPACK? > > > R is now configured for x86_64-pc-linux-gnu > > Source directory: . > Installation directory: /usr > > C compiler: gcc -g -O2 -ffile-prefix-map=/build/r-base-4.3.2=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -Wdate-time -D_FORTIFY_SOURCE=2 > Fortran fixed-form compiler: gfortran -g -O2 -ffile-prefix-map=/build/r-base-4.3.2=. -fstack-protector-strong -fstack-clash-protection -fcf-protection > > Default C++ compiler: g++ -std=gnu++17 -g -O2 -ffile-prefix-map=/build/r-base-4.3.2=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -Wdate-time -D_FORTIFY_SOURCE=2 > C++11 compiler: g++ -std=gnu++11 -g -O2 -ffile-prefix-map=/build/r-base-4.3.2=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -Wdate-time -D_FORTIFY_SOURCE=2 > C++14 compiler: g++ -std=gnu++14 -g -O2 -ffile-prefix-map=/build/r-base-4.3.2=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -Wdate-time -D_FORTIFY_SOURCE=2 > C++17 compiler: g++ -std=gnu++17 -g -O2 -ffile-prefix-map=/build/r-base-4.3.2=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -Wdate-time -D_FORTIFY_SOURCE=2 > C++20 compiler: g++ -std=gnu++20 -g -O2 -ffile-prefix-map=/build/r-base-4.3.2=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -Wdate-time -D_FORTIFY_SOURCE=2 > C++23 compiler: g++ -std=gnu++23 -g -O2 -ffile-prefix-map=/build/r-base-4.3.2=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -Wdate-time -D_FORTIFY_SOURCE=2 > Fortran free-form compiler: gfortran -g -O2 -ffile-prefix-map=/build/r-base-4.3.2=. -fstack-protector-strong -fstack-clash-protection -fcf-protection > Obj-C compiler: > > Interfaces supported: X11, tcltk > External libraries: pcre2, readline, BLAS(generic), LAPACK(generic), curl > Additional capabilities: PNG, JPEG, TIFF, NLS, cairo, ICU > Options enabled: shared R library, R profiling, memory profiling > > Capabilities skipped: > Options not enabled: shared BLAS > > Recommended packages: no > >My configure log (from my "for real" builds) ============================================= R is now configured for x86_64-pc-linux-gnu Source directory: . Installation directory: /usr/local C compiler: gcc -O2 -g -march=native -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -Wdate-time -D_FORTIFY_SOURCE=2 Fortran fixed-form compiler: gfortran -g -O2 -march=native -fstack-protector-strong -fstack-clash-protection -fcf-protection Default C++ compiler: g++ -std=gnu++17 -O2 -g -march=native -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -Wdate-time -D_FORTIFY_SOURCE=2 C++11 compiler: g++ -std=gnu++11 -O2 -g -march=native -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -Wdate-time -D_FORTIFY_SOURCE=2 C++14 compiler: g++ -std=gnu++14 -O2 -g -march=native -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -Wdate-time -D_FORTIFY_SOURCE=2 C++17 compiler: g++ -std=gnu++17 -O2 -g -march=native -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -Wdate-time -D_FORTIFY_SOURCE=2 C++20 compiler: g++ -std=gnu++20 -O2 -g -march=native -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -Wdate-time -D_FORTIFY_SOURCE=2 C++23 compiler: g++ -std=gnu++23 -O2 -g -march=native -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -Wdate-time -D_FORTIFY_SOURCE=2 Fortran free-form compiler: gfortran -g -O2 -march=native -fstack-protector-strong -fstack-clash-protection -fcf-protection Obj-C compiler: Interfaces supported: X11, tcltk External libraries: pcre2, readline, BLAS(OpenBLAS), LAPACK(in blas), curl Additional capabilities: PNG, JPEG, TIFF, NLS, cairo, ICU Options enabled: shared R library, R profiling Capabilities skipped: Options not enabled: shared BLAS, memory profiling Recommended packages: yes Key differences: =============== - I am not using "-ffile-prefix-map" (but I can't imagine that being the cause of the issue) - I am configuring without memory profiling (but enabling memory profiling did not change things) - I am using "march=native" (but this is not the cause, since removing it gives me the same issues) - And the OpenBLAS, of course.> Despite the display of 'shared BLAS' not enabled, I still have > > root at fb498fe53700:/# ldd /usr/lib/R/modules/lapack.so > linux-vdso.so.1 (0x00007ffcb09c7000) > libR.so => /lib/libR.so (0x00007ff7dd7f1000) > liblapack.so.3 => /lib/x86_64-linux-gnu/liblapack.so.3 (0x00007ff7dd0f6000) > libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007ff7dd017000) > libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007ff7dce36000) > libblas.so.3 => /lib/x86_64-linux-gnu/libblas.so.3 (0x00007ff7dcdd3000) > libreadline.so.8 => /lib/x86_64-linux-gnu/libreadline.so.8 (0x00007ff7dcd7b000) > libpcre2-8.so.0 => /lib/x86_64-linux-gnu/libpcre2-8.so.0 (0x00007ff7dccdf000) > liblzma.so.5 => /lib/x86_64-linux-gnu/liblzma.so.5 (0x00007ff7dccb0000) > libbz2.so.1.0 => /lib/x86_64-linux-gnu/libbz2.so.1.0 (0x00007ff7dcc9d000) > libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007ff7dcc7e000) > libtirpc.so.3 => /lib/x86_64-linux-gnu/libtirpc.so.3 (0x00007ff7dcc50000) > libicuuc.so.72 => /lib/x86_64-linux-gnu/libicuuc.so.72 (0x00007ff7dca52000) > libicui18n.so.72 => /lib/x86_64-linux-gnu/libicui18n.so.72 (0x00007ff7dc726000) > libgomp.so.1 => /lib/x86_64-linux-gnu/libgomp.so.1 (0x00007ff7dc6de000) > /lib64/ld-linux-x86-64.so.2 (0x00007ff7ddc74000) > libopenblas.so.0 => /lib/x86_64-linux-gnu/libopenblas.so.0 (0x00007ff7da3f0000) > libgfortran.so.5 => /lib/x86_64-linux-gnu/libgfortran.so.5 (0x00007ff7da126000) > libtinfo.so.6 => /lib/x86_64-linux-gnu/libtinfo.so.6 (0x00007ff7da0f3000) > libgssapi_krb5.so.2 => /lib/x86_64-linux-gnu/libgssapi_krb5.so.2 (0x00007ff7da0a1000) > libicudata.so.72 => /lib/x86_64-linux-gnu/libicudata.so.72 (0x00007ff7d82cf000) > libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007ff7d80b5000) > libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007ff7d8095000) > libquadmath.so.0 => /lib/x86_64-linux-gnu/libquadmath.so.0 (0x00007ff7d804e000) > libkrb5.so.3 => /lib/x86_64-linux-gnu/libkrb5.so.3 (0x00007ff7d7f74000) > libk5crypto.so.3 => /lib/x86_64-linux-gnu/libk5crypto.so.3 (0x00007ff7d7f47000) > libcom_err.so.2 => /lib/x86_64-linux-gnu/libcom_err.so.2 (0x00007ff7d7f41000) > libkrb5support.so.0 => /lib/x86_64-linux-gnu/libkrb5support.so.0 (0x00007ff7d7f33000) > libkeyutils.so.1 => /lib/x86_64-linux-gnu/libkeyutils.so.1 (0x00007ff7d7f2c000) > libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007ff7d7f1b000) > root at fb498fe53700:/# ls -l /lib/x86_64-linux-gnu/liblapack.so.3 > lrwxrwxrwx 1 root root 49 Nov 27 2022 /lib/x86_64-linux-gnu/liblapack.so.3 -> /etc/alternatives/liblapack.so.3-x86_64-linux-gnu > root at fb498fe53700:/# ls -l /lib/x86_64-linux-gnu/libblas.so.3 > lrwxrwxrwx 1 root root 47 Nov 27 2022 /lib/x86_64-linux-gnu/libblas.so.3 -> /etc/alternatives/libblas.so.3-x86_64-linux-gnu > root at fb498fe53700:/#~/tmp/R4/R-4.3.2-85742/modules $ ldd lapack.so linux-vdso.so.1 (0x00007ffd96786000) libR.so => /usr/lib/libR.so (0x00007f9d9d174000) libopenblas.so.0 => /usr/lib/x86_64-linux-gnu/libopenblas.so.0 (0x00007f9d9ace0000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f9d9ac01000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f9d9aa1f000) libblas.so.3 => /usr/lib/x86_64-linux-gnu/libblas.so.3 (0x00007f9d9a9a8000) libreadline.so.8 => /lib/x86_64-linux-gnu/libreadline.so.8 (0x00007f9d9a951000) libpcre2-8.so.0 => /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0 (0x00007f9d9a8b9000) liblzma.so.5 => /lib/x86_64-linux-gnu/liblzma.so.5 (0x00007f9d9a891000) libbz2.so.1.0 => /lib/x86_64-linux-gnu/libbz2.so.1.0 (0x00007f9d9a87e000) libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f9d9a861000) libtirpc.so.3 => /lib/x86_64-linux-gnu/libtirpc.so.3 (0x00007f9d9a832000) libicuuc.so.72 => /usr/lib/x86_64-linux-gnu/libicuuc.so.72 (0x00007f9d9a62b000) libicui18n.so.72 => /usr/lib/x86_64-linux-gnu/libicui18n.so.72 (0x00007f9d9a2ef000) libgomp.so.1 => /usr/lib/x86_64-linux-gnu/libgomp.so.1 (0x00007f9d9a29e000) /lib64/ld-linux-x86-64.so.2 (0x00007f9d9d60d000) libgfortran.so.5 => /usr/lib/x86_64-linux-gnu/libgfortran.so.5 (0x00007f9d99fcb000) libtinfo.so.6 => /lib/x86_64-linux-gnu/libtinfo.so.6 (0x00007f9d99f9a000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f9d99f93000) libgssapi_krb5.so.2 => /usr/lib/x86_64-linux-gnu/libgssapi_krb5.so.2 (0x00007f9d99f40000) libicudata.so.72 => /usr/lib/x86_64-linux-gnu/libicudata.so.72 (0x00007f9d9816e000) libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f9d97f18000) libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f9d97ef4000) libkrb5.so.3 => /usr/lib/x86_64-linux-gnu/libkrb5.so.3 (0x00007f9d97e17000) libk5crypto.so.3 => /usr/lib/x86_64-linux-gnu/libk5crypto.so.3 (0x00007f9d97de7000) libcom_err.so.2 => /lib/x86_64-linux-gnu/libcom_err.so.2 (0x00007f9d97de1000) libkrb5support.so.0 => /usr/lib/x86_64-linux-gnu/libkrb5support.so.0 (0x00007f9d97dd2000) libkeyutils.so.1 => /lib/x86_64-linux-gnu/libkeyutils.so.1 (0x00007f9d97dcb000) libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007f9d97db8000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f9d97db3000) Interesting, you also have libopenblas.so.0 (in a different position).> > the /etc/alternatives mechanism you are after. (That was from rocker/r-base, > a quick way for me to get to clean and current Debian build.)ls -l /usr/lib/x86_64-linux-gnu/liblapack.so.3 lrwxrwxrwx 1 root root 49 Mar 28 2022 /usr/lib/x86_64-linux-gnu/liblapack.so.3 -> /etc/alternatives/liblapack.so.3-x86_64-linux-gnu And that is the one from OpenBLAS ls -l /etc/alternatives/liblapack.so.3-x86_64-linux-gnu lrwxrwxrwx 1 root root 56 Dec 30 20:44 /etc/alternatives/liblapack.so.3-x86_64-linux-gnu -> /usr/lib/x86_64-linux-gnu/openblas-openmp/liblapack.so.3 For libblas: ls -l /usr/lib/x86_64-linux-gnu/libblas.so.3 lrwxrwxrwx 1 root root 47 Mar 28 2022 /usr/lib/x86_64-linux-gnu/libblas.so.3 -> /etc/alternatives/libblas.so.3-x86_64-linux-gnu ls -l /etc/alternatives/libblas.so.3-x86_64-linux-gnu lrwxrwxrwx 1 root root 54 Dec 30 20:44 /etc/alternatives/libblas.so.3-x86_64-linux-gnu -> /usr/lib/x86_64-linux-gnu/openblas-openmp/libblas.so.3 To further try to understand, I've uninstalled openblas, but left atlas: Selection Path Priority Status ------------------------------------------------------------ * 0 /usr/lib/x86_64-linux-gnu/atlas/libblas.so.3 35 auto mode 1 /usr/lib/x86_64-linux-gnu/atlas/libblas.so.3 35 manual mode 2 /usr/lib/x86_64-linux-gnu/blas/libblas.so.3 10 manual mode And then, configure shows its looking for this. configure: searching for an external BLAS configure: searching for BLAS in default libraries checking for dgemm_... no configure: searching for OpenBLAS checking for sgemm_ in -lopenblas... no configure: searching for BLIS checking for sgemm_ in -lblis... no configure: searching for ATLAS checking for ATL_xerbla in -latlas... yes And External libraries: pcre2, readline, BLAS(ATLAS), LAPACK(generic), curl ldd now shows ~/tmp/Rpt/R-patched/modules $ ldd lapack.so linux-vdso.so.1 (0x00007ffd83045000) libR.so => /usr/lib/libR.so (0x00007f89196e9000) liblapack.so.3 => /usr/lib/x86_64-linux-gnu/liblapack.so.3 (0x00007f8918fb5000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f8918ed6000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f8918cf4000) libblas.so.3 => /usr/lib/x86_64-linux-gnu/libblas.so.3 (0x00007f8918cb2000) libreadline.so.8 => /lib/x86_64-linux-gnu/libreadline.so.8 (0x00007f8918c59000) libpcre2-8.so.0 => /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0 (0x00007f8918bc1000) liblzma.so.5 => /lib/x86_64-linux-gnu/liblzma.so.5 (0x00007f8918b99000) libbz2.so.1.0 => /lib/x86_64-linux-gnu/libbz2.so.1.0 (0x00007f8918b86000) libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f8918b69000) libtirpc.so.3 => /lib/x86_64-linux-gnu/libtirpc.so.3 (0x00007f8918b3a000) libicuuc.so.72 => /usr/lib/x86_64-linux-gnu/libicuuc.so.72 (0x00007f8918933000) libicui18n.so.72 => /usr/lib/x86_64-linux-gnu/libicui18n.so.72 (0x00007f89185f7000) libgomp.so.1 => /usr/lib/x86_64-linux-gnu/libgomp.so.1 (0x00007f89185a6000) /lib64/ld-linux-x86-64.so.2 (0x00007f8919b82000) libatlas.so.3 => /usr/lib/x86_64-linux-gnu/libatlas.so.3 (0x00007f8918226000) libgfortran.so.5 => /usr/lib/x86_64-linux-gnu/libgfortran.so.5 (0x00007f8917f53000) libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f8917f2d000) libtinfo.so.6 => /lib/x86_64-linux-gnu/libtinfo.so.6 (0x00007f8917efc000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f8917ef7000) libgssapi_krb5.so.2 => /usr/lib/x86_64-linux-gnu/libgssapi_krb5.so.2 (0x00007f8917ea4000) libicudata.so.72 => /usr/lib/x86_64-linux-gnu/libicudata.so.72 (0x00007f89160d2000) libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f8915e7a000) libkrb5.so.3 => /usr/lib/x86_64-linux-gnu/libkrb5.so.3 (0x00007f8915d9f000) libk5crypto.so.3 => /usr/lib/x86_64-linux-gnu/libk5crypto.so.3 (0x00007f8915d6f000) libcom_err.so.2 => /lib/x86_64-linux-gnu/libcom_err.so.2 (0x00007f8915d69000) libkrb5support.so.0 => /usr/lib/x86_64-linux-gnu/libkrb5support.so.0 (0x00007f8915d5a000) libkeyutils.so.1 => /lib/x86_64-linux-gnu/libkeyutils.so.1 (0x00007f8915d51000) libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007f8915d40000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f8915d3b000) Now we see libatlas. R.> > Dirk-- Ramon Diaz-Uriarte Department of Biochemistry, Lab B-31 Facultad de Medicina Universidad Aut?noma de Madrid Arzobispo Morcillo, 4 28029 Madrid Spain Phone: +34-91-497-2412 Email: rdiaz02 at gmail.com r.diaz at uam.es ramon.diaz at iib.uam.es https://ligarto.org/rdiaz
Dirk Eddelbuettel
2023-Dec-30 21:45 UTC
[R-sig-Debian] custom built R will not change BLAS/LAPACK with update-alternatives
What blas/lapack -dev libraries do you installed when you build? I varied this over the two+ decades for the Debian build but any consistent pair of LAPACK and BLAS should work. From the aforementioned build log: Get: 150 http://ftp.us.debian.org/debian sid/main amd64 libblas3 amd64 3.11.0-2 [149 kB] Get: 151 http://ftp.us.debian.org/debian sid/main amd64 libblas-dev amd64 3.11.0-2 [158 kB] [...] Get: 227 http://ftp.us.debian.org/debian sid/main amd64 liblapack3 amd64 3.11.0-2 [2323 kB] Get: 228 http://ftp.us.debian.org/debian sid/main amd64 liblapack-dev amd64 3.11.0-2 [4631 kB] [...] Setting up libblas3:amd64 (3.11.0-2) ... update-alternatives: using /usr/lib/x86_64-linux-gnu/blas/libblas.so.3 to provide /usr/lib/x86_64-linux-gnu/libblas.so.3 (libblas.so.3-x86_64-linux-gnu) in auto mode [...] Setting up liblapack3:amd64 (3.11.0-2) ... update-alternatives: using /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3 to provide /usr/lib/x86_64-linux-gnu/liblapack.so.3 (liblapack.so.3-x86_64-linux-gnu) in auto mode I use libblas-dev, liblapack-dev as the Build-Depends in the chroot. I think these are the generic one, they provide a fallback. (And run-time I think I am defaulting to OpenBLAS most of the time.) FWIW I always found --with-blas="-lblas" --with-lapack="-llapack" a little suspicious, but maybe that is just me if this works for you we are where we wanted to be and all is good? Dirk -- dirk.eddelbuettel.com | @eddelbuettel | edd at debian.org