2012-01-27 8 views
0

私は、プロセス内で共有メモリを利用できるように、POSIXスレッドを利用するソフトウェアを作成しました。私の質問は、マシンに4つのプロセッサを搭載したUbuntuを実行し、各プロセッサに16のコアがある場合です。 4つのプロセスをそれぞれ16個のスレッドまたは1個のプロセスで64個のスレッドで実行する方が効率的ですか?各プロセッサには32GBの専用RAMが搭載されています。マルチプロセッサシステム上のPOSIXスレッド

私の主な心配は、1つのプロセスで見られることの後ろに起こっているmemcopyがたくさんあるということです。要約する

:4(16core)PROCマシン
1プロセス64のスレッドで

4プロセス16スレッド?
プロセスが32 GB以上のRAMを必要とする場合(1つのProc専用の量)、回答が異なりますか?

ご協力ありがとうございました

答えて

1

アプリケーションによって異なります。

malloc(),fprintf()などのライブラリ関数内のスレッド間の同期が必要であるため、シングルスレッドプロセスのスレッドはマルチスレッドプロセスのスレッドより高速で実行されます。また、マルチスレッド互いのロック競合が遅くなる可能性があります。スレッドが通信する必要がなく、データを共有しない場合、スレッドは同じプロセスにある必要はありません。

あなたの場合、64スレッドで1プロセスではなく、16スレッドで4プロセスでより良い並列性を得ることができます。

+0

スレッドは通信しませんが、データを共有します。多数のファイルの初期ロードと残りの実行でも一定のままである共有構造の作成があります。これは大量のRAMを必要とするため、複数のスレッドを実行する方が複数のプロセスよりも優れています。ロードが完了すると、スレッドが作成され、独立して動作します。共有メモリが変更されないため、同期やロックの問題は発生しません。これはあなたの意見を変えますか? – RussS

+0

オプションは、スレッドを生成するのではなく、複数のプロセスにデータとフォークをロードすることです。子プロセスは引き続きすべてのデータを共有します。このようにして、スレッドサポートでコンパイルする必要はありません。しかし、それは顕著な違いを作ることができません。 –

+0

私はfork()が親プロセスのメモリを共有するのではなく、それを複製するという印象を受けましたか? – RussS

関連する問題