マルチスレッドプログラミングにおいて、HPC アプリケーション (MPI) との組み合わせを考えると、機能的には Intel TBB (thread building block) が pthread に匹敵するかどうか、どちらが優れているか? 私は open mp でしか経験がありませんが、TBB と Pthread の両方が open mp と比較してより細かいスレッド制御を提供すると聞きましたが、TBB または TBB + OpenMP は pthread と比較して同様の機能を提供できますか?
2 に答える
pthread は、OS インフラストラクチャ上のシン ラッパーです。これにより、特定のスレッド メイン関数といくつかの同期プリミティブ (ミューテックス セマフォなど) を使用してスレッドを作成できます。Linux では、pthread はclone(2)
システム コールの上に実装されています。Windows での同等物は と呼ばれCreateThread
ます。他のすべてのスレッド処理は、このベースの上に構築されています。
Intel TBB は高レベルでparallel_for
ありparallel_reduce
、OpenMP に似ているが、言語拡張ではなくライブラリとして実装された同様の高レベルの構造を提供します。
OpenMPI は、マルチマシンの分散インフラストラクチャを使用することでさらに高レベルですが、非常に時代遅れで少し扱いにくいものです。
私のアドバイスは、最初に pthread ライブラリを完全に理解するまで学習し、その後でより高いレベルのライブラリを調べることです。
TBB を使用すると、ネイティブ スレッド機能の上に移植可能なコードを記述できるため、さまざまな OS アーキテクチャ間でのコードの移植性が向上します。pthreadよりも「効率的」だとは思いません。
個人的にオープン MP を使用したことはありませんが、過去にオープン MP を使用している開発者と (彼らが使用していたプロセッサの技術専門家として) 作業したことがあります。独自のコードを記述するよりも、open mp で使用する。それはすべて、あなたが何をしているのかにかかっています。もちろん、openmp の利点の 1 つは、いつでも openmp オプションなしでコードを再コンパイルできることです。コードは期待どおりに直接動作します [もちろん、広がりません]。
プログラムのスレッド化アプローチを使用すると、どのスレッドで何が起こるかをより正確に制御できます。しかし、それはまた、より多くの仕事を意味します...