PPLとOpenMPのパフォーマンスを比較したいのですが、Web上で詳細な調査を見つけることができません。PPLの経験者は少ないと思います。
Visual Studio 2010を使用してWindowsでソフトウェアを開発していますが、短期的には他の場所に移植したくありません。
移植性が問題ではなく、パフォーマンスだけが問題である場合、これら2つの方法についてどう思いますか?
PPLとOpenMPのパフォーマンスを比較したいのですが、Web上で詳細な調査を見つけることができません。PPLの経験者は少ないと思います。
Visual Studio 2010を使用してWindowsでソフトウェアを開発していますが、短期的には他の場所に移植したくありません。
移植性が問題ではなく、パフォーマンスだけが問題である場合、これら2つの方法についてどう思いますか?
MSDN には、プロパティ OpenMP と ConcRT (PPL のコア) の優れた比較があります。
OpenMP モデルは、非常に大きな計算問題が 1 台のコンピューターの処理リソース全体に分散されるハイ パフォーマンス コンピューティングに特に適しています。このシナリオでは、ハードウェア環境が既知であり、開発者は、アルゴリズムの実行時にコンピューティング リソースに排他的にアクセスできることを合理的に期待できます。
ただし、制約の少ないその他のコンピューティング環境は、OpenMP に適していない場合があります。たとえば、再帰的な問題 (クイックソート アルゴリズムやデータ ツリーの検索など) は、OpenMP を使用して実装するのがより困難です。コンカレンシー ランタイムは、並列パターン ライブラリ (PPL) と非同期エージェント ライブラリを提供することで、OpenMP の機能を補完します。OpenMP とは異なり、コンカレンシー ランタイムは、使用可能なリソースに適応し、ワークロードの変化に応じて並列度を調整する動的スケジューラを提供します。
したがって、OpenMP の主な欠点:
おそらくアルゴリズムによって異なりますが、この調査によると、PPLはOpenMPよりも高速である可能性があります。
http://www.codeproject.com/Articles/373305/Visual-Cplusplus-11-Beta-Benchmark-of-Parallel-Loo
Serial : 72ms
OpenMP : 16ms
PPL : 12ms
唯一の関心事がパフォーマンスである場合、2 つのアプローチについて私が考えることはまったく関係ありません。これは、議論ではなく、経験的なアプローチによって解決できる問題です。