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 と比較して美しくエレガントなインターフェイスのために使用され続けています。また、Mex ルーチンを介した MATLAB へのインターフェイスも提供します。いつも使っています。
インストール - プロローグ
残念ながら、インストール手順は十分に完成しているように見えますが、私の同僚のように初心者にとっては非常に苦痛です。私が思う理由は、初心者に優しくないからです。この投稿がギャップを埋めることを心から願っています。
インストールの混乱の主な原因は、MKL、ATLAS、ACML ライブラリなどの BLAS/LAPACK/FFTWのオプションのベンダー固有バージョンと一緒に言及されている BLAS、LAPACK、および FFTW の依存関係によるものだと思います。実際に何をすべきかの混乱を助長します。
実際のところ、これらの紛らわしいビットの大部分はオプションです。
最初に以下の簡単な手順を試し、それまでは他のすべてを無視することをお勧めします.
Ubuntu でのインストール手順
IT++ アーカイブ ファイルをダウンロードする
$ wget https://sourceforge.net/projects/itpp/files/latest -O itpp.tar.bz2
解凍してディレクトリを変更
$ tar -xjvf itpp.tar.bz2 && cd itpp-*
新しいサブディレクトリ「build1」と「build2」を作成します (cd
次の手順でそれらを作成します)。
$ mkdir build1 build2
LAPACK、BLAS、FFTW ライブラリがあることを確認してください。これは後の段階には影響しません。
$ sudo apt-get install liblapack-dev libblas-dev libfftw3-dev
ここで重要な注意点があります。Intel の MKL、AMD の ACML、ATLASなど、プロセッサのベンダー固有のライブラリを使用すると、より効率的なオプションとよく言われます。しかし、その効率には代償が伴います。登録 (MKL の場合)、ダウンロード、インストール、および最終的にリンカー スイッチをコンパイルして実行するたびにそれらを含めるように調整するためにかなりの時間を費やす必要があります。
主なインストール手順:以下の両方の
手順を実行して
ください。害はありません。個人的には、IT++ は両方をデフォルトのオプションとしてインストールする必要があると思います。単純に、将来いつ静的コンパイルが必要になるか分からないからです。これが、他のほとんどすべてのライブラリが両方のバージョンを PC にインストールする理由です。
A.共有ライブラリとして (*.so ファイル)
$ cd build1
$ cmake ..
$ make
$ make install
B.静的ライブラリとして (*.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
、すべてのファイルの後、常に switch を使用することです。
$ g++ testITPP.cpp -litpp
$./a.out
Hello, World!
The sum of first 100 integers is: 5050
./a.out
エラーが発生した場合は、sudo ldconfig
一度実行してライブラリ キャッシュを更新してください。
おまけ: 静的コンパイルとの闘い:
以前のコンパイルでは、デフォルトで共有ライブラリが使用され、PC 上の他のバイナリに依存するバイナリが生成されることに注意してください。つまり、上記のバイナリa.out
は、たとえば、IT++ がインストールされていない別の UNIX システムでは実行できません。これは、特に大学のクラスターやサーバーへの提出時に、ユーザーが大量の長時間の計算を実行できるようにするときに、問題を引き起こすことがよくあります。
回避策は、静的コンパイルを使用して、すべてのローカル依存関係を取り除くことです。しかし、これは通常、初心者には困難です。MKL の種類のライブラリの下にある IT++ では、静的コンパイルの方法を知っているだけで本当にイライラすることがあります。やり方と今日の時点で気付いたすべてのバグの良い要約は以下の通りです。
私。Basic BLAS/LAPACK/FFTW を使用した静的コンパイル:
これは最も単純なケースです。特に重要な変更点が 2 つあります。1つ-litpp
は になり-litpp_static
ます。2、新しいコンパイル スイッチ-static
。1 つ目は、バイナリに libitpp.so および libitpp_static.a という名前を付けるという IT++ の奇妙な選択の結果です。
また、動的コンパイルとは異なり、静的コンパイルには 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. MKL の BLAS/LAPACK/FFTW を使用した静的コンパイル:
MKL のベンダー固有のライブラリを使用した方がどれだけ速いかはまだわかりませんが、静的コンパイルは非常に苦痛です。MKL 自体の最初のインストールには、1 時間以上かかりました。正確な手順は他のベンダーのライブラリには適合しませんが、これから直面する実際の課題に備えることができます。
以下のほとんどは、表示されるエラー メッセージでは理解できません。その結果、それらは非常に煩わしく、解決するのが苦痛になります。以下にそれらをすべてリストしようとしています。うまくいけば、彼らはあなたの貴重な時間を大幅に節約します.
コンパイル中の循環依存: 最初のいくつかのライブラリは、-Wl,--start-group .... -Wl,--end-group
.
ベンダー固有の blas/lapack/fftw では、ベンダー固有のライブラリlibblas.a
liblapack.a
libfftw.a
など、それぞれの場所または同等のものを検索する必要がある場合があります。libmkl_core.a
ディレクトリの場所は、スイッチを使用して指定する必要があります-L/path/to/statics/
segmentation fault
コンパイルが成功した後でも、Aが発生する場合があります。この厄介な問題の理由は、libpthread.a
が完全に含まれていないことにあるようです。-lpthread
次に、スイッチを次のように囲むことにより、適切なアクションを強制する必要があります-Wl,--whole-archive -lpthread -Wl,--no-whole-archive
最後に、Ubuntu 16.04 で動作したバージョンはこれです。-llapack -lblas -lfftw
etc は別の名前の静的バイナリにバンドルされているため、何もないことに注意してください。
$ 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 インストールのガイドを書いてくれることを願っています。