什么是好的(半)异步算法?

时间:2014-02-09 10:58:31

标签: algorithm asynchronous parallel-processing synchronization shared-memory

我在数据结构上寻找一些数据并行算法,例如列表或图形,它们不使用同步但是使用关键部分以保持状态一致。

到目前为止,我只遇到了

的算法
  • 同步:他们处理他们更改的数据的本地副本,并在某些时间段交换当前状态以进行下一步(例如单步并行本地搜索),或者

  • 无竞争条件:他们细分数据结构,以便可以使用共享内存(例如并行Quicksort)单独安全地处理每个部分

你知道任何可理解的(半)异步算法

  1. 细分必须由多个处理器单独处理的数据
  2. 通过共享内存(例如,通过使用关键部分)交换处理器在每个步骤中生成的一些数据,因此,
  3. 只是松散地同步,但不依赖于心跳方案或其他重量级同步措施?
  4. 编辑:我正在使用H. T. Kung的技术报告Synchronized and asynchronous parallel algorithms for multiprocessors中的术语。

    EDIT2:为了澄清术语,本文区分了不同类型的算法:

    • 同步(例如,生命游戏的心跳方法)
    • 异步:每个处理器可以主要独立工作,并可以随时通过共享内存将结果传送给其他处理器。然后,通信可能会影响其他处理器中的下一步计算(例如,通过并行二进制搜索在单调会聚区间中找到零函数)
    • 半异步/同步:同步发生,但比同步算法更少。

2 个答案:

答案 0 :(得分:5)

异步:有belief propagationsuccessive over-relaxation等迭代算法的并行版本,与Life不同,它可以容忍陈旧数据,因此不需要心跳。 (在不是顺序一致的系统上的实际实现可能需要写入障碍。)

半同步:几乎所有具有细粒度锁定的数据结构。通常的想法是仅锁定正在处理的部分(例如,对于二叉搜索树,从根锁定路径,可能使用读写器锁)。

答案 1 :(得分:1)

我不确定这是否符合“关于列表或图表等数据结构”的要求,但并行遗传算法可以维持共享的有希望的基因库。一个免费的处理器需要一个并执行一代进化,将更好的结果(以及可能随机选择的劣质遗传多样性)放回池中。