Hal*_*der 2 multithreading boost multicore
在 32 核系统中,进程 (A) 完全消耗 4 个核(顶部 400% cpu 使用率)。其余的核心都是可用的。它会影响另一个进程(B)的性能吗?如果进程(A)不运行,进程(B)会运行得更好,那么为什么呢?
Process(B) 使用 boost 和多个线程(比如 24)。
我预计 Process-B 的性能不会受到 Process-A 的影响,因为有 32 个核心。
一般来说,是的,运行一个进程可能会减慢其他进程的速度,即使并非所有核心都处于活动状态。实际上,影响很大程度上取决于正在执行的代码。
发生这种情况是因为某些硬件资源是共享的。最常见的是存储设备、网络、RAM、LLC 缓存(通常是 L3)。例如,很少有核心通常足以使 RAM 带宽饱和,因此如果两个进程受内存限制,那么使用超过 8 个核心通常不会明显加快速度。HDD 存储设备并行速度往往不会更快,因此当两个进程尝试同时大量使用它时,它们通常会明显变慢。实际上,它们的速度可能会慢 2 倍以上,因为 HDD 的读取时间很长,并且进行多次随机访问的进程会大大减慢读取/写入大型连续文件的进程的速度。
在 NUMA 系统上,事情可能有点复杂,因为由于目标节点的 RAM 饱和和 NUMA 分配策略,在同一 NUMA 节点上运行的 2 个进程可能比在不同 NUMA 节点上运行的 2 个进程慢。在极少数情况下,在不同 NUMA 节点上运行的 2 个进程可能比在同一 NUMA 节点上运行慢。如果进程相互通信(由于属于不同 NUMA 节点的核心之间的延迟较高),或者如果进程与绑定到特定 NUMA 节点(不是进程运行的节点)的硬件资源进行通信(例如,具有高性能互连的GPU、高性能Infiniband设备等)
请注意,某些软件资源也可以共享。操作系统可以锁定它们,以便简化其代码某些部分的维护,或者只是因为资源从根本上不能以可扩展的方式并行使用。从历史上看,某些操作系统使用了巨大的锁来阻止几乎所有系统调用的扩展。由于多核处理器的民主化,这种锁已逐渐被更细粒度的锁或根本没有锁(例如原子)所取代。请注意,即使是原子数据结构在大多数处理器上也不能很好地扩展,因此对同一数据结构进行操作的系统调用往往会影响多核系统上的其他正在运行的进程。不过,最大的问题通常是共享硬件资源的饱和。
| 归档时间: |
|
| 查看次数: |
80 次 |
| 最近记录: |