如何与2个或n个进程并行遍历图形

时间:2012-11-30 17:23:57

标签: algorithm graph-algorithm

我在互联网上搜索,以便找到一些算法,可以使用2个或n个进程并行遍历图形,而没有一个进程进入另一个进程的先前访问过的节点,因此我可以加快总扫描任务的速度。整个图,但我找不到任何东西。是否有任何算法可以帮助我并行执行此类任务?这值得吗?

注意: n个进程共享访问和访问节点的相同内存

谢谢

2 个答案:

答案 0 :(得分:2)

除非大部分时间花在实际遍历上,否则您可以在单个线程上遍历图形,并在每个节点上排队工作,以便从多个进程并行处理。在队列中工作后,您可以使用简单的生产者 - 消费者模型。

答案 1 :(得分:2)

您可以尝试使用消费者 - 生产者模型来遍历图表 - 但是对纯模型进行了一些修改:

  • 以块为单位读取和写入队列,而不是一次读取元素,同时更新块中的visited集。它将为您节省同步时间 - 这将需要不那么频繁地完成。
  • 当您修改队列(以及visited设置)时 - 您应该做一些额外的工作,以确保您不添加自上次检查该集以来已访问过的数据。

请注意,使用这种方法 - 您可能会多次搜索某些顶点 - 但您可以将其与队列和visited集更新的频率绑定。

值得吗?在这些事情中很难说 - 它依赖于很多东西(图形结构,大小,队列实现......)。

您应该运行一些测试并尝试微调“更新频率”的参数,并检查哪个更符合经验。您应该使用statistical toolswilcoxon test通常是事实上的标准)并确定一个是否优于另一个。