[R-SIG-Mac] Change to BLAS (from default to Apple vecLib) doesn't report in sessionInfo()

Tomas Kalibera tom@@@k@||ber@ @end|ng |rom gm@||@com
Tue Jan 10 18:05:49 CET 2023


On 1/10/23 04:21, Kevin Ushey wrote:
> My suspicion is the code here:
>
> https://github.com/wch/r-source/blob/068a6a0d9d60b1ce42abc879900038649f4a929c/src/main/platform.c#L3358-L3363
>
> It seems that the call to 'realpath()' fails on the path reported via
> .dli_fname here, which (for me) is:
>
> /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
>
> And indeed, the library does not appear to exist at that location. I'm
> not sure if this is a real macOS bug or some property of how vecLib /
> macOS frameworks work, though.
>
> For posterity, I'm on macOS Ventura 13.1, running on an M1 macOS machine.

This is a feature of macOS since Big Sur 11.0.1, it has a dynamic-linker 
cache of system libraries. The dynamic linker knows how to get the files 
from the cache, but one cannot see them using regular file-based 
utilities such as realpath. Yes, I think we can fall back to the 
argument of realpath() when it returns ENOENT (but we know the library 
should exist as we got it from the dynamic linker).

More here: 
https://developer.apple.com/documentation/macos-release-notes/macos-big-sur-11_0_1-release-notes

I can reproduce the problem on my system. Now, what is interesting is 
that when R is rebuilt after the libraries have already been installed 
(e.g. when I use an uninstalled version of R linking to 
libRblas.vecLib.dylib from an installed R-devel snapshot build), the 
linker in the detection code reports:

/Library/Frameworks/R.framework/Versions/4.3-arm64/Resources/lib/libRblas.vecLib.dylib

which works fine with realpath(). But, when R is not re-built after the 
library is re-installed, I see what has been reported. It is not clear 
to me why the difference and possibly it means that, after the fix, 
users would see a bit unpredictably one from these:

BLAS: 
/Library/Frameworks/R.framework/Versions/4.3-arm64/Resources/lib/libRblas.vecLib.dylib
BLAS: 
/System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib

but that is still an improvement of what we get now and my intention was 
that the detection code output would be interpreted by a human, anyway.

Best
Tomas

