200x200次元の行列の倍数を計算しています。最大8つのプロセスを使用できます。行を計算するために子プロセスをフォークしています。1つのプロセスに4行を実行させて並列に実行するか、プロセスごとに1行を作成するか、つまり、一度に5行を並行して処理し、その後に同じプロセスを再利用してさらに5行を処理することができます。どちらがより効率的でしょうか?
1 に答える
この場合、すべてのジョブに同じ労力がかかるため (同じ数の乗算と加算があるため)、最初のオプション (プロセスごとに 4 行) を選択する方が理にかなっています。2 番目のオプション (毎回プロセスごとに 1 行) は、ジョブが完了するまでに時間がかかる場合や、低レイテンシーが必要な場合に適しています。各オプションのオーバーヘッドを考慮することができます。
最初のオプションでは、オーバーヘッドは次のもので構成されます。
- 作業を分割します。
- プロセスの起動。
- 結果の収集。
2 番目のオプションでは、オーバーヘッドは次のとおりです。
- 作業を分割します。
- プロセスの起動。
- 労働者が終わったら、別の作品を求めます。
- 別のピースを受け取ります。
- 結果を収集します。
2 番目のオプションでは、より多くのオーバーヘッドがあることがわかります。
2番目のオプションの可能なアーキテクチャについては、サーバークライアントアーキテクチャを使用できます。1つのプロセスがサーバーとして機能し、残りがクライアントとして機能します。サーバーは作業を分割し、要求されたときにそれをクライアントに提供し、結果を収集します。各ジョブが完了した後または最後に結果を収集できます。最初に、サーバーはクライアントを作成し、それぞれにジョブを与えてから、追加の作業を要求されるまで待ちます。クライアントは与えられた仕事を終えると、サーバーに別の仕事を依頼し、計算した結果をサーバーに返します。これは、サーバーが提供する作業がなくなるまで繰り返され、その時点でクライアントに通知して終了できるようにします。