互斥任务集的线程级并行性

Thread-level parallelism for set of mutually exclusive tasks

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

我在使用C 处理流数据时遇到了问题。数据有条目,每个条目的大小相对较小,并且任务处理每个条目不需要太多时间。但是每个条目以及该条目的任务处理都被分配给a class (一个概念,而不是C 类),其中只能在一个属于同一类的任务之一时间。

此外,还有数十亿个条目和一百万个课程,参赛以随机课程出现。

我发现很难平行这些任务。关于如何加快过程的任何建议将是很大的帮助!

真的谢谢!

将工作条目放入一组特定的工作队列中。将队列大小作为优先级,较大尺寸的优先级超过较小尺寸。设置优先级队列(队列)以根据其大小作为优先级举行特定于类的工作队列。

如果没有人处理该队列,则将工作条目输入其相应的队列。

设置与您拥有的CPU数量大小的线程池。

每个线程都要求优先队列以最高优先级工作队列,这可以说是最多的工作。该线程从优先级队列中删除类队列。然后,它处理该队列中的所有元素,而无需锁定。这样可以使每单位的开销保持较小。

如果该课程的新成员同时出现,则将它们添加到该类的新队列中,但不在优先级队列中。使用当前队列时的工作线程,检查是否存在同一类和过程的新队列。

您将每个硬件处理器左右都需要一个任务处理器。

每个处理器锁定一组活动类,在队列的前面丢失一堆作业,可以在当前的设置状态下运行,标记在集合中使用的这些作业,解锁集合和队列,然后流程。

每个粪便的工作量随工作率,处理器数量以及它们对敏感的敏感性和延迟敏感程度有所不同。

饥饿应该是不可能的,因为一旦免费处理一旦班级,就应该是很高的元素。

批处理工作以保持集合和排队低的争论:理想情况下,基于争论,空闲和延迟信息,动态更改批处理大小。

这使得开销与处理器数量成正比,而不是任务级数量。