【发布时间】:2014-03-06 15:53:07
【问题描述】:
我正在寻找一些关于数据结构的数据并行算法,例如不使用同步但使用关键部分以保持状态一致的列表或图表。
到目前为止,我只遇到过两种算法
同步:他们处理他们更改的数据的本地副本,并在某些时隙交换他们的当前状态以进行下一步(例如单步并行本地搜索),或者是
无竞争条件:它们细分数据结构,以便每个部分都可以通过共享内存单独安全地处理(例如并行快速排序)
你知道任何可理解的(半)异步算法
- 细分必须由多个处理器单独处理的数据,
- 交换处理器在每个步骤中通过共享内存(例如通过使用临界区)生成的一些数据,因此,
- 仅松散同步,但不依赖心跳方案或其他重量级同步措施?
编辑:我使用 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