2012年11月存档

通过记忆实现并行推测加法

在过去的几年里,我一直在思考更多关于并行计算的问题,特别是自从开始在表格一年前。在明确讨论并行性之前,我天真地认为我的纯函数式编程风格基本上没有顺序偏见。毕竟,函数式编程缺乏命令式模型强加的隐含的意外依赖性。然而,现在我逐渐发现,设计并行友好算法需要注意最小化剩余显式数据依赖的深度。

例如,考虑二进制加法,从最低有效位到最高有效位(通常)执行。我们可以立即计算结果的第一个(最低有效)位,但为了计算第二个位,我们必须知道第一次加法是否产生进位。一般来说(n个+1)第个求和和进位需要知道n个第个进位,因此该算法不允许并行执行。即使我们每个比特位置有一个处理器,由于依赖关系的线性链,一次也只能有一个处理器工作。

提高并行性的一种通用技术是投机-做了比可能需要的更多的工作,这样我们就不必等待确切的结果需要。在本文中,我们将看到逐位加法定义的进展。我们将从进位依赖的线性深度链开始,以对数深度结束。此外,通过谨慎地使用抽象,这些版本将只是一个多态定义的不同类型专门化,定义极其简洁。

继续阅读“通过记忆进行并行推测加法”»