【问题标题】:Linux - Limit threads per processLinux - 限制每个进程的线程
【发布时间】:2014-06-14 06:51:46
【问题描述】:

我编写了一个 C++ 程序,它对几种算法进行了一些基准测试。其中一些算法正在使用其他库进行计算。这些外部库(我无法控制)使用多线程,因此很难获得适当的基准(有些算法是单线程的,有些是多线程的)。

所以在进行基准测试时,我想将线程限制为 1。无论如何我可以在 Linux 中启动一个程序并告诉它使用最多 1 个线程,而不是外部库中的默认值(即等于核心数)?

【问题讨论】:

  • 我不太明白。如果您想在您的硬件上对它们的性能进行基准测试,为什么要限制它们呢?如果没有,你到底想做什么?

标签: c++ linux multithreading process parallel-processing


【解决方案1】:

我不确定您从操作系统的角度提出的问题 [操作系统可以做什么?请求下一个线程时返回失败?]。

我会在库文档中进行搜索,他们可能会为他们正在使用的线程数提供配置值。

或者,您可以使用processor affinity 执行taskset command

这并不完全符合您的要求,但它确保您的程序将在给定的 CPU(或一组 CPU)上运行。因此,无论产生多少线程,程序在任何时候都将使用最多一个 CPU(或指定的 CPU 数量),因此有效并行度将受到控制。


Alternatively x2 由@goocreations 的评论触发...欺骗程序相信它们有不同数量的可用 CPU 的一种方法是在虚拟机中运行它们(例如 @987654323 @)

【讨论】:

  • 这反过来又会惩罚多线程程序两次:首先它们会从必要的同步中获得开销,其次它们会获得大量的上下文切换成本。但是,如果图书馆真的不提供选项(即使那样你可能会得到成本#1),那是最好的。但不会很有意义。
  • 库启动线程的方式是确定有多少内核可用,然后启动相同数量的线程。难道他们没有任何方式可以通过告诉他们只有一个内核可用来欺骗库,以便他们只会产生一个线程吗?
猜你喜欢
  • 1970-01-01
  • 2011-08-03
  • 1970-01-01
  • 2020-10-15
  • 2011-03-01
  • 2019-02-14
  • 1970-01-01
  • 2011-11-26
相关资源
最近更新 更多