Быстрая и простая установка и использование библиотеки IT++ в Linux/Windows?

IT++ - это популярная библиотека GPL (которую сейчас называют LGPL, но пока без признаков) для научных вычислений, особенно в области телекоммуникаций. Это было рекомендовано мне моими коллегами.

Кажется, трудно установить этот кусок библиотеки в моей системе Linux/Windows. И руководство по установке кажется сложным.

У меня есть гораздо больше, чем тратить время на эту установку. Может ли кто-нибудь сэкономить мне время с помощью быстрой установки и, если возможно, привет, мир! введите инструкции?

1 ответ

TL;DR

 $ wget https://sourceforge.net/projects/itpp/files/latest -O itpp.tar.bz2
 $ tar -xjvf itpp.tar.bz2 && cd itpp-*
 $ sudo apt-get install liblapack-dev libblas-dev libfftw3-dev
                 # Note: This is basic and recommended. MKL/ATLAS etc are
                 # platform-specialized, can give slightly better perf.

 $ mkdir build1 build2

 $ cd build1                   # DYNAMIC (*.so file)  
 $ cmake ..  
 $ make  
 $ make install  

 $ cd bulid2                   # STATIC (*.a file)
 $ cmake .. -DITPP_SHARED_LIB=off
 $ make
 $ make install

 # Note: The library installation is complete and is ready for both
 # static and dynamic compilations. But the subsequent run of a 
 # *static compilation* is relatively more difficult, see details below.

ВСТУПЛЕНИЕ

IT++ - это мощная библиотека числовых вычислений, популярная среди исследователей, работающих в области теории связи, предоставляющая матричные конструкции. В то время как другие библиотеки матриц относительно недавнего Eigen и т. Д. Набирают все большую популярность, он по-прежнему используется благодаря своему красивому и элегантному интерфейсу, обычно сравниваемому с MATLAB. Он также обеспечивает взаимодействие с MATLAB через процедуры Mex. Я пользуюсь этим все время.

УСТАНОВКА - Пролог

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

Я думаю, что основной источник путаницы в установке связан с зависимостями BLAS, LAPACK и FFTW, которые упоминаются наряду с необязательными, специфичными для производителя версиями BLAS/LAPACK/FFTW, такими как библиотеки MKL, ATLAS, ACML добавление к путанице того, что на самом деле должно быть сделано.

Дело в том, что большинство этих запутанных битов не являются обязательными!

Я бы рекомендовал сначала попробовать приведенные ниже быстрые инструкции и игнорировать все остальное до тех пор.

ИНСТРУКЦИЯ ПО МОНТАЖУ НА УБУНТУ

  1. Скачать файл архива IT++
    $ wget https://sourceforge.net/projects/itpp/files/latest -O itpp.tar.bz2

  2. Извлечь и изменить каталог
    $ tar -xjvf itpp.tar.bz2 && cd itpp-*

  3. Создайте новые подкаталоги "build1" и "build2" (мы будем cd к ним в следующих шагах) $ mkdir build1 build2

  4. Убедитесь, что у вас есть библиотеки LAPACK, BLAS, FFTW. Это не должно повлиять на более поздние стадии.
    $ sudo apt-get install liblapack-dev libblas-dev libfftw3-dev

Здесь важное предостережение: часто говорят, что более эффективным вариантом является использование библиотеки конкретного процессора вашего процессора, такой как Intel MKL, AMD ACML, ATLAS. Но эта эффективность стоит денег - вам нужно потратить значительное время на регистрацию (для MKL), загрузку, установку и, наконец, настройку переключателей компоновщика, чтобы они включались при каждой компиляции и запуске.

  1. Основные этапы установки:
    Пожалуйста, сделайте оба шага ниже. В этом нет никакого вреда, плюс я лично считаю, что IT++ должен установить обе версии по умолчанию. Просто потому, что вы никогда не знаете, когда вам потребуется статическая компиляция в будущем. Вот почему почти каждая другая библиотека устанавливает обе версии на ваш компьютер.

    A. Как общая библиотека (*.so файлы)

      $ cd build1  
      $ cmake ..  
      $ make  
      $ make install  
    

    Б. Как статическая библиотека (*.a файлы)

      $ cd bulid2
      $ cmake .. -DITPP_SHARED_LIB=off
      $ make
      $ make install
    

Во время cmake вы можете столкнуться с приведенными ниже ошибками, но они никогда не влияли на последующие этапы до успешного запуска отдельных программ IT++. Поэтому, пожалуйста, игнорируйте их. В будущем более поздние версии могут объявить / исправить их как ошибки. Текущая версия 4.3.1.

     CMake Warning at CMakeLists.txt:192 (message):
        BLAS library not found.

     CMake Warning at CMakeLists.txt:196 (message):
        LAPACK library not found.

     CMake Warning at CMakeLists.txt:200 (message):
        FFT library not found.

Проверьте свою установку с Hello,World!

