【发布时间】:2012-08-13 11:34:41
【问题描述】:
我并行化了一个 Java 程序。在具有 4 核的 Mac 上,以下是不同线程数的时间。
threads # 1 2 4 8 16
time 2597192200 1915988600 2086557400 2043377000 1931178200
在具有两个套接字的 Linux 服务器上,每个套接字有 4 个内核,下面是测量的时间。
threads # 1 2 4 8 16
time 4204436859 2760602109 1850708620 2370905549 2422668438
如您所见,加速比远离线性加速。在这种情况下几乎没有并行化开销,例如同步或 I/O 依赖项。
我有两个问题:
- 这些数据是否暗示此 Java 程序受内存限制?
- 如果是这样,有没有什么方法可以在不改变硬件的情况下进一步提高性能?
【问题讨论】:
-
线程绑定(即不允许操作系统在 CPU 之间移动线程)对于内存绑定程序非常重要,尤其是在 NUMA 系统上运行时。请参阅this answer,了解有关内存带宽如何随不同系统上的线程数扩展的线索。
标签: multithreading performance optimization parallel-processing memory-bandwidth