双插槽与单插槽内存模型?

kfm*_*e04 7 c c++ linux memory

从Linux上运行的C/C++程序的角度来看,我对双CPU机器中的内存看起来有点困惑.

案例1(理解)

使用一个四核HT CPU,32GB RAM,理论上我可以编写单个进程应用程序,使用多达8个线程和高达32GB RAM而无需交换或重载线程设施 - 我忽略了操作系统和其他这里的过程简单.

案例2(混乱)

设置64GB RAM 的双四核HT CPU会发生什么?

开发方面,你是否需要编写一个应用程序来运行两个进程(8个线程,每个32GB)进行通信,或者你可以将它作为一个进程(16个线程,64GB全内存)编写?

如果答案是前者,那么利用整个硬件的一些有效的现代策略是什么?SHM?IPC?另外,如何指导Linux为每个进程使用不同的CPU?

Jon*_*art 7

从应用程序的角度来看,物理CPU(管芯)的数量无关紧要.只有虚拟处理器的数量.这些包括所有处理器上的所有内核,如果在内核上启用超线程,则为double.线程以相同的方式安排在它们上面.如果核心都在一个芯片上或分布在多个芯片上并不重要.

一般来说,处理这些事情的最佳方法是不这样做.不要担心在哪个核心上运行什么.只为您的应用程序生成适当数量的线程(最多理论最大值等于系统中的核心总数),并让操作系统处理调度.

当然,内存在系统中的所有内核之间共享.但同样,操作系统可以处理物理内存的分配.很少有应用程序真的需要担心它们使用多少内存,并在线程之间分配内存.让操作系统处理.

  • @ kfmfe04是的,两个CPU都可以访问完整的RAM.即便如此,表现也不会如此.(NUMA)但他们可以访问彼此的记忆. (3认同)
  • 顺便说一下,把我带到Stackoverflow的问题是[关于双插槽NUMA的问题](http://stackoverflow.com/questions/7259363/measuring-numa-non-uniform-memory-access-no-observable-asymmetry-为什么).:) (3认同)