为进程分配核心的好处
Benefits of assigning cores to the process
关于整个核心到过程,我想知道真正的好处。例如,我有一个多进程Qt c++应用程序,有7个进程,包括大量的科学计算和可视化。该应用程序运行在最新的Ubuntu和8核CPU(4实4虚)上。提示:几乎所有进程都是单线程的。在这种情况下,将单个进程分配给专用核心是否会带来性能优势?理想情况下,我会将所有进程分配给专用核心,但我有一个进程是多线程的,并驱动设备。
这是有好处的,但前提是你要让其他进程远离你的专用核心。问题是,你真的需要它吗,或者换句话说,你觉得它适合你吗?
内核在将进程分配给内核方面还不错,但它试图保持负载平衡,它不知道你的优先级,所以有时你必须强迫它。这样做的好处是,您的进程将较少受到缓存丢失和上下文切换的影响。但是如果你做很多系统调用,比如IO,你会有上下文切换,我不确定你会感觉到有多大的不同。专用内核通常用于时间紧迫的线程,您不希望被其他任何东西中断。并且通常只在shm和/或非内核IO上通信。
modem CPU非恒速运行。有许多因素,包括调度程序的选择(这可能取决于cpu温度和风扇噪音),热提升/多步进水平等。从理论上讲,拥有所有CPU核心"最大限度"(因此没有boost)并不意味着您可以完成更多的工作。可能是,但你需要衡量。
现在假设我们想为CPU绑定任务"最大化"所有CPU内核。现代ubuntu有很好的调度程序来防止内核之间不必要的线程传输,这会导致各种开销,包括跨cpu同步和TLB崩溃。因此,只要所有线程都使用自己的内核,它们通常会坚持使用它,除非调度程序对cpu频率进行调整。
TL,博士;系统通常有更好的想法来利用机器,让调度程序做决定,它通常把你的cpu绑定线程固定到特定的核心,除非是时候冷却它了。
指定要处理的内核的时间是为系统保留一个内核来执行I/O操作。
在这种情况下,将单个进程分配给专用核心是否会带来任何性能优势?
如果你的工作记忆集足够小,它可能会。比如说,每个核心都有专用的L1 32K D和32K i缓存,然后说每个模块(对核心)L2 256K D和256K i缓存,然后共享6M L3缓存。
从一个核心移动到另一个核心意味着扔掉你的缓存,并在不同的核心上重新加载它。如果给定的工作内存集足够小,这可能很重要。如果您在16Gb内存集上跟踪指针,很可能看不到任何内容
但是你必须测量
- boost::进程间消息队列引发错误
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 如何找出GDB的SIGTRAP核心转储的根本原因
- C++映射分割错误(核心转储)
- 尽管测试成功,CppUnit测试核心仍被丢弃.为什么
- IPC使用多个管道和分支进程来运行Python程序
- 异常属于C++中的线程还是进程
- WMI检测进程创建事件-c++
- 在c++中初始化矩阵时出现分段错误(核心转储)
- C++核心准则 C35 对于接口类"A base class destructor should be either public and virtual, or protected and nonv
- 为什么我的 Redhat 服务器上的 QuickFIX 进程没有将其核心文件写入应有的位置?
- 使用C++将CPU专用于在1个核心上运行进程
- 使用SIGSEGV或SIGABRT信号转储核心并终止进程
- 将进程锁定到 Cuda 核心
- CPP GDB 崩溃,没有核心和 GDB 附加到工作进程
- 得到错误分割错误(核心转储)进程返回139 (0x8B)
- 为进程分配核心的好处
- 使用C++设置进程核心配额
- 是否可以转储核心但不退出进程