如何使用tbb :: parallel_invoke并行运行大量任务?

时间:2014-02-24 02:28:27

标签: tbb parallel-for

我的问题类似于生产者 - 消费者问题。对于例如我需要并行运行999个生产者和1个消费者。基本上所有999个生产者都做同样的任务。

1 个答案:

答案 0 :(得分:3)

TBB(以及Cilk Plus和PPL)等并行框架专注于可选的并发性,这使得它们能够收获足够的数量以保持机器忙碌但不会使机器超载。

如果生产者之间的并发性是必需的那么大多数TBB结构都是不合适的。例如,tbb::parallel_for并未承诺它将并行运行任何内容。如果它现在可用,它只使用并行性。对于强制并发,每个生产者需要一个单独的std::thread。运行999个线程时,除非你的机器有999个硬件线程,或者大部分线程都在大部分时间内保持休眠状态(例如使用条件变量),否则不要指望加速很快。