並列プログラミング==マルチスレッドプログラミングですか?
3 に答える
マルチスレッドプログラミングは並列ですが、並列プログラミングは必ずしもマルチスレッドである必要はありません。
マルチスレッドがシングルコアで発生する場合を除き、その場合は同時実行のみです。
必ずしも。_ 複数のプロセス間、さらには複数のマシン間でジョブを分散できます。各プロセスは単一のスレッドしか使用できないため、「マルチスレッド」プログラミングとして分類しませんが、確かに並列プログラミングです。確かに、複数のプロセスでは、システム全体に複数のスレッドがあると主張することができます...
最終的に、このような定義はコンテキスト内でのみ役立ちます。あなたの特定のケースでは、それはどのような違いを生むのでしょうか?それとも、これは興味がないだけですか?
いいえ。マルチスレッドプログラミングとは、単一のプロセスがあり、このプロセスが多数のスレッドを生成することを意味します。すべてのスレッドは同時に実行されていますが、すべて同じプロセススペースの下にあります。つまり、同じメモリにアクセスしたり、同じファイル記述子を開いたりすることができます。
並列プログラミングは、定義としてもう少し「一般的」です。MPIでは、同じプロセスを複数回実行して並列プログラミングを実行しますが、プロセスごとに異なる「識別子」を取得するという違いがあるため、必要に応じて各プロセスを区別できますが、必須ではありません。また、これらのプロセスは互いに独立しており、パイプまたはネットワーク/UNIXソケットを介して通信する必要があります。MPIライブラリは、同期または非同期のスタイルで、ノード間でデータを移動するための特定の機能を提供します。
対照的に、OpenMPはマルチスレッドと共有メモリを介して並列化を実現します。コンパイラに特別なディレクティブを指定すると、自動的に並列実行が実行されます。
OpenMPの利点は、非常に透過的であるということです。並列化するループがありますか?いくつかのディレクティブを追加するだけで、コンパイラーはそれを細かく分割し、ループの各部分を異なるプロセッサーに割り当てます。残念ながら、これには共有メモリアーキテクチャが必要です。ノードベースのアーキテクチャーを持つクラスターは、クラスターレベルでOpenMPを使用できません。MPIを使用すると、ノードベースのアーキテクチャで作業できますが、より複雑で透過的ではない使用法の代償を払う必要があります。