Создание статического Armadillo с использованием OpenBLAS, ARPACK, LAPACK и SuperLU

У нас есть среда HPC с несколькими версиями большинства пакетов, что побудило нас разработать способ установки пакетов в уникальных местах и ​​использовать модули среды, чтобы программисты / исследователи могли определить, какие версии библиотек они используют при сборке. программу, запустить программу или и то, и другое. Есть ли относительно безболезненный способ выполнять сборки в этой среде? В моем случае мы используем OpenBLAS, ARPACK, LAPACK и SuperLU при создании броненосца. В моем случае я стреляю на броненосца-0.3.7. Было бы здорово, если бы использование переключателей, как это было в дни ./configure и make, сработало бы. Но все, что я нашел до сих пор, - это CMake сборки, и, похоже, сделать сборку довольно нетривиально.

О, да. И, кстати, выходная библиотека Armadillo должна быть статической.

Заранее спасибо за помощь. Первоначальный вопрос может быть немного расплывчатым, но я могу уточнить его, как хотите. Я просто не хотел писать роман по первому вопросу по этому поводу.


person Snidley    schedule 27.12.2019    source источник


Ответы (2)


В настоящее время существуют инструменты, позволяющие справиться со сложностью сборки этого научного программного обеспечения. Я бы посоветовал вам взглянуть на Spack или EasyBuild. Такой инструмент поможет вам сэкономить много времени за счет автоматического построения всех необходимых зависимостей, а также создания файлов модулей для ваших пользователей, чтобы они могли использовать созданное программное обеспечение.

person Xavier Delaruelle    schedule 27.12.2019
comment
Спасибо. Я посмотрю на них. Мы используем более старую версию ОС, чем рекомендуется - CentOS 6.x. Но я учту. - person Snidley; 27.12.2019

Файл CMakeList.txt и другие файлы, связанные с CMake, могут быть изменены в соответствии с вашими потребностями. Флаги определены в строке 48+, например set(ARMA_USE_LAPACK false) Переменные, относящиеся к библиотеке LAPACK, затем определяются в include(ARMA_FindLAPACK) в строке 250. Флаг включается в строке 347, если обнаружен Lapack.

Пользовательский путь, по которому находится LAPACK, можно указать в файле cmake_aux / ARMA_FindLAPACK.cmake. Если ваш настроенный путь сохранен как переменная среды как export PATHLAPACKLIB=/usr/lib/openblas-base, вы можете использовать его в файле ARMA_FindLAPACK.cmake, изменение строки 11 (см. Как получить переменную среды пользователя в CMake (Windows) и FIND_LIBRARY()):

message("Searching Lapack in $ENV{PATHLAPACKLIB}")
FIND_LIBRARY(LAPACK_LIBRARY
   NAMES ${LAPACK_NAMES}
   HINTS $ENV{PATHLAPACKLIB}
   NO_DEFAULT_PATH
)

Это не красивая модификация CMakefile, потому что она делает его непереносимым, так как его результат зависит от переменной среды. Но если вы собираетесь собрать и установить Armadillo раз и навсегда, это сработает. Не забывайте удалять файл CMakeCache.txt каждый раз, когда вы изменяете CMakeFile.txt, в противном случае он сохраняет некоторые следы предыдущих запусков cmake ., и похоже, что изменение не имеет последствий.

Чтобы сделать библиотеку статической, добавьте ключевое слово static к команде add_library() в строке 514 файла CMakeFile.txt, как показано в CMake - Создание статической библиотеки:

add_library( armadillo  STATIC ...)

Запуск cmake ., а затем make создает небольшой файл armadillo.a, поскольку большая часть исходного кода состоит из заголовков cpp. Наконец, instance1 компилируется как:

g++ -O2 -std=c++11 example1.cpp -o example1 -larmadillo -L/home/...../softs/armadillo-9.800.3/armadillo-9.800.3 -I/home/...../softs/armadillo-9.800.3/armadillo-9.800.3/include -lopenblas
person francis    schedule 28.12.2019