Можно ли переключаться между библиотеками 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Этот подход, основанный на динамическом связывании, применим к любой другой общей библиотеке, на которую компилируется ваша программа.