【问题标题】:What are good (semi-) asynchronous algorithms?什么是好的(半)异步算法?
【发布时间】:2014-03-06 15:53:07
【问题描述】:

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

到目前为止,我只遇到过两种算法

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

  • 无竞争条件:它们细分数据结构,以便每个部分都可以通过共享内存单独安全地处理(例如并行快速排序)

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

  1. 细分必须由多个处理器单独处理的数据,
  2. 交换处理器在每个步骤中通过共享内存(例如通过使用临界区)生成的一些数据,因此,
  3. 仅松散同步,但不依赖心跳方案或其他重量级同步措施?

编辑:我使用 H. T. Kung 的技术报告 Synchronized and asynchronous parallel algorithms for multiprocessors 中的术语。

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

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

【问题讨论】:

  • 如何遍历一个有向无环图,其中一个节点只有在处理完所有入站边之后才能处理?同步这可以通过锁或基于延续的模型来完成。另一个想法:为矩阵的每个单元格计算一些值,其中值需要顶部和左侧邻居作为输入。您可以使用从左上角移动到右下角的平行波前处理这样的矩阵。
  • 好吧,波前应用于最长公共子序列问题 (LCS) 似乎是一个不错的选择,虽然我认为这将被视为一种同步算法,不是吗?对于更异步的算法有什么想法吗?
  • 你能更精确地定义异步吗?
  • @usr 当然,我希望第二次编辑能澄清一点。
  • 看一下论文“An asynchronous multithreaded algorithm for the maximum network flow problem with nonblocking global relabeling heuristic”(B. Hong 等人)这是一个完全异步的 push-relabel 变体

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


【解决方案1】:

我不确定这是否符合“在列表或图表等数据结构上”的条件,但并行遗传算法维护了一个共享的有前途的基因库。一个免费的处理器获取一个并执行一代进化,将优越的结果(可能是随机选择的遗传多样性较差的结果)放回池中。

【讨论】:

    【解决方案2】:

    异步:有迭代算法的并行版本,例如 belief propagationsuccessive over-relaxation,与 Life 不同,它们容忍过时的数据,因此不需要心跳。 (不过,在非顺序一致的系统上的实际实现可能需要写屏障。)

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-27
      • 1970-01-01
      • 2014-10-06
      • 1970-01-01
      相关资源
      最近更新 更多