ビルドの構成

ビルドの構成

root(またはsudo)アクセス権を持たないリモート(Debian squeeze)システムに特定の(プライベート、デジタル)Pythonモジュールをインストールしたいと思います。 python-devパッケージがインストールされていないので、Python 2.7をローカルにコンパイルしてインストールしました(./configure --prefix=$HOME/rtを使用)。また必須なので、setup.pyの--userオプションを使用してnumpy、scipy、およびtinyarrayをインストールしました。後で問題なくモジュールを取り付けました。しかし、Pythonにモジュールをインポートした後、次のメッセージが表示されます。

RuntimeWarning:SciPyのインストールはUMFPACKを使用しません。代わりに、SciPyは付属のSuperLuバージョンを使用します。この場合、パフォーマンスが非常に低下する可能性があります。

実は競技力はあまりありませんでした。さらなる調査により、このモジュールがumfpackとMUMPSの使用をサポートしていることがわかりました。どちらも許可されていますが、他のシステムではMUMPSがわずかに優れたパフォーマンスを発揮することがわかりました。私のインストールも成功しませんでした。 umfpackに関しては、もはや存在しないscipyのscipackに加えて、インストール方法に関する情報が見つかりませんでした。

それでMUMPSをインストールしてみました。

モジュールのインストールファイルから:

ビルドの構成

インストールスクリプトは、LAPACKとBLAS、およびオプションでMUMPSを接続する方法を知る必要があります。デフォルトでは、LAPACKとBLASは一般的な名前で見つけることができると仮定します。デフォルトでは、MUMPSはlibmumps-scotch-devパッケージをインストールするときにDebianベースのシステムを除いて接続されません。

build.confこれらの設定はすべて、配布ルートディレクトリにファイルを作成/編集することで構成できます。構成ファイルは、[依存関係名]ヘッダーと名前=値項目につながる各依存関係について、1つずつ複数のセクションで構成されています。可能な名前はキーワード引数ですdistutils.core.Extensionthis document <http://docs.python.org/distutils/apiref.html>完全なリストは上から3番目の表を参照)。値はスペースで区切られた文字列のリストです。

現在利用可能な2つのセクションは[lapack]と[mumps]です。前者はLAPACKへのリンクを構成します。そしてBLAS、後者とMUMPS(LAPACKとBLASを除く)。

build.conf自己コンパイルされたMUMPS、SCOTCH <http://www.labri.fr/perso/pelegrin/scotch/>_、およびMETIS <http://glaros.dtc.umn.edu/gkhome/metis/metis/overview>_ ::接続の例

[mumps]
libraries = zmumps mumps_common pord metis esmumps scotch scotcherr mpiseq
    gfortran

Intel MKLとの接続例build.conf::

[lapack]
libraries = mkl_intel_lp64 mkl_sequential mkl_core mkl_def
library_dirs = /opt/intel/mkl/lib/intel64
extra_link_args = -Wl,-rpath=/opt/intel/mkl/lib/intel64

詳細な構文は_build.confにありますdocumentation of Python's configparser module <http://docs.python.org/3/library/configparser.html#supported-ini-file-structure>

次のbuild.confを使用してMUMPSをコンパイルし、モジュールを再構築しました。

   [mumps]
   libraries = zmumps mumps_common pord
   library_dirs = /*path_to_mumps_compilation*/lib /*path_to_mumps_compilation*/libseq
   include_dirs = /*path_to_mumps_compilation*/include
   extra_link_args = -Wl,-rpath=/*path_to_mumps_compilation*/lib

モジュールを再インストールしてPythonにインポートすると、インポートエラーが発生します。

/*path_to*/_mumps.so: 未定義シンボル: mumps_get_mapping

_mumps.soをチェックした結果、そのシンボルは実際には定義されていないようです。インストール中に使用された_mumps.soへのリンクコマンドは次のとおりです。

    gcc -pthread -shared build/temp.linux-i686-2.7/kwant/linalg/_mumps.o -L/u/fphys/iw386/rt/lib -lmumps_common -lzmumps -lpord -lmetis -lesmumps -lscotch -lscotcherr -lmpiseq -llapack -lblas -o build/lib.linux-i686-2.7/kwant/linalg/_mumps.so -Wl,-rpath=/u/fphys/iw386/rt/lib

libmumps_common.aではmumps_commonがロードされ、mumps_get_mappingは定義されていません。

    $ nm -g rt/lib/libmumps_common.a |grep mumps_get_mapping
    00000000 T mumps_get_mapping

「仮記号」とは何か分からない。これも定義されていないことを意味しますか?

次に、ソースからビルドし(インストールファイルの例で提案されているように)、次のbuild.confを使用してscotchとmetisをインストールしてみました。

    [mumps]
     libraries = zmumps mumps_common pord metis esmumps scotch scotcherr mpiseq gfortran
     library_dirs = /u/fphys/iw386/rt/lib
     include_dirs = /u/fphys/iw386/rt/include
     extra_link_args = -Wl,-rpath=/u/fphys/iw386/rt/lib

すべてのライブラリが/u/fphys/iw386/rt/libに移動され、すべてのヘッダファイルが/u/fphys/iw386/rt/includeに移動されました。

インポート時にエラーメッセージが次のように変更されました。

_mumps.so: 未定義シンボル: for_write_seq_lis

for_write_seq_lisはFortran関連の方法のようです。ちなみに、私が使用したgfortranライブラリファイルは、gfortranパッケージを介してシステムによって提供されるものです。私はソースからgfortranとgccとそれらの依存関係を構築するのを避けたいと思います。

どんな助けでも大変感謝します。

関連情報