2011-06-30 23 views
13

my previous question私はMicrosoftから提供されたppl.hからparallel_for件名に触れました。
すぐに私はそれを使って自分のアプリケーションを移植不可能にすることに気が付きました(私が正しいとすれば、Microsoft(ppl.hヘッダー)に固有です)。
私の意見では、これはC++プログラミングの非常に重要な側面を壊してしまいます。
だから私の質問は以下のとおりです。私は右の私が
2(移植不可能で、私はそれがMSから1以外のコンパイラでコンパイルすることができないという意味で)皆さんからのparallel_forを使用すると、コードが移植不可能になるというにおける
1.アム私がコードでparallel_forを使用しているアプリケーションで、後の段階でUI(Qtで実行)を提供したいのであれば、parallel_forを他のいくつかの(ポータブル)代替または私はVSのQtとコアのUIを行うことができません?
3. pplの(ポータブル)代替手段は何ですか?pplに代わるもの

答えて

14

インテルのThread Building Blocksを検討してください。 OpenMPとは違って、実際に C++を使用します。単純にC++コンパイラでコンパイルするのではなく(つまり、C++としてコンパイルできるCライブラリです)。それはあなたがPPLで見るものの多くを持っていますが、クロスプラットフォームです。

またBoost.Threadもありますが、これはC++です(TBBと同じくらい直接的ではありませんが)、クロスプラットフォームです。

+0

ありがとうございます。 Nicol、それを移植することを犠牲にしてTBBを使用するようにしたpplには本当に特別なものがありますか? – smallB

+0

OpenMPはライブラリではありませんが、これは主にコンパイラ拡張です。これは言語*で並列処理*を追加します。 –

+0

@smallB、VC10はい、デバッグに役立ちます。 VC10は、ConcurTとよく統合された並列タスクと並列スタックを示しています。 – Ajay

0

は私が右(移植不可能で、私はそれがMSから1以外の コンパイラでコンパイルすることはできません という意味)

移植不可能

皆さんから のparallel_forを使用すると、あなたのコード が移植不可能になるという中でアムプラットフォーム自体を切り替えると他のコンパイラを使いたいならば、Windows上で移植可能かもしれません。しかし、PPLは同時実行ランタイムの一部であり、MSVCRT100.DLLに配置されており、これにリンクする(または実行時にDLLを必要とせずに静的にリンクする)必要があることに注意してください。私はこれが他のコンパイラ/リンカでどのようにできるのかよくわかりませんが、それは実行可能だと思います。

は右の私のコードがなる でのparallel_forを使用して、私はmommentで に取り組んでいるアプリケーションのために、後 ステージ上で、私はUIを提供する場合( Qtの中で行われる)という中で私をアムどちらか私はいくつかの他の (ポータブル)の代替と のparallel_forを交換するだろうか、私はならないことを意味するだろう 閉塞 VS

にQtとコアに

あなたは、あなたのコア - を書くことができますがUIを行うことができますPPL/VC++、oを使用したフレームワークQT /その他のコンパイラのGUI対応です。このためには、PPLを使用するDLLを作成し、GUIアプリケーションはDLLを使用します。私はあなたが私がここで何を意味するのか理解していると信じていますこれにより、移植性(Windows上での)に関する頭の負担も軽減されます。

  1. pplの(ポータブル)代替手段は何ですか?

多くの場合でも、Windows/VC++ではPPLを使用することをお勧めします。インテルのTBBの使用を検討することができます。OpenMPはTBB/ConcRTに比べて面倒であり、利点はありません

5

Casablancaプロジェクトで働く人々は、PPLXという移植可能なバージョンのPPLXを作っています。ライセンスはApache 2.0ライセンスの下でライセンスされています。

以前は、PPLチームと緊密に協力して、両方のバージョンを同期させ、バグ修正を賢明にしていると言いました(最後の投稿はthis thread参照)。

+0

PPLXはタスクのサポートに重点を置いています。 parallel_forやparallel_ *にマッチしたものはサポートしていません。 –