【问题标题】:Adding two integers parallely并行添加两个整数
【发布时间】:2013-04-09 18:54:09
【问题描述】:

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

【问题讨论】:

    标签: integer-arithmetic


    【解决方案1】:

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

    如果您的数字尚未分布在 p 个处理器中,而是聚集在一个不参与计算的主处理器上,您只需将 a 和 b 分开以创建 p 个连续数字块,并将它们发送到每个的处理器。这需要消息复杂性O(p)

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

    当然,具有最低有效数字块的处理器只需计算一个和。一旦它完成计算,它就会将它的结果数字份额发送回主控器,并将其输出进位发送到保存下一个更高有效数字块的处理器。下一个处理器决定两个结果场景中的哪一个已成为真,将适当的结果数字发送到主控器,并将其输出进位发送到下一个处理器。以此类推。

    这将为结果使用额外的 p 消息,为进位使用 p-1 消息。所以消息复杂度仍然是O(p)。时间复杂度将是O(p + ceil(n/p)),因为最后一个处理器必须等到其前身的p-2 决定转发两个结果中的哪一个。如果您假设 n 位可以均匀分布在 p 个处理器中(即 n 是 p 的倍数),那么您建议的时间复杂度就可以O(p + n/p)

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-12
      • 1970-01-01
      • 1970-01-01
      • 2021-12-26
      • 1970-01-01
      • 2016-12-27
      • 1970-01-01
      • 2021-12-30
      相关资源
      最近更新 更多