Domanda

C'è un modo per rilevare la versione di Blas che r utilizza da dentro r?Sto usando Ubuntu, e ho un paio di versioni Blas installate - solo non so quale sia "attiva" dal punto di vista di R!

Sono a conoscenza di http://r.789695.n4.nabble.com / is-rs-proprio-blas-td911515.html dove disse Brian Ripley nel giugno 2006 che non era possibile - ma hanno cambiato le cose?

È stato utile?

Soluzione

Penso che non puoi.R sarà costruito contro l'interfaccia BLAS , e r sé non è quale pacchetto fornisce la libreria effettiva.

Puoi solo guardare l'output ldd.Sul mio server, questo punta ad Atlas

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:~$ 
.

che ha senso in quanto questo pacchetto Blas-Forning ottiene la massima priorità per l'imballaggio Debian.

Altri suggerimenti

Risposta parziale per Linux se LSOF è installato.

# 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"
.

Questa soluzione funziona se è sufficiente per il tuo sapere in quale percorso è possibile trovare la Blas Bliss.Ad esempio, utilizzo questa soluzione per decidere se caricare le librerie del pacchetto per la versione "normale" o la versione Openblas.

Certo, non puoi sapere dove altre persone memorizzano le loro librerie, quindi per l'uso in un pacchetto o in un codice condiviso non è adatto.Ma per la manutenzione propria può essere utilizzato:

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

in r, digitare:

sessionInfo()
.

Quale dovrebbe darti tra le altre cose anche il Blas usato.

Ad esempio, sulla mia macchina ottengo:

Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 18.04.3 LTS

Matrix products: default
BLAS:   /usr/lib/x86_64-linux-gnu/openblas/libblas.so.3
LAPACK: /usr/lib/x86_64-linux-gnu/libopenblasp-r0.2.20.so

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C               LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8     LC_MONETARY=en_US.UTF-8   
 [6] LC_MESSAGES=en_US.UTF-8    LC_PAPER=en_US.UTF-8       LC_NAME=C                  LC_ADDRESS=C               LC_TELEPHONE=C            
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

loaded via a namespace (and not attached):
[1] compiler_3.6.1    Matrix_1.2-17     tools_3.6.1       Rcpp_1.0.2        grid_3.6.1        data.table_1.12.2 packrat_0.5.0     lattice_0.20-38  
[9] stm_1.3.3        

.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top