内存管理是SMP Parallelism的瓶颈

时间:2010-10-07 14:14:17

标签: multithreading memory-management garbage-collection parallel-processing

跨多种语言(主要是D和Java / Jython)我注意到,由于内存管理瓶颈,没有明显同步瓶颈的并行程序通常无法很好地扩展到4个或更多核心。我知道线程本地分配器可以缓解这个问题,但是大多数垃圾收集器实现仍然需要阻止这个世界。垃圾收集并不是令人尴尬的并行(共享状态必须经常更新),因此使用并行收集器并不能完全解决问题。在手动内存管理的情况下,即使分配主要来自线程本地分配器,内存仍然必须被释放,可能来自与分配的不同的线程。

是否存在任何语言/运行时/ malloc实现,针对SMP并行性的内存管理瓶颈是出于实际目的解决的问题,同时仍然允许传统的共享地址空间多线程?

2 个答案:

答案 0 :(得分:0)

没有

您所描述的内存管理瓶颈是SMP计算机的固有特征,尽管不是理想的特征。处理器访问内存的需求迟早会压倒内存总线,并且处理速度会降低,或者最好通过添加更多处理器来更快地停止运行。

我很惊讶您通常只在4个内核上遇到此问题,过去我曾使用SGI Altix机器,我的部分代码可以扩展到256核以上。但是,无论是你的代码遇到4核的核心,还是256的核心或2048的其他代码(如果你能找到2048核心的SMP),总会有瓶颈。

答案 1 :(得分:0)

SMP系统的一个改进是NUMA感知的分配器/收集器,Java似乎已经拥有:http://download-llnw.oracle.com/javase/7/docs/technotes/guides/vm/performance-enhancements-7.html#numa

相关问题