1

C++ でマルチコア プログラミングを学びたいのですが、いくつかの注意点を教えてください。との違いは何pthreadですか? より効率的に使用できるライブラリはどれですか? ありがとう。Intel TBBopenmpIntel CPU

4

2 に答える 2

5

この 3 つは完全に別物です。Pthreads は、Linux、OS X、FreeBSD、Solaris を含むがこれらに限定されない、POSIX 仕様に準拠する多くの最新の Unix OS のネイティブ スレッド API です。また、Windows 用の Pthreads 実装のサポートが不十分で、あまりうまく機能していません (Windows には独自のネイティブ Win32 スレッド API があります)。Pthreads は、一般的なスレッド化シナリオをサポートするように設計されており、それを使用して並列処理アプリケーションを構築するには、(コード行数で) 非常に高いコストがかかります。

Intel TBB は、共有メモリ アーキテクチャでの並列データ処理用のポータブルでオープンソースの C++ テンプレート ライブラリであり、タスクとタスク フローを実装します。これは、新しい C++ ラムダ (匿名コード ブロック) と組み合わせると特にうまく機能します。このライブラリは、さまざまなコンパイラで、さまざまなアーキテクチャ用に構築できます。POSIX システムでは、TBB は基礎となるスレッド API として Pthreads に基づいて構築されています。

OpenMP は、C/C++ および Fortran に対するディレクティブ ベースの拡張機能であり、共有メモリ アーキテクチャでのデータとタスクの並列処理をサポートします。これはライブラリではなく言語拡張であり、OpenMP 対応のコンパイラが必要です。事実上すべての最新の C++ コンパイラ (Clang の顕著な例外を除く) は、PGI、Oracle、MSVC++ コンパイラ、および GCC を含む OpenMP をサポートしています。POSIX システムでは、OpenMP ランタイムは Pthreads の上に構築されます。バージョン 4.0 は、GPU や Intel Xeon Phi などのコプロセッサなどのアクセラレータ デバイスをサポートしています。

3 つすべての中で、Intel TBB は最も柔軟性が高く、OpenMP は習得が最も簡単です。Pthreads は移植性がなく (たとえば、Windows でのサポートが不十分)、習得も容易ではありません。Claudio が既に述べたように、C++11 には独自のスレッド化プリミティブが含まれており、Pthreads を使用して POSIX システムに実装されています。しかし、これらは、ITBB や OpenMP などの並列処理ライブラリ/拡張機能よりも、スレッド API に関する言語の抽象化に似ています。

于 2013-11-06T10:47:24.853 に答える