7

Linux で実行されている C/C++ プログラムの観点から、デュアル CPU マシンでメモリがどのように見えるかについて少し混乱しています。

ケース1(了解)

1つのクアッドコア HT CPUと 32GB の RAM を使用すると、理論的には、最大 8 つのスレッドと最大 32GB の RAM を使用して、スレッド機能をスワップしたり過負荷にしたりすることなく、単一プロセスのアプリケーションを作成できます。OS やその他の機能は無視します。簡単にするためにここでプロセスを説明します。

ケース 2 (混乱)

64GB RAM が設定されたデュアル クアッドコア HT CPUではどうなりますか?

開発に関して、通信する 2 つのプロセス (8 スレッド、それぞれ 32GB) として実行するアプリケーションを作成する必要がありますか、それとも 1 つのプロセス (16 スレッド、64GB のフル メモリ) として作成できますか?

答えが前者の場合、ハードウェア全体を活用するための効率的な最新の戦略は何ですか? シム?IPC? また、プロセスごとに異なる CPU を使用するように Linux に指示するにはどうすればよいですか?

4

2 に答える 2

7

アプリケーションの観点からは、物理 CPU (ダイ) の数は重要ではありません。仮想プロセッサの数のみ。これらには、すべてのプロセッサのすべてのコアが含まれ、コアでハイパースレッディングが有効になっている場合は 2 倍になります。スレッドは同じ方法でスケジュールされます。コアがすべて 1 つのダイにあるか、複数のダイに分散しているかは問題ではありません。

一般に、これらを処理する最善の方法は、しないことです。どのコアで何が実行されているかを気にする必要はありません。アプリケーションに適切な数のスレッドを生成するだけで (システム内のコアの総数に等しい理論上の最大値まで)、OS にスケジューリングを処理させます。

もちろん、メモリはシステム内のすべてのコア間で共有されます。ただし、物理メモリの割り当てを処理するのは OS です。使用するメモリの量や、そのメモリをスレッド間で分割することを気にする必要があるアプリケーションはほとんどありません。OSにそれを処理させてください。

于 2013-03-22T04:53:51.737 に答える
0

メモリ モデルは、コアの数自体とは ** 何も ** 関係がなく、マルチコア コンピューターで採用されているアーキテクチャと関係があります。ほとんどの主流のコンピューターは、単一の OS がすべての CPU を制御し、それらの CPU で実行されているプログラムが使用可能なすべてのメモリにアクセスできる、対称型マルチ プロセッシング モデルを使用しています。各 CPU にはプライベート メモリ (キャッシュ) がありますが、RAM はすべて共有されます。したがって、64ビットマシンを使用している場合、メモリ使用量の影響が懸念される限り、1つのプロセスを作成するか、2つのプロセスを作成するかによって、zilchの違いが生じます。プログラミングに関しては、単一のプロセスを使用する方がよいでしょう。

他の人が指摘したように、スレッド アフィニティなどについて心配する必要はありますが、それは CPU リソースの効率的な使用と関係があり、RAM の使用とはほとんど関係がありません。ただし、キャッシュの使用にはいくつかの影響があります。

NUMA (Non-Uniform Memory Access) など、各 CPU に独自のメモリ ブロックがあり、CPU 間で通信する他のメモリ モデル コンピューターとは対照的です。これらのコンピューターでは、スレッドをどこに配置するか、メモリに関して心配する必要があります。

于 2013-03-22T05:04:54.943 に答える