为进程分配核心的好处

时间:2015-07-21 08:18:28

标签: c++ linux multithreading qt cpu

关于whole core to process,我想知道真正的好处。例如,我有多进程Qt C ++应用程序,比如7个进程,包括大量的科学计算和可视化。 该应用程序运行在最新的Ubuntu和8核CPU(4真实和4虚拟)。提示:几乎所有进程都是单线程的。 将单个流程分配给专用核心会在这种情况下带来任何性能优势吗?理想情况下,我会将所有进程分配给专用核心,但我有一个多线程进程并驱动设备。

3 个答案:

答案 0 :(得分:1)

有一个好处,是的,但前提是你还要让其他进程远离专用内核。问题是你真的需要它,或者换句话说,你觉得它在你的情况下吗?
内核在将进程分配给核心方面并不差,但是它试图加载平衡而且它不知道你的优先级,所以有时候你必须强迫它。 好处是您的进程将受到缓存未命中和上下文切换的影响。但是如果你做了很多系统调用,比如说IO,你就会有上下文切换,我不确定你是否感觉到了很大的不同。
专用内核通常用于时间要求严格的线程,您不希望被其他任何内容中断。并且通常仅在shm和/或非内核IO上进行通信。

答案 1 :(得分:0)

modem cpu不以恒定速度运行。有许多因素,包括调度程序的选择(可能取决于CPU温度和风扇噪音),热升压/多步进等级。理论上,所有CPU核心“最大输出”(因此没有升压)并不一定意味着你正在完成更多的工作。它可能是,但你需要衡量。

现在假设我们想要“最大化”CPU绑定任务的所有CPU核心。现代的ubuntu有很好的调度程序来防止核心之间不必要的线程传输,这会导致所有类型的开销,包括跨CPU同步和TLB击落。因此,只要所有线程都使用自己的内核,除非调度程序对cpu频率进行调整,否则它们通常会坚持使用它。

TL; DR;系统通常有更好的想法来利用机器,让调度程序做出决定,它通常会将你的cpu绑定线程粘贴到特定的核心,除非是时候冷却它。

您希望指定要处理的核心的时间是为系统保留一个核心以执行I / O操作。

答案 2 :(得分:0)

  

将单个流程分配给专用核心会在这种情况下带来任何性能优势吗?

如果你的工作记忆集足够小,它可能会。比如说,每个核心都有专用的L1 32K D-和32K I-cache,然后说每个模块(核心对)L2 256K D-和256K I-cache,然后共享6M L3缓存。

从核心迁移到核心意味着抛弃缓存,并在不同的核心上重新加载它。如果你给定的workind内存集足够小,那可能很重要。如果你追逐超过16Gb内存集的指针,很可能你不会看到任何东西

但你必须真正衡量