Parallel processing 并行动态规划

Parallel processing 并行动态规划,parallel-processing,dynamic-programming,program-transformation,Parallel Processing,Dynamic Programming,Program Transformation,有没有好的论文讨论如何采用动态规划并将其并行化?IIRC,动态规划的典型做法是递归地将问题划分为子问题,并从最优子解中组合出最优解。使其有效的是,所有最佳子分辨率都内置在缓存中,因此无需重新计算 如果问题可以分为多种方式,则可以为每个子解决方案分叉解算器。如果每个(子)问题平均1+ε(有趣的是,ε大于零)可能的子解,那么通过这种方式您将获得大量并行性。您可能需要锁定缓存项,以防止单个解决方案被多次构造 您需要一种语言,在这种语言中,您可以以比解决子任务更便宜的成本分叉子任务,并且可以同时拥有大量

有没有好的论文讨论如何采用动态规划并将其并行化?

IIRC,动态规划的典型做法是递归地将问题划分为子问题,并从最优子解中组合出最优解。使其有效的是,所有最佳子分辨率都内置在缓存中,因此无需重新计算

如果问题可以分为多种方式,则可以为每个子解决方案分叉解算器。如果每个(子)问题平均1+ε(有趣的是,ε大于零)可能的子解,那么通过这种方式您将获得大量并行性。您可能需要锁定缓存项,以防止单个解决方案被多次构造

您需要一种语言,在这种语言中,您可以以比解决子任务更便宜的成本分叉子任务,并且可以同时拥有大量分叉任务。大多数语言中典型的并行产品在这方面做得很糟糕;在使用“大堆栈模型”的系统中,不能有很多分叉任务(请参阅)


我们实现了并行编程语言PARLANSE,以获得具有正确属性的语言。

我们最近发表了一篇论文,展示了如何通过共享无锁哈希表在共享内存多核计算机上并行任何d.p.:

Stivala,A.和Stuckey,p.J.和Garcia de la Banda,M.和Hermenegildo,M.和Wirth,A.2010“无锁并行动态规划”J.并行分布。计算机。70:839-848 doi:10.1016/j.jpdc.2010.01.004

本质上,您启动多个线程,所有线程都运行相同的代码,从要计算的d.p.值开始,自上而下(递归)计算,并在共享无锁哈希表中进行记忆,但要随机化子问题的计算顺序,以便线程在它们计算的子问题中发散

在实现方面,我们只是在UNIX类型的系统上使用了C和pthreads,您所需要的只是能够拥有共享内存,并比较DSAP(CAS)以实现线程之间的无锁同步


因为这篇文章发表在爱思唯尔杂志上,所以你需要通过大学图书馆或类似的图书馆订阅来获取上述内容。不过,您可能可以通过Stuckey教授的网页获得预打印副本。

已经有一些与在GPU上实现动态编程算法相关的工作。例如:




我在大学里就这个问题写了一篇论文,在图书馆里找到了很多书,但几乎没有论文。我们在哪里找到你的论文?@Windfinder:这是你的机会……如果存储答案的哈希表很大,任何哈希表元素的争用率都可能接近于零。我不清楚“无锁”版本是否比简单的、实现良好的锁更快,因为每次尝试锁定都会在第一次尝试时获得统计上的成功。(CAS可用于无锁,但在CAS执行期间仍会锁定对缓存线的访问,就像任何同步原语一样)