从运行在Linux上的C/C++程序的角度看,内存在双CPU计算机中是什么样子,我有点困惑。
案例1(理解)
有了一个四核HT ,32 OS内存,理论上,我可以编写一个进程应用程序,最多使用8个线程,最多使用32 OS内存,而不需要进入交换或重载线程设备--为了简单起见,我忽略了操作系统和其他进程。
案例2(混淆)
设置了64 up内存的双四核HT 会发生什么?
在开发方面,您需要编写一个应用程序作为两个进程运行(8个线程,每个进程32 16)进行通信,还是可以将其写成一个进程(16个线程,64 16内存)?
如果答案是前者,那么什么是有效的现代策略来利用整个硬件呢?希姆?IPC?另外,如何指导Linux为每个进程使用不同的CPU?
发布于 2013-03-22 04:53:51
从应用程序的角度来看,物理CPU(死)的数量并不重要。只有虚拟处理器的数量。其中包括所有处理器上的所有核,如果在核上启用超线程,则为双核。线程以同样的方式调度在它们上。不管核心都在一个芯片上,还是分散在多个模具上都没关系。
一般来说,处理这些事情的最好方法就是不要。不要担心什么在哪个核心上运行。只需为您的应用程序生成适当数量的线程(理论上的最大值等于系统中的核心总数),并让操作系统处理调度。
当然,内存是在系统中的所有核心之间共享的。但同样,它是在操作系统上处理物理内存的分配。很少有应用程序真正需要担心它们使用了多少内存,并在线程之间分配内存。让操作系统来处理。
发布于 2013-03-22 05:04:54
内存模型与核本身的数量无关,而是与多核计算机上使用的体系结构有关。大多数主流计算机使用对称多处理模型,其中一个操作系统控制所有CPU,运行在这些CPU上的程序可以访问所有可用内存。每个CPU都有私有内存(缓存),但是RAM都是共享的。因此,如果您有64位机器,那么无论您编写一个进程,还是编写两个进程,对于内存使用的影响,这都有很大的区别。就编程而言,最好使用单个进程。
正如其他人指出的那样,您确实需要担心线程之间的亲缘关系等等,但这更多地与CPU资源的有效使用有关,而与RAM的使用无关。不过,缓存的使用也会带来一些影响。
与其他内存模型计算机相比,例如NUMA (非统一内存访问),每个CPU都有自己的内存块,并且在CPU之间通信需要一些仲裁器。在这些计算机上,您需要考虑将线程放在哪里,内存是否明智。
https://stackoverflow.com/questions/15562944
复制相似问题