2010-12-28 17 views
3

OpenMPを使用するアプリケーションをコンパイルしています。 -fopenmpとともにgcc 4.4を使用しています。また、独自のバージョンのOpenMP(libiomp5)を含むIPPも使用しています。 (注:私たちは、ippSetNumThread(1)を呼び出すことによってIPPの内部スレッドを無効にしていますが、インテルのドキュメントによれば、これは他のスレッドライブラリとの競合を避けるはずです。既にリンクされているので、ではありません。はlibgomp.so(gccのOpenMPのバージョン)とリンクしていません。長い間、これはうまくいきましたが、私たちがサポートしている4つのプラットフォームのうちの1つ(非常にうまく動作する他の3つのプラットフォーム)で、OpenMP関連のクラッシュが非常に奇妙に見え始めたようです。libiomp5とlibgompは混在できますか?

私がlibgomp.soとlibiomp5.soにリンクしていると、クラッシュする可能性があります。

私はこのことについてカップルの質問があります。

  1. は、これらのライブラリは、安全の両方にリンクしていますか?両方とも同じシンボルを定義しているようです。
  2. OpenMP libiomp5.soがサポートしているバージョンを知る方法はありますか? gcc 4.4では、libgomp.soはOpenMP v3.0になければなりません。 OpenMPバージョンのlibiomp5.soに関するインテルの文書には情報がありません。

答えて

3

誰もが数日間答えなかったので、私はちょうど私が独立して見つけたものを報告します:

は、これらのライブラリは、安全の両方にリンクしていますか? 号は、ここで私は、このトピックで見つかった最も有用なページです: http://software.intel.com/sites/products/documentation/studio/composer/en-us/2011/compiler_c/optaps/common/optaps_par_openmp_multiple_compilers.htm

インテルはあなたがIPPの内部OpenMPのは、あなた自身のOpenMPのスレッド化との混合しようとしているならば、あなたは、コンパイラのOpenMPのの代わりにlibiomp5にリンクすることをお勧めしますとしょうかん。現在のバージョンのlibiomp5ではgccのOpenMPとの "ソース互換性とオブジェクトレベルの相互運用性"が提供されていますが、gcc "4.42"(sic; 4.4.2)を使用している場合のみです。

OpenMP libiomp5.soがサポートしているバージョンを知る方法はありますか? はい。環境変数KMP_VERSION = 1を設定し、アプリケーションを実行します。 libiomp5によって出力されたデバッグ出力がコンソールに表示されます。あなたがIPPのV7以降を使用している場合は、1行は、あなたがIPP 6を使用している場合、それはあなたのAPIのバージョンを教えてくれませんが、それは、それが構築された時にあなたを教えてとします

Intel(R) OMP API version: 3.0 (200805) 

のようなものになりますインテル®コンパイラーのどのバージョン。コンパイラがサポートしているOpenMPのバージョンを確認して確認できます。 (11.0はOpenMP v3.0をサポートするインテルコンパイラの最初のバージョンでした)

関連する問題