【问题标题】:Using just the right number of logical processors使用正确数量的逻辑处理器
【发布时间】:2012-03-03 13:35:06
【问题描述】:

有没有一种方法可以(使用英特尔的 tbb)指定它们的并行循环使用的逻辑处理器的数量?比如,我希望能够检测逻辑处理器的数量并指定我想为这个任务使用多少个。

【问题讨论】:

  • 您为什么要这样做?这是 TBB 的工作。
  • @ronag 我希望能够在某些情况下自己指定它(如果可能的话)
  • 在什么“特定情况下”?我想不出你想要这样做的单一情况。
  • @ronag 假设我有 4 个处理器。我希望我的任务只使用其中的 2 个(以便将另外两个用于不同的目的)
  • 也许搜索“CPU pinning”。不过,不确定这是否正确。

标签: c++ windows intel tbb


【解决方案1】:

我假设您的意思是线程,而不是处理器。

int main()
{
    tbb::task_scheduler_init init(num_threads);
    ...
}

虽然我仍然认为让 TBB 自动处理它会更好。

编辑:基于 cmets,你想要的是这样的:

int main()
{
    struct tbb_set_affinity : public tbb::task_scheduler_observer
    {
         tbb_set_affinity(){observe(true);}
         void on_scheduler_entry(bool is_worker)
         {
            SetThreadAffinityMask(...);
         }
   } tbb_set_affinity;

   tbb::task_scheduler_init init(num_processors);
   ...
}

【讨论】:

  • 我同意你的观点,在大多数情况下最好让 tbb 自动处理它。但是在某些情况下,您希望让用户决定/能够决定。
  • 我不知道 ronag 的回答是否正确,但有道理。如果你想限制你的函数使用的处理器数量,那么你必须限制你的函数启动/激活的线程数......
  • @Malkocoglu 不,你的逻辑坏了。
  • @smallB:实际上你的逻辑被打破了,如果你只有 2 个线程,那么它最多只能使用 2 个处理器,我猜你想要的是一些线程亲和力。
  • @ronag:线程亲和性在大多数操作系统上是不鼓励的,因为它确实会打乱调度并经常降低性能。如果可能的话,我会避免它。
猜你喜欢
  • 2019-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-21
  • 2017-09-18
  • 2014-02-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多