c++ - 双插槽与单插槽内存模型?

标签 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 完整内存)?

如果答案是前者,那么有哪些有效的现代策略来利用整个硬件?嘘?工控机?另外,如何指导 Linux 为每个进程使用不同的 CPU?

最佳答案

从应用程序的角度来看,物理 CPU(裸片)的数量并不重要。只有虚拟处理器的数量。这些包括所有处理器上的所有内核,如果在内核上启用了超线程,则加倍。以相同的方式在它们上安排线程。核心是全部在一个芯片上还是分布在多个芯片上都没有关系。

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

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

关于c++ - 双插槽与单插槽内存模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15562944/

相关文章:

linux - 内存访问错误 sys_rt_sigaction(信号处理程序)

c++ - 使用 FFMPEG 将 RGB 图像序列保存到 .mp4 时遇到问题

c++ - 如何从 C++ 中的整数缓冲区中提取 4 个字节的整数

c++ - union 是否始终具有默认值零?

c++ - 为什么const std::array <std::array <float,1081>,2>&wavetable_h不指向原始数组?

c - 不使用双指针交换字符串

C - 捕获错误的参数错误

c - 为什么 "The C Programming Language"书说我必须转换 malloc?

php - 使用 PHP 的 Linux 托管服务器的串行 COM 端口问题

linux - Caffe2好像没有看到cuDNN?