Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为流程分配核心的好处_C++_Linux_Multithreading_Qt_Cpu - Fatal编程技术网

C++ 为流程分配核心的好处

C++ 为流程分配核心的好处,c++,linux,multithreading,qt,cpu,C++,Linux,Multithreading,Qt,Cpu,关于这个问题,我想知道真正的好处。例如,我有多进程QT C++应用程序,比如说7个过程,包括大量的科学计算和可视化。 该应用程序运行在最新的Ubuntu和8核CPU(4个真实和4个虚拟)上。提示:几乎所有进程都是单线程的。 在这种情况下,将单个进程分配给专用核心会带来性能方面的好处吗?理想情况下,我会将所有进程分配给专用核心,但我有一个进程是多线程的,并驱动一个设备。调制解调器cpu不会以恒定速度运行。有很多因素,包括调度器的选择(这可能取决于cpu温度和风扇噪声)、thermo boost/多

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

调制解调器cpu不会以恒定速度运行。有很多因素,包括调度器的选择(这可能取决于cpu温度和风扇噪声)、thermo boost/多步进级别等。从理论上讲,让所有cpu核心“最大输出”(因此没有boost)并不意味着您需要完成更多的工作。可能是,但你需要测量

现在假设我们想要“最大化”所有CPU核,以完成CPU限制的任务。现代ubuntu有一个不错的调度程序来防止内核之间不必要的线程传输,这会导致各种开销,包括跨CPU同步和TLB崩溃。所以,只要所有线程都使用自己的内核,它们通常会坚持使用它,除非调度器对cpu频率进行调整

TL;博士系统通常有更好的方法来使用机器,让调度器来做决定,并且它通常会将cpu绑定的线程固定到特定的内核上,除非是时候冷却它了


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

这有一个好处,是的,但前提是您还将其他进程与专用内核分开。问题是,你真的需要它吗?或者说,在你的情况下,你会感觉到它吗?
内核在为内核分配进程方面并不差,但它试图实现负载平衡,而且它不知道您的优先级,因此有时您不得不强迫它。
这样做的好处是,您的进程不会受到缓存未命中和上下文切换的影响。但是如果你做很多系统调用,比如IO,你会有上下文切换,我不确定你会感觉有多大不同。
专用内核通常用于不希望被其他任何东西中断的时间关键型线程。并且通常仅在shm和/或非内核IO上通信

在这种情况下,将单个进程分配给专用核心会带来性能方面的好处吗

如果您的工作内存集足够小,可能会出现这种情况。比如说,每个核心都有专用的一级32K D和32K I缓存,然后是每个模块(一对核心)的二级256K D和256K I缓存,然后是共享的6M三级缓存

从一个核心移动到另一个核心意味着抛出缓存,并在不同的核心上重新加载它。如果给定的workind内存集足够小,这可能很重要。如果您在16Gb内存集上跟踪指针,很可能什么也看不到


但是你必须测量并告诉我们你发现了什么?注意你没有“4个虚拟核”。所有8个核都是虚拟的,但每对虚拟核共享一个物理核。新的Linux内核知道这一区别,并在为内核分配线程时考虑到这一点。