如何在多个线程上正确分发任务

How to distribute tasks properly across multiple threads

本文关键字:任务 线程      更新时间:2023-10-16

我有一个计算密集的程序,可以从简单的并行化中受益,因为任务列表中的每个任务都彼此独立。

我并不是那么熟悉并行计算基础的理论,我似乎找不到清楚的答案:

如何以干净的,规范的方式在N线程上分发M任务?

我对此的解决方案是运行要处理的过程的"块",即将列表中的第一个N任务分配给可用的n个线程特定程序所有任务将大致在同一时间)完成该块后,分配下一个N任务等,如果任务的数量不可分为n,则剩余的K<n任务并在剩余的N-K线程闲置时在K线程上执行它们。

在C 中,我敢肯定,我可以使用for loop和%操作员可以很容易地完成此操作。我知道这不是最有效的方法,但我认为在我的特殊情况下,"正确地"(即确保没有线程的闲置)的加速是可以忽略的。

这是正确的方法吗?或者,如果我有一个总M任务可以分配M线程并让处理器处理任务?

也许是可能的。

手工滚动之前,查看您的问题是否可以利用<algorithm>中的设施:

http://en.cppreference.com/w/cpp/algorithm

以这种方式,您可以利用执行策略,尽管实现了执行策略,但它试图在CPU饥饿和闲置之间找到理想的甜点,而不会因线程相关的机械或上下文切换而产生不必要的废物。至少,它会产生尽可能多的线程,并在搜索该最佳点时进行物理映射到平台。