互斥任务集的线程级并行性
Thread-level parallelism for set of mutually exclusive tasks
我在使用C 处理流数据时遇到了问题。数据有条目,每个条目的大小相对较小,并且任务处理每个条目不需要太多时间。但是每个条目以及该条目的任务处理都被分配给a class (一个概念,而不是C 类),其中只能在一个属于同一类的任务之一时间。
此外,还有数十亿个条目和一百万个课程,参赛以随机课程出现。
我发现很难平行这些任务。关于如何加快过程的任何建议将是很大的帮助!
真的谢谢!
将工作条目放入一组特定的工作队列中。将队列大小作为优先级,较大尺寸的优先级超过较小尺寸。设置优先级队列(队列)以根据其大小作为优先级举行特定于类的工作队列。
如果没有人处理该队列,则将工作条目输入其相应的队列。
设置与您拥有的CPU数量大小的线程池。
每个线程都要求优先队列以最高优先级工作队列,这可以说是最多的工作。该线程从优先级队列中删除类队列。然后,它处理该队列中的所有元素,而无需锁定。这样可以使每单位的开销保持较小。
如果该课程的新成员同时出现,则将它们添加到该类的新队列中,但不在优先级队列中。使用当前队列时的工作线程,检查是否存在同一类和过程的新队列。
您将每个硬件处理器左右都需要一个任务处理器。
每个处理器锁定一组活动类,在队列的前面丢失一堆作业,可以在当前的设置状态下运行,标记在集合中使用的这些作业,解锁集合和队列,然后流程。
每个粪便的工作量随工作率,处理器数量以及它们对敏感的敏感性和延迟敏感程度有所不同。
饥饿应该是不可能的,因为一旦免费处理一旦班级,就应该是很高的元素。
批处理工作以保持集合和排队低的争论:理想情况下,基于争论,空闲和延迟信息,动态更改批处理大小。
这使得开销与处理器数量成正比,而不是任务级数量。
- 如何在多线程中正确使用unique_ptr进行多态性?
- 并行块(线程清理器)之外的 OpenMP 中的争用条件;误报?
- 当 2 个线程共享同一物理内核时,具有错误共享的易失性增量在发布中的运行速度比在调试中慢
- System Verilog DPI - 在 cpp 中运行并行线程,在 SV 中运行另一个并行线程
- 是否可以限制C++17并行"for_each"的线程数
- 是否可以在并行区域中为共享 2D 数组创建选定元素的线程本地副本?(共享,私有,障碍:OPenMP)
- 如何从多个线程并行安全地访问和写入复杂容器?
- 查询时间/周期是针对所有内核/线程的序列化请求还是并行请求?
- 如何在新的 C++17 并行算法中管理线程?
- 在 C++11 线程中,std::mutex 对内存可见性有什么保证?
- 在任何地方对C++中所有并行线程中的所有锁定和解锁实例使用相同的 std::mutex 和 lock 对象
- 将执行从一个线程移动到另一个线程,以实现任务并行性并在将来调用
- 在C++中并行运行线程
- 互斥任务集的线程级并行性
- 并行性与线程 - 性能
- 从基于线程的流水线转向基于任务的并行性?(C++)
- std::async 使用相同的线程,我的代码没有实现并行性
- 英特尔 TBB 并行循环线程 ID
- 使用boost::Thread的线程管理和并行性
- 使用openmp并行中止线程