我在数据结构上寻找一些数据并行算法,例如列表或图形,它们不使用同步但是使用关键部分以保持状态一致。
到目前为止,我只遇到了
的算法同步:他们处理他们更改的数据的本地副本,并在某些时间段交换当前状态以进行下一步(例如单步并行本地搜索),或者
无竞争条件:他们细分数据结构,以便可以使用共享内存(例如并行Quicksort)单独安全地处理每个部分
你知道任何可理解的(半)异步算法
编辑:我正在使用H. T. Kung的技术报告Synchronized and asynchronous parallel algorithms for multiprocessors中的术语。
EDIT2:为了澄清术语,本文区分了不同类型的算法:
答案 0 :(得分:5)
异步:有belief propagation和successive over-relaxation等迭代算法的并行版本,与Life不同,它可以容忍陈旧数据,因此不需要心跳。 (在不是顺序一致的系统上的实际实现可能需要写入障碍。)
半同步:几乎所有具有细粒度锁定的数据结构。通常的想法是仅锁定正在处理的部分(例如,对于二叉搜索树,从根锁定路径,可能使用读写器锁)。
答案 1 :(得分:1)
我不确定这是否符合“关于列表或图表等数据结构”的要求,但并行遗传算法可以维持共享的有希望的基因库。一个免费的处理器需要一个并执行一代进化,将更好的结果(以及可能随机选择的劣质遗传多样性)放回池中。