如何在多个线程上正确分发任务
How to distribute tasks properly across multiple threads
我有一个计算密集的程序,可以从简单的并行化中受益,因为任务列表中的每个任务都彼此独立。
我并不是那么熟悉并行计算基础的理论,我似乎找不到清楚的答案:
:如何以干净的,规范的方式在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饥饿和闲置之间找到理想的甜点,而不会因线程相关的机械或上下文切换而产生不必要的废物。至少,它会产生尽可能多的线程,并在搜索该最佳点时进行物理映射到平台。
相关文章:
- 如何创建线程序列以按照启动顺序执行任务?
- C++一个线程如何正确通信其任务已完成?
- 对于同一任务,线程的等待时间在 0 到 30000 微秒之间系统地切换
- 在iOS设备上执行并发任务时如何设置正确的线程数?
- 如何从父线程中提取 pthread 的任务 id(tid)
- 根据硬件并发性将任务平均划分为线程
- C++生产者使用者中,同一使用者线程会抓取所有任务
- 正在执行 omp 任务的线程数
- 您可以在 OpenMP 中将特定线程 ID 分组到唯一的任务组中吗?
- 是boost :: asio :: thread_pool线程在多个线程上发布任务时的安全性
- asio::strand 上的任务在单个线程上运行
- 如何在C++中创建高效的多线程任务计划程序
- 如何在多个线程上正确分发任务
- 在多线程中调度任务
- Poco任务管理器/Boost线程混合和匹配
- 将执行从一个线程移动到另一个线程,以实现任务并行性并在将来调用
- 使用C 多任务.线程或不同的设计
- 如何处理任务,同时剩余的线程完成工作
- 提升:偶尔同步任务的ASIO线程池实现
- PPL任务何时在UI线程上执行