Multithreading 在一组共享资源上将作业动态分配给处理器 问题

Multithreading 在一组共享资源上将作业动态分配给处理器 问题,multithreading,algorithm,parallel-processing,scheduling,job-scheduling,tbb,Multithreading,Algorithm,Parallel Processing,Scheduling,Job Scheduling,Tbb,我有一个要并行处理的对象集合。每个对象由一组子对象组成。限制是不能同时处理共享公共子对象的两个对象 我认为这应该是一个标准问题。如果有人能引导我找到正确的阅读资料,那对我来说就足够了 例子 对象:{AB}、{CD}、{EF}、{BD}、{FA} 因此{AB}和{BD}不能并行运行,因为它们共享资源B 天真的想法 贪婪的想法: 主线程保留一组当前活动/进程中的子对象。如果要处理的下一个对象不共享活动集中的任何资源,则分配工作,或者将工作包推到对象队列的后面,以便以后可以处理它。主线程集必须被锁定,

我有一个要并行处理的对象集合。每个对象由一组子对象组成。限制是不能同时处理共享公共子对象的两个对象

我认为这应该是一个标准问题。如果有人能引导我找到正确的阅读资料,那对我来说就足够了

例子 对象:{AB}、{CD}、{EF}、{BD}、{FA}

因此{AB}和{BD}不能并行运行,因为它们共享资源B

天真的想法 贪婪的想法:

主线程保留一组当前活动/进程中的子对象。如果要处理的下一个对象不共享活动集中的任何资源,则分配工作,或者将工作包推到对象队列的后面,以便以后可以处理它。主线程集必须被锁定,所有内容都必须被锁定

划分思想

我考虑将对象划分为多个集合,以确保集合之间的对象是互斥的。例如,创建依赖关系图,因此创建edge btw AB-->BD,因为它们共享一个资源。然后并行处理所有断开连接的子图。 但是,这将不会是非常负载均衡的,也可能不是非常有效

  • 有一个标准的平行模式吗
  • 在处理之前锁定子对象的每个线程都应该很简单。我正在寻找的东西,可以尽量减少锁定
提前感谢:)

一种方法是使用:,其中对象由表示,任务由表示,依赖项通过类似的连接,这看起来像是更一般的问题陈述的子集。下图显示了[AB][BC][CD][DA]等任务:

这幅画取自


你的目标函数是什么?你所说的目标函数是什么意思?你想实现什么?最短处理时间?最大负载平衡?我希望尽可能减少处理完整对象集合所需的时间。+1仅用于链接到问题。我希望我能为tbb参考做另一个+1。我以前可能读过这个!谢谢提醒。让我现在读更多