Рассмотрим приведенный ниже пример программы testITPP.cpp

  #include<iostream>
  using namespace std;
  #include<itpp/itbase.h>
  using namespace itpp;

  int main()
  {
    vec x(100); // vec == Vec<double>
    double y;
    x=linspace(1,100,100);
    y=sum(x);
    cout<<"Hello, World! \n The sum of first 100 integers is: "<<y<<endl;
  }

Теперь главное при компиляции - это использовать -litpp переключаться все время, после всех файлов.

$ g++ testITPP.cpp -litpp
$./a.out 
Hello, World! 
The sum of first 100 integers is: 5050

Если ./a.out выдает ошибки, пожалуйста, запустите sudo ldconfig один раз обновить библиотечный кеш.



ДОПОЛНИТЕЛЬНО: Борьба со статической компиляцией:

Обратите внимание, что более ранняя компиляция использует разделяемые библиотеки по умолчанию и создает двоичный файл, который зависит от слишком большого количества других двоичных файлов на вашем ПК. То есть вышеупомянутый бинарный a.out не может работать в другой системе Unix без установленного IT++, например. Это часто создает проблемы, особенно при отправке на университетские кластеры и серверы, которые позволяют пользователям выполнять тяжелые и длительные вычисления.

Обходной путь - использовать статическую компиляцию, избавляя от всех локальных зависимостей. Но это обычно сложно для начинающих. С IT++ в виде библиотек MKL может быть очень сложно просто знать, как статически компилировать. Хорошее резюме того, как это сделать, а также все ошибки, которые я заметил на сегодняшний день, приведены ниже.

я. Статическая компиляция с помощью Basic BLAS/LAPACK/FFTW:

Это самый простой случай. Следует отметить два особенно важных изменения. Один -litpp становится -litpp_static, Во-вторых, новый переключатель компиляции -static, Первый - результат странного выбора IT++ назвать двоичные файлы как libitpp.so и libitpp_static.a.

Кроме того, в отличие от динамической компиляции, для статической компиляции может быть обязательным включение всех библиотек, кроме стандартных C++ (то есть -lc и -lm). Это в основном включает в себя -lblas -llapack -lfftw -lpthread а также -ldl,

В результате в вашем случае может работать одно из следующих:

$ g++ -static testITPP.cpp -litpp_static
 OR
$ g++ -static testITPP.cpp -litpp_static -llapack -lblas -lpthread
 OR
$ g++ sctest_PCCestimates.cpp -litpp_static \
       -llapack -lblas -lgomp -lpthread \
       -lgfortran -static -Wl,--allow-multiple-definition 

II. Статическая компиляция с использованием BLAS/LAPACK/FFTW от MKL:

Хотя мне еще предстоит увидеть, как быстрее использовать библиотеки MKL для конкретных поставщиков, статическая компиляция может быть очень болезненной. Первоначальная установка самого MKL заняла у меня больше часа. Даже если точные инструкции не подойдут для других библиотек вендоров, они должны подготовить вас к реальным проблемам, с которыми вы столкнетесь.

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

  1. Круговая зависимость во время компиляции: первые несколько библиотек, возможно, должны быть окружены -Wl,--start-group .... -Wl,--end-group,

  2. В зависимости от поставщика blas/lapack/fftw вам может потребоваться найти соответствующие libblas.aliblapack.alibfftw.a или их эквиваленты, такие как libmkl_core.a в вашей библиотеке конкретного поставщика. Расположение каталога должно быть предоставлено с помощью переключателя -L/path/to/statics/

  3. segmentation fault может встретиться даже после успешной компиляции. Причиной этой назойливой проблемы является то, что libpthread.a не полностью включен. Тогда вам нужно заставить соответствующие действия, окружив выключатель -lpthread как -Wl,--whole-archive -lpthread -Wl,--no-whole-archive

Наконец версия, которая работала для меня на Ubuntu 16.04, такова. Обратите внимание, что нет -llapack -lblas -lfftw и т. д., поскольку они связаны в статических двоичных файлах с разными именами.

$ g++ -static \  
        -L/opt/intel/compilers_and_libraries/linux/mkl/lib/intel64_lin/  
       testITPP.cpp  
        -Wl,--start-group \
        -litpp_static \
        -lmkl_intel_lp64 \
        -lmkl_sequential \
        -lmkl_core  -Wl,--end-group \
        -Wl,--whole-archive -lpthread -Wl,--no-whole-archive \
        -ldl

Наконец, несмотря на то, что у вас есть статический двоичный файл, успешно сгенерированный выше, вы можете получить предупреждение warning: Using 'dlopen' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking может появиться, но может быть проигнорировано, так как, по-видимому, решения не существует никогда! Это связано с общеизвестной проблемой, которая нам не нужна.

Надеясь, что кто-то еще напишет руководство по установке Windows/Visual-Studio.

Я думаю, что вы, может быть, хотели что-то подобное?

sudo apt-get install libitpp-dev libitpp8v5

Он использует базовый процесс установки ubuntu. Я использую ubuntu 18.04 LTS.

Другие вопросы по тегам