Можно ли переключаться между библиотеками BLAS без перекомпиляции программы?
Например, могу ли я иметь АТЛАС, OpenBlas, MKL устанавливается на мой Ubuntu 14.04 одновременно и переключается между ними без перекомпиляции Caffe?
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
Этот подход, основанный на динамическом связывании, применим к любой другой общей библиотеке, на которую компилируется ваша программа.