libfftw3_threads.so.3.2.4共有ライブラリがpthreadまたはOpenMP用にコンパイルされているかどうかを確認する方法は?

libfftw3_threads.so.3.2.4共有ライブラリがpthreadまたはOpenMP用にコンパイルされているかどうかを確認する方法は?

管理者はFFTWライブラリをシステム全体/usr/lib64にインストールしました/usr/lib64/libfftw3_threads.so.3.2.4

このライブラリを直接コンパイルしたとき、sysadminを使用してインストールする前に次のことを行う必要があることがわかりました。MPを開くそして並列スレッドバージョン:

  • --enable-openmp:と似ています--enable-threadsが、OpenMPコンパイラディレクティブを使用して独自のスレッドを直接生成するのではなく、並列性を導きます。異なる並列化メカニズム間の競合を最小限に抑えるために、すでにこれらのディレクティブを使用しているプログラムに特に役立ちます。またはどちらかを使用してください--enable-openmp--enable-threadsどちらの場合も、マルチスレッドFFTWインターフェイス/ライブラリ(マルチスレッドFFTWを参照)は別のバックエンドにコンパイルされます。

ディストリビューションはGentooなので、理論的にはどちらも可能です。

そのライブラリがOpenMPサポート(好ましくは)またはpthreadでコンパイルされていることをどのように確認できますか?

ベストアンサー1

これを呼び出して使用するかどうかlddを確認できます。-fopenmp

$ cat x.c 
int foo()
{ return 0 ; }

$ gcc -shared -fopenmp x.c -o x.so
$  ldd x.so
    linux-vdso.so.1 =>  (0x00007fff293d6000)
    libgomp.so.1 => /usr/lib/libgomp.so.1 (0x00007fa942998000)
    libpthread.so.0 => /lib/libpthread.so.0 (0x00007fa94277b000)
    libc.so.6 => /lib/libc.so.6 (0x00007fa9423f7000)
    librt.so.1 => /lib/librt.so.1 (0x00007fa9421ef000)
    /lib64/ld-linux-x86-64.so.2 (0x00007fa942dc7000)

これは libpthread と libgomp の両方にリンクされていることを意味します。

$ gcc -shared x.c -o x.so
$ ldd x.so                        
    linux-vdso.so.1 =>  (0x00007fff5fbff000)
    libc.so.6 => /lib/libc.so.6 (0x00007f5340a9b000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f534103f000)

これはopenmpのサポートが含まれていないことを意味します。

通常、どのコンパイラフラグが使用されているかを確認するのは簡単ではありません。基本的にはバイナリに文書化されていないので

おそらく、パッケージのインストール中に生成されたいくつかのGentooログファイルを見ることができます(パッケージのコンパイル時間を意味します)。

もちろん、バイナリパッケージベースのディストリビューション(Debianなど)ではこの問題は発生しません。 .soファイルが属するパッケージを検索し、パッケージの説明やコンパイラがスイッチを指定したソースパッケージを表示できます。 。

おすすめ記事