openmpのプロセスとスレッドの違いに興味があります。私はthisスコットランガムの答えはスレッドとプロセスの違いについてはかなり興味深いことが分かった。指令(スレッドまたはプロセス)のためにopenmpパラレルでフォーク(結合)されるものは何ですか?
openmp parallel for
の場合、「スレッド」は ループの始めにフォークしてから後で結合しますが、これは実際にはスレッドかプロセスかですか?
openmpのプロセスとスレッドの違いに興味があります。私はthisスコットランガムの答えはスレッドとプロセスの違いについてはかなり興味深いことが分かった。指令(スレッドまたはプロセス)のためにopenmpパラレルでフォーク(結合)されるものは何ですか?
openmp parallel for
の場合、「スレッド」は ループの始めにフォークしてから後で結合しますが、これは実際にはスレッドかプロセスかですか?
のOpenMPの実行モデルは、実行は、単一(マスター)スレッドで開始し、他のスレッドが並列領域に遭遇した際に生み出されるフォーク/参加モデル、[1]です。これらのスレッドは実際にスレッドであり、プロセスではありません。つまり、並列領域内で生成されたすべてのスレッドは同じ共有メモリ空間にアクセスできます。言い換えれば、独自のOpenMPランタイムを実装する場合は、fork()
もclone()
も使用せず、Pthreadsを使用して実行します。
言い換えれば、各スレッドはメモリの一時的なビューを持っており(主にキャッシュ目的のため)、スレッドは変数の書き込み/読み取りごとに共有メモリにアクセスする必要はありません[2] 。その後、フラッシュ操作は、スレッドのプライベートなメモリビューとすべてのスレッドが参照する共有メモリを同期させます。
このプライベートビューのため、スレッドは実際にはプロセスであると主張できます。しかし、このプライベートビュー(実際には必須ではない)は、残りのすべてのスレッドが認識するメモリと同期しているため、スレッドはスレッドであり、プロセスではありません。
たぶん、あなたはあなたが理解しようとしているコードの例を与えることができます。これは、例えば、 'omp for'と' omp parallel for'の間にあります。私は[仕様書](http://openmp.org/wp/openmp-specifications/)、特に用語集を見ておくことを強くお勧めします。仕様内に* process *の概念はないことに注意してください。また、* fork */* join *という用語はほとんど使われていません。 – Zulan