Tag: 任务

使用OpenMP-Tasks的生产者 – 消费者

我正在尝试使用OpenMP中的任务实现并行算法。 并行编程模式基于生产者 – 消费者的想法,但由于消费者流程比生产者慢,我想使用一些生产者和几个消费者。 主要思想是创建与生产者一样多的OS线程,然后每个线程创建要并行完成的任务(由消费者完成)。 每个生产者都将与相应数量的消费者(即numCheckers / numSeekers)相关联。 我在英特尔双芯片服务器上运行该算法,每个芯片有6个内核。 问题在于,当我只使用一个生产者(寻求者)和越来越多的消费者(检查员)时,随着消费者数量的增长,性能衰退得很快(见下表),即使正确的核心数量在100%。 另一方面,如果我增加生产者的数量,平均时间减少或至少保持稳定,即使消费者数量成比例。 在我看来,所有的改进都是通过生产者之间的输入划分来实现的,而且任务只是烦恼。 但同样,我对一个生产者的行为没有任何解释。 我在OpenMP-Task逻辑中遗漏了什么? 难道我做错了什么? ————————————————————————- | producers | consumers | time | ————————————————————————- | 1 | 1 | 0.642935 | | 1 | 2 | 3.004023 | | 1 | 3 | 5.332524 | | 1 | 4 | 7.222009 | | 1 | […]