2012-03-18 7 views
4

clang/llvmにはいつでもOpenMPをサポートする予定がないため、IntelはTBBライブラリの道をはるか遠ざけています。 OpenMPの上にマルチスレッド科学ライブラリを実装する価値はありますか(私はccv:http://github.com/liuliu/ccvで作業しています)?すべての批判にもかかわらず、OpenMPでの私の経験はとても幸せです(使用するのが簡単で、パフォーマンスの向上は妥当です)。しかし、それが瀕死の技術であれば、Cのマルチスレッドの方が簡単ですか? (pthreadではなく、TBBはC++のものです)。ありがとう!OpenMPの実装に時間を費やすことはまだ価値がありますか?

+0

「かなり満足していますか? OpenMPのクリティカルセクションから時期尚早に抜け出そうとしたことがありますか?あるいは、OpenMPが完全に理にかなっていてもサポートしていない他の多くの言語機能を使用していますか? –

+1

あなたは常に以下のようなものをプログラムしているとは限りません:for(i = 0; i <1000; i ++){a [i] = h [b [i]]; } :) – liuliu

答えて

0

新しいC標準のC11は、スレッドを独自にサポートしています。これは、pthreadsの細分化されたモデルに従います。 (C++ 11は同じですが、BTW)これはOpenMPを置き換えることはできませんが、並列ループに取り組み、削減などを行うことは簡単です。_Atomic 。古典的なスレッドライブラリはレースを避けるためにmutexを提供しますが、データによっては輻輳が発生することがあります。 _Atomicは最終的に、プロセッサがほとんどの場合持っている機能に低レベルの言語インタフェースを提供します。これにより、競合のないスレッド間のカウンタやものを素早く更新できます。

_AtomicとOpenMPは問題なく協力してください。

3

OpenMPは生きていて、いくつかの努力をして、それをmanycore accelleratorタイプのものにまで拡張することにもなります。悲しいことにOpenMPを組み込むことはClangの優先順位リストでは高くありませんが、既存のすべてのコンパイラベンダー(Intel、gcc、pgiなど)は既存の実装だけでなく、標準の継続的な開発にも取り組んでいます。私はそれについて心配しません。結局clang/llvmが来るでしょう。

+0

+1 OpenMPは、まだ多くの実行可能な選択肢がないので、FortranとCのために、特に死ぬ技術ではないと私は考える。 – Francesco

1

C++11 feature support in clang listを見ると、同時性のサポートが完全に存在しないことがわかります。

新しいC++標準は実際に並行性とマルチスレッド化に優れた機能を提供していますが、プラットフォーム非依存のままにしたい場合は現在使用できません。

既存のOpenMPコードがある場合は、それを汗ばむことはありません。 clangは単純にサポートされておらず、残念ながら、それだけで別のテクノロジーに切り替えるのは意味がありません。もちろんでTBBを使用できますが、C++ 11の並行性に照らして、TBBはちょっと過渡的な技術だと言えます。

個人的には、私はOpenMPの最後を見て嬉しく思っていますが、現時点ではまだありません。

関連する問題