>
>> sessionInfo()
> R version 4.2.1 (2022-06-23)
> Platform: aarch64-apple-darwin20 (64-bit)
> Running under: macOS Ventura 13.1
>
> Matrix products: default
> LAPACK: /Library/Frameworks/R.framework/Versions/4.2-arm64/Resources/lib/libRlapack.dylib
>
> tl;dr: perhaps R should allow for failures in 'realpath()' above, at
> least on macOS, and report the library path as gleaned directly from
> dladdr()?
>
> Thanks,
> Kevin
>
>
> On Tue, Jan 10, 2023 at 8:54 AM Clement Kent <clementfkent using gmail.com> wrote:
>> I experienced the same thing. I switched to libRblas.vecLib.dylib and got
>> the remarkable speedup
>> in matrix multiplication, but sessionInfo doersn't show that I'm using it.
>> MacBook Pro (14-inch, 2021)
>>
>> sessionInfo()
>> R version 4.2.2 (2022-10-31)
>> Platform: aarch64-apple-darwin20 (64-bit)
>> Running under: macOS Monterey 12.6.2
>>
>> Matrix products: default
>> LAPACK:
>> /Library/Frameworks/R.framework/Versions/4.2-arm64/Resources/lib/libRlapack.dylib
>>
>> Random number generation:
>>   RNG:     Mersenne-Twister
>>   Normal:  Inversion
>>   Sample:  Rounding
>>
>> locale:
>> [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
>>
>> attached base packages:
>> [1] datasets  parallel  utils     stats     graphics  grDevices methods
>> base
>>
>> other attached packages:
>> [1] showtext_0.9-5    showtextdb_3.0    sysfonts_0.8.8    data.table_1.14.6
>> nlme_3.1-160      MASS_7.3-58.1
>>
>> loaded via a namespace (and not attached):
>> [1] compiler_4.2.2  tools_4.2.2     grid_4.2.2      lattice_0.20-45
>> R 4.2.2 GUI 1.79 Big Sur ARM build (8160)
>>
>> On Mon, Jan 9, 2023 at 5:25 PM David Novgorodsky <
>> david.novgorodsky using gmail.com> wrote:
>>
>>> Hi all,
>>>
>>> First post, and my apologies if this was addressed already elsewhere, but
>>> did not seem so to me. This post is (I think) purely about the
>>> behavior of sessionInfo()
>>> after I switch the BLAS to Apple's Accelerate vecLib.
>>>
>>> I installed R 4.2.2 on macOS Monterey 12.6.2 (with an M1 chip)
>>> successfully. I run sessionInfo() with the following result:
>>>
>>> R version 4.2.2 (2022-10-31)
>>>
>>> Platform: aarch64-apple-darwin20 (64-bit)
>>>
>>> Running under: macOS Monterey 12.6.2
>>>
>>>
>>>
>>> Matrix products: default
>>>
>>> BLAS:
>>>
>>> /Library/Frameworks/R.framework/Versions/4.2-arm64/Resources/lib/libRblas.0.dylib
>>>
>>> LAPACK:
>>>
>>> /Library/Frameworks/R.framework/Versions/4.2-arm64/Resources/lib/libRlapack.dylib
>>>
>>>
>>>
>>> locale:
>>>
>>> [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
>>>
>>>
>>>
>>> attached base packages:
>>>
>>> [1] stats     graphics  grDevices utils     datasets  methods   base
>>>
>>>
>>>
>>> loaded via a namespace (and not attached):
>>>
>>> [1] compiler_4.2.2
>>>
>>> And then I run a small piece of test code (taken from somewhere, sorry,
>>> can't recall where):
>>>
>>> N <- 20000
>>> M <- 2000
>>> X <- matrix(rnorm(N*M),N)
>>> system.time(crossprod(X))
>>>
>>> with result
>>>
>>>> system.time(crossprod(X))
>>> user  system  elapsed
>>> 49.471  0.082  49.553
>>>
>>> Then I change my BLAS (using the vecLib supplied as part of the R
>>> installation package), e.g., in the Terminal app:
>>>
>>> cd /Library/Frameworks/R.framework/Resources/lib
>>> ln -sf libRblas.vecLib.dylib libRblas.dylib
>>>
>>> Afterwards, I restart R. Re-running the small piece of test code above
>>> yields
>>>
>>>> system.time(crossprod(X))
>>> user  system  elapsed
>>> 0.339  0.015  0.197
>>>
>>> which suggests to me that the switch to vecLib did, indeed, succeed.
>>>
>>> However, sessionInfo() does something unexpected -- it no longer reports
>>> anything for the BLAS row:
>>>
>>> R version 4.2.2 (2022-10-31)
>>>
>>> Platform: aarch64-apple-darwin20 (64-bit)
>>>
>>> Running under: macOS Monterey 12.6.2
>>>
>>>
>>>
>>> Matrix products: default
>>>
>>> LAPACK:
>>>
>>> /Library/Frameworks/R.framework/Versions/4.2-arm64/Resources/lib/libRlapack.dylib
>>>
>>>
>>>
>>> locale:
>>>
>>> [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
>>>
>>>
>>>
>>> attached base packages:
>>>
>>> [1] stats     graphics  grDevices utils     datasets  methods   base
>>>
>>>
>>>
>>> loaded via a namespace (and not attached):
>>>
>>> [1] compiler_4.2.2
>>>
>>> Anyone have any leads on whether a) this is a problem, and b) how to fix it
>>> (if so)? Seems this has been the case at least for a couple of years, at
>>> least based on an only tangentially related past thread (link here
>>> <https://stat.ethz.ch/pipermail/r-sig-mac/2020-November/013794.html>)
>>> where
>>> the responder implicitly shows the same thing -- faster matrix
>>> multiplication, but not reporting of BLAS in sessionInfo().
>>>
>>> Thanks,
>>> David
>>>
>>>          [[alternative HTML version deleted]]
>>>
>>> _______________________________________________
>>> R-SIG-Mac mailing list
>>> R-SIG-Mac using r-project.org
>>> https://stat.ethz.ch/mailman/listinfo/r-sig-mac
>>>
>>          [[alternative HTML version deleted]]
>>
>> _______________________________________________
>> R-SIG-Mac mailing list
>> R-SIG-Mac using r-project.org
>> https://stat.ethz.ch/mailman/listinfo/r-sig-mac
> _______________________________________________
> R-SIG-Mac mailing list
> R-SIG-Mac using r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-sig-mac



More information about the R-SIG-Mac mailing list