我在互联网上搜索,以便找到一些算法,可以使用2个或n个进程并行遍历图形,而没有一个进程进入另一个进程的先前访问过的节点,因此我可以加快总扫描任务的速度。整个图,但我找不到任何东西。是否有任何算法可以帮助我并行执行此类任务?这值得吗?
注意: n个进程共享访问和访问节点的相同内存
谢谢
答案 0 :(得分:2)
除非大部分时间花在实际遍历上,否则您可以在单个线程上遍历图形,并在每个节点上排队工作,以便从多个进程并行处理。在队列中工作后,您可以使用简单的生产者 - 消费者模型。
答案 1 :(得分:2)
您可以尝试使用消费者 - 生产者模型来遍历图表 - 但是对纯模型进行了一些修改:
visited
集。它将为您节省同步时间 - 这将需要不那么频繁地完成。visited
设置)时 - 您应该做一些额外的工作,以确保您不添加自上次检查该集以来已访问过的数据。请注意,使用这种方法 - 您可能会多次搜索某些顶点 - 但您可以将其与队列和visited
集更新的频率绑定。
值得吗?在这些事情中很难说 - 它依赖于很多东西(图形结构,大小,队列实现......)。
您应该运行一些测试并尝试微调“更新频率”的参数,并检查哪个更符合经验。您应该使用statistical tools(wilcoxon test通常是事实上的标准)并确定一个是否优于另一个。