-4

200x200次元の行列の倍数を計算しています。最大8つのプロセスを使用できます。行を計算するために子プロセスをフォークしています。1つのプロセスに4行を実行させて並列に実行するか、プロセスごとに1行を作成するか、つまり、一度に5行を並行して処理し、その後に同じプロセスを再利用してさらに5行を処理することができます。どちらがより効率的でしょうか?

4

1 に答える 1

2

この場合、すべてのジョブに同じ労力がかかるため (同じ数の乗算と加算があるため)、最初のオプション (プロセスごとに 4 行) を選択する方が理にかなっています。2 番目のオプション (毎回プロセスごとに 1 行) は、ジョブが完了するまでに時間がかかる場合や、低レイテンシーが必要な場合に適しています。各オプションのオーバーヘッドを考慮することができます。

最初のオプションでは、オーバーヘッドは次のもので構成されます。

  • 作業を分割します。
  • プロセスの起動。
  • 結果の収集。

2 番目のオプションでは、オーバーヘッドは次のとおりです。

  • 作業を分割します。
  • プロセスの起動。
  • 労働者が終わったら、別の作品を求めます。
  • 別のピースを受け取ります。
  • 結果を収集します。

2 番目のオプションでは、より多くのオーバーヘッドがあることがわかります。

2番目のオプションの可能なアーキテクチャについては、サーバークライアントアーキテクチャを使用できます。1つのプロセスがサーバーとして機能し、残りがクライアントとして機能します。サーバーは作業を分割し、要求されたときにそれをクライアントに提供し、結果を収集します。各ジョブが完了した後または最後に結果を収集できます。最初に、サーバーはクライアントを作成し、それぞれにジョブを与えてから、追加の作業を要求されるまで待ちます。クライアントは与えられた仕事を終えると、サーバーに別の仕事を依頼し、計算した結果をサーバーに返します。これは、サーバーが提供する作業がなくなるまで繰り返され、その時点でクライアントに通知して終了できるようにします。

于 2013-03-16T02:03:35.540 に答える