Ad esempio, è possibile installare Atlas, OpenBlas, MKL sulla mia Ubuntu 14.04 contemporaneamente e passare da una all'altra senza ricompilare Caffe?È possibile passare tra le librerie BLAS senza ricompilare il programma?
risposta
Certo, bisogna averli installati, e il comando di Ubuntu/Debian problema
update-alternatives --config libblas.so.3
Sarai elenco di alternative numerati e potrebbe passare da uno all'altro con facilità
Link: https://wiki.debian.org/DebianScience/LinearAlgebraLibraries
Un'altra domanda che succede se costruisco OpenBlas in modo normale e con flag USE_OPENMP = 1? Posso passare da una all'altra? cioè posso passare da modifica/versione della libreria? – mrgloom
@mrgloom yes, ma dovrebbero essere pacchetti diversi, fornendo la stessa alternativa. Quindi 'update-alternatives' saprà su di loro –
Ma come posso costruirli come diversi pacchetti?Per esempio, se costruisco OpenBlas dal sorgente tramite 'make' e poi' make install PREFIX = your_installation_directory1' e poi compilo con 'make USE_OPENMP = 1' e' make install PREFIX = your_installation_directory2', posso 'update-alternatives' trovare i miei build in queste cartelle o come posso installare due build differenti della stessa lib nella directory lib predefinita di ubuntu tramite 'make install'? – mrgloom
Sì, è possibile. Hai solo bisogno di utilizzare il collegamento di librerie dinamiche. Il libblas.so.3
è un collegamento morbido per /etc/alternatives/libblas.so.3
Che a sua volta punta alla realizzazione BLAS
biblioteca
Ad esempio, se si installa Atlas
(sudo apt-get install libatlas3-base
):
/usr/lib/libblas.so.3 -> /etc/alternatives/libblas.so.3
/etc/alternatives/libblas.so.3 -> /usr/lib/atlas-base/atlas/libblas.so.3
mentre dopo l'installazione Openblas
(sudo apt-get install libopenblas-base
):
/usr/lib/libblas.so.3 -> /etc/alternatives/libblas.so.3
/etc/alternatives/libblas.so.3 -> /usr/lib/openblas-base/libblas.so.3
Naturalmente è possibile utilizzare il proprio collegamento build di libreria.
È anche possibile farlo senza modificare le impostazioni del sistema, ad esempio aggiungendo la libreria che si desidera utilizzare alle variabili di ambiente LD_PRELOAD
o LD_LIBRARY_PATH
. La prima libreria su questo percorso sarà quella usata per risolvere i simboli.
Ad esempio, è possibile eseguire con
LD_PRELOAD=/path/to/blas/lib.so ./my_executable_using_caffe
Si può vedere che questo approccio sarebbe estremamente utile come parte di uno script di benchmarking per le diverse implementazioni in quanto non influenza l'ambiente di benchmarking in sé. Per esempio (in bash):
my_libraries=/path/to/blas1.so /path/to/blas2.so
for lib in $my_libraries
do
LD_PRELOAD=${lib} ./my_executable_using_caffe
done
Questo approccio, sulla base di linking dinamico, vale per qualsiasi altro libreria condivisa il programma viene compilato con.
@Shai per confrontare diverse librerie BLAS con Caffe. – mrgloom
è un compito interessante. Se raggiungi delle conclusioni sarebbe bello se le condividessi qui. – Shai