1

「並列プログラミング」が何を意味するのかわかりません...しかし、私はそれについて2つの考えを持っています

  1. プロセスAは、特定の数の子プロセスを生成します。プロセスAが子プロセスの作成を完了すると、すべての子プロセスが同時に実行されます。

  2. プロセスAは子プロセスBを作成し、プロセスBは別の子プロセスCを作成し、プロセスCは子プロセスDを作成し、以下同様に続きます...完了すると、タスクが割り当てられたすべてのプロセスが同時に実行されます。

並列プログラミングの正しい考えはどれですか?助けてくれてありがとう!

編集:異なるプログラムを同時に実行するにはマルチプロセスが必要だと思いますか?

4

3 に答える 3

2

「並列プログラミング」という用語は、単に「子プロセスまたはスレッドを生成するプロセス」よりもはるかに広範です。それは意味することができます:

  1. いくつかの作業を行うためにスレッドのチームを生成する単一のプロセス。
  2. いくつかの作業を行うために子プロセスのチームを生成する単一のプロセス。
  3. 同じマシン上で協調コンピューティングを実行するために、複数のプロセスが独立して生成されました。
  4. ネットワーク内の異なるマシンで協調コンピューティングを実行するために、複数のプロセスが独立して生成されました。
  5. すべての並列計算を実行するGPUと通信する単一のプロセス。
  6. 上記の任意の組み合わせまたはネスト。

基本的に、並列プログラミングは、問題を並列に解決するアプリケーションまたはアプリケーションのグループを作成する行為です。スレッド、プロセスなどは、これを実現するための手段にすぎません。

このシナリオを考えてみましょう。クラスター上で行われる大規模なパラレルテキスト処理タスク。マスターノードは、すべてのスレーブノードにコマンドを発行して、計算用のプロセスを生成します(グローバル並列処理)。各プロセスは、ローカル並列処理(マルチコア/マルチプロセッサノード)を利用するために、複数のスレッド/子プロセスを順番に生成します。

于 2012-05-27T20:01:11.767 に答える
0

シナリオではプロセスを同時に実行する必要があるため、どちらも「並列プログラミングの正しい考え方」ではないと言えます。

並列処理とは、タスクが文字通り同時に実行される場合です(つまり、マルチコアプロセッサ上で)。すべてのプロセスがシングルコアプロセッサでフォーク/実行される場合、これは並列処理ではなく同時実行と見なされます。

于 2012-05-27T19:43:37.303 に答える
0

アプリケーション(「プロセス」と呼びます)は、いくつかのライブスレッドで始まります。通常、従来のUnixおよびWindowsシステムでは1つです。スレッドは、個別の作業要求を表します。

スレッドは、使用可能な実CPUの数、スケジューラーの動作、優先順位、同じマシン上の他のプロセス/スレッドからの要求、またはスレッドが別のスレッドとの相互作用の完了を待機しているかどうかに応じて、実並列または疑似並列で実行されます。一般に、それらが個々に進行する速度やスケジューラーのポリシーに関係なく、それらが並行して実行されることを想像する必要があります。

いつでも、スレッドは死ぬ可能性があります(終了または自殺)。または、そのプロセスのためにより多くのスレッドを製造する場合があります。したがって、プロセスが所有するスレッドの数は一般に動的です。(ほとんどのOSでは、スレッドは他のプロセスも生成できますが、実際に異なるものを追加せずに、画像を混乱させるだけです)。

于 2012-05-27T19:55:14.187 に答える