gpt4 book ai didi

linux - CPU亲和性的优缺点

转载 作者:太空狗 更新时间:2023-10-29 11:05:09 25 4
gpt4 key购买 nike

假设我有一个多线程应用程序(比如大约 40 个线程)在多处理器系统(比如 8 个内核)上运行,使用 Linux 作为操作系统,其中不同的线程更本质上是由内核调度的 LWP(轻量级进程) .

使用 CPU 亲和性有哪些优点/缺点? CPU 亲和性是否会通过将线程本地化到核心子集从而最大限度地减少缓存共享/未命中来提供帮助?

最佳答案

如果您使用严格关联,那么特定线程必须在该处理器(或处理器组)上运行。如果您有许多完全独立工作的线程,并且它们在比几千字节更大的内存块上工作,那么您不太可能从在一个特定内核上运行获益太多——因为很可能在这个特定 CPU 上运行其他线程会丢弃任何 L1 缓存,也很可能丢弃 L2 缓存。哪个对性能更重要——缓存内容还是“更快运行”?某些 CPU 是否始终处于空闲状态,或者每个内核的 CPU 负载是否为 100%?

但是,只有您知道(直到您告诉我们)您的线程在做什么。他们每次运行时接触的“工作集”有多大(多少内存 - 代码和数据)?每个线程在运行时运行多长时间?与其他线程的交互是什么?其他线程是否使用与“此”线程共享的数据?分享多少,分享的模式是什么?

最后,最终的答案是“是什么让它跑得更快?” - 只有拥有良好(现实的)基准并尝试不同的可能选项才能找到答案。即使您给我们每一行代码、每个线程的运行时间测量等,我们也只能做出或多或少复杂的猜测——直到这些已经被尝试和测试(使用不同的使用模式),这几乎是不可能的知道。

一般来说,我建议有很多线程要么表明每个线程不是很忙(CPU 方面),要么你“做错了”......更多的线程并不是更好一切都全力以赴——在这种情况下最好使用更少的线程,因为它们只会互相争斗。

关于linux - CPU亲和性的优缺点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14170127/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com