Можно ли переключаться между библиотеками BLAS без перекомпиляции программы?


Например, могу ли я иметь АТЛАС, OpenBlas, MKL устанавливается на мой Ubuntu 14.04 одновременно и переключается между ними без перекомпиляции Caffe?

3 8

3 ответа:

Конечно, вы должны их установить, и на Ubuntu / Debian выдать команду

update-alternatives --config libblas.so.3

Вы получите пронумерованный список альтернатив и сможете легко переключаться между ними

Ссылка: https://wiki.debian.org/DebianScience/LinearAlgebraLibraries

Да, можешь. Вам просто нужно использовать динамическое связывание библиотек. libblas.so.3 - это мягкая связь с /etc/alternatives/libblas.so.3 Что в свою очередь указывает на реализацию библиотеки BLAS

Например, если вы устанавливаете 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

В то время как после установки 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

Конечно, вы можете использовать свою собственную мягкую ссылку на сборки вашей библиотеки.

Вы также можете сделать это без изменения общесистемных настроек, например, добавив библиотеку, которую вы хотите использовать, к переменным окружения LD_PRELOAD или LD_LIBRARY_PATH. Первая библиотека на этом пути будет использоваться для разрешения символов против.

Например, вы можете работать с

LD_PRELOAD=/path/to/blas/lib.so ./my_executable_using_caffe

Вы можете видеть, что этот подход был бы чрезвычайно полезен как часть сценария бенчмаркинга для различных реализаций, так как он не влияет на саму среду бенчмаркинга. Для пример (в Баш):

my_libraries=/path/to/blas1.so /path/to/blas2.so

for lib in $my_libraries
do
  LD_PRELOAD=${lib} ./my_executable_using_caffe
done

Этот подход, основанный на динамическом связывании, применим к любой другой общей библиотеке, на которую компилируется ваша программа.