1

IT++は、特に電気通信分野における科学計算用の一般的な GPL ライブラリ ( LGPL であることが提案されていますが、現在のところ兆候はありません) です。これは同僚に勧められました。

このライブラリを Linux/Windows システムにインストールするのは難しいようです。そして、インストールガイドは難しそうです。

このインストールに時間をかける以外に、やるべきことがたくさんあります。いくつかの簡単なインストールと、可能であれば、こんにちは、世界で時間を節約できますか? タイプ指示?

4

2 に答える 2

5

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 でのインストール手順

  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 の MKLAMD の ACMLATLASなど、プロセッサのベンダー固有のライブラリを使用すると、より効率的なオプションとよく言われます。しかし、その効率には代償が伴います。登録 (MKL の場合)、ダウンロード、インストール、および最終的にリンカー スイッチをコンパイルして実行するたびにそれらを含めるように調整するためにかなりの時間を費やす必要があります。

  1. 主なインストール手順:以下の両方の
    手順を実行して ください。害はありません。個人的には、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 時間以上かかりました。正確な手順は他のベンダーのライブラリには適合しませんが、これから直面する実際の課題に備えることができます。

以下のほとんどは、表示されるエラー メッセージでは理解できません。その結果、それらは非常に煩わしく、解決するのが苦痛になります。以下にそれらをすべてリストしようとしています。うまくいけば、彼らはあなたの貴重な時間を大幅に節約します.

  1. コンパイル中の循環依存: 最初のいくつかのライブラリは、-Wl,--start-group .... -Wl,--end-group.

  2. ベンダー固有の blas/lapack/fftw では、ベンダー固有のライブラリlibblas.a liblapack.a libfftw.aなど、それぞれの場所または同等のものを検索する必要がある場合があります。libmkl_core.aディレクトリの場所は、スイッチを使用して指定する必要があります-L/path/to/statics/

  3. segmentation faultコンパイルが成功した後でも、Aが発生する場合があります。この厄介な問題の理由は、libpthread.aが完全に含まれていないことにあるようです。-lpthread次に、スイッチを次のように囲むことにより、適切なアクションを強制する必要があります-Wl,--whole-archive -lpthread -Wl,--no-whole-archive

最後に、Ubuntu 16.04 で動作したバージョンはこれです。-llapack -lblas -lfftwetc は別の名前の静的バイナリにバンドルされているため、何もないことに注意してください。

$ 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 インストールのガイドを書いてくれることを願っています。

于 2016-12-10T16:15:07.207 に答える
0

このようなものが欲しかったのではないでしょうか?

sudo apt-get install libitpp-dev libitpp8v5

基本的なubuntuインストールプロセスを使用しています。ubuntu 18.04 LTS を使用しています。

于 2019-06-14T12:10:13.727 に答える