平行添加两个整数

时间:2013-04-09 18:54:10

标签: integer-arithmetic

假设你有两个n个数字的无符号整数,在两个数组a,b中给出,你有p个处理器,其中每个都可以加2个数字并计算进位(如果存在)。是否有可能在时间O(p + n / p)中计算a + b?我一直试图将输入分为(n / p)p区间,但我不知道如何处理进位。

1 个答案:

答案 0 :(得分:1)

我相信这是可能的。我将假设n >= p并且您的p处理器被安排在无共享架构中,处理器通过消息传递进行通信。

如果您的数字尚未在p处理器之间分配,但是在一个不参与计算的主处理器上聚集,则只需将a和b分开以创建p个连续数字块,每个数字块并将它们发送给每个处理器。这会使消息复杂O(p)

然后,每个处理器计算其数字块的两个和,假设它将从其前任接收进位1,即具有下一个较低有效数字块的处理器,另一个假设进位将它还将为两种情景中的每一种计算其输出进位。计算具有时间复杂度O(ceil(n/p)),因为每个处理器必须保持整数位数。

当然,具有最低有效位块的处理器只需计算一个总和。一旦完成计算,它就将其结果数字的份额发送回主设备,并将其输出进位发送到处理器,保持下一个更高有效数字块。下一个处理器决定两个结果方案中的哪一个成为现实,将适当的结果数字发送给主设备并将其输出进位发送到下一个处理器。等等。

这将为结果和承载的p-1消息额外发送p消息。因此,消息复杂性仍为O(p)。时间复杂度将为O(p + ceil(n/p)),因为最后一个处理器必须等到其前任的p-2已决定转发两个结果中的哪一个。如果假设n个数字可以在p个处理器之间均匀分布(即n是p的倍数),那么建议的时间复杂度O(p + n/p)就可以了。

这种以推测方式计算两种可能结果的方法与Carry-select adder的工作方式非常相似。