R обнаружение версии Blas - PullRequest
       5

R обнаружение версии Blas

22 голосов
/ 12 марта 2012

Есть ли способ определения версии BLAS, которую R использует изнутри R? Я использую Ubuntu, и у меня установлена ​​пара версий BLAS - я просто не знаю, какая из них "активна" с точки зрения R!

Мне известно о http://r.789695.n4.nabble.com/is-Rs-own-BLAS-td911515.html, когда Брайан Рипли сказал в июне 2006 года, что это невозможно, но что-то изменилось?

Ответы [ 3 ]

14 голосов
/ 12 марта 2012

Я думаю, что вы не можете. R будет построен на основе интерфейса BLAS , а сам R не определяет, какой пакет предоставляет фактическую библиотеку.

Вы можете посмотреть только на ldd вывод. На моем сервере это указывает на Атлас

edd@max:~$ ldd /usr/lib/R/bin/exec/R
    linux-vdso.so.1 =>  (0x00007fffc8ddb000)
    libR.so => /usr/lib/libR.so (0x00007f8be940c000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f8be91ef000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f8be8e4d000)
    libblas.so.3gf => /usr/lib/atlas-base/atlas/libblas.so.3gf (0x00007f8be88e4000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f8be8660000)
    libreadline.so.6 => /lib/libreadline.so.6 (0x00007f8be841d000)
    libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f8be81e1000)
    liblzma.so.2 => /usr/lib/liblzma.so.2 (0x00007f8be7fbf000)
    libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f8be7da6000)
    librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f8be7b9e000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f8be799a000)
    libgomp.so.1 => /usr/lib/x86_64-linux-gnu/libgomp.so.1 (0x00007f8be778b000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f8be99a5000)
    libgfortran.so.3 => /usr/lib/x86_64-linux-gnu/libgfortran.so.3 (0x00007f8be7475000)
    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f8be725f000)
    libtinfo.so.5 => /lib/libtinfo.so.5 (0x00007f8be7037000)
    libquadmath.so.0 => /usr/lib/x86_64-linux-gnu/libquadmath.so.0 (0x00007f8be6e01000)
edd@max:~$ 

, что имеет смысл, поскольку этот пакет, предоставляющий BLAS, получает наивысший приоритет по сравнению с пакетом Debian.

3 голосов
/ 17 января 2017

Частичный ответ для linux, если установлен lsof.

# on a system using openblas:
> grep('blas', system2('lsof', c('-p', Sys.getpid()), stdout=TRUE), value = TRUE)
[1] "R       282 docker  mem    REG   0,52 29998440     233 /usr/lib/libopenblasp-r0.2.12.so"


# on a system using R internal Blas:
> grep('blas', system2('lsof', c('-p', Sys.getpid()), stdout=TRUE), value = TRUE)
[1] "R       157 docker  mem    REG   0,44   180936     3105 /usr/local/lib/R/lib/libRblas.so"
1 голос
/ 11 июня 2018

Это решение работает, если вам достаточно знать, по какому пути находится библиотека BLAS.Например, я использую это решение, чтобы решить, загружать ли библиотеки пакетов для «нормальной» версии R или для версии OpenBLAS.

Конечно, вы не можете знать, где другие люди хранят свои библиотеки, поэтому для использования в пакете или общем коде это не подходит.Но для собственного обслуживания его можно использовать:

extSoftVersion()["BLAS"]
## [1] "/the/path/to/your/libblas.so"
...