【问题标题】:Time complexity of Parallel Reduction Algorithm并行减少算法的时间复杂度
【发布时间】:2019-04-21 16:33:28
【问题描述】:

目前我正在研究 GPU 架构及其概念。在并行缩减技术中,在下面的 NVIDIA 指南中,第 29 张幻灯片中显示的时间复杂度如何达到 O(N/P + log N)?我知道对于 N 个线程,它将是 O(log N)。如果我们有 P 个并行线程可用,那么时间复杂度应该是 O((N/P)*log P)。正确的?我在这里错在哪里?

Parallel Reduction Techniques

【问题讨论】:

    标签: parallel-processing cuda time-complexity gpu reduction


    【解决方案1】:

    我想用一个例子来解释一下,考虑这个包含 N=8 个元素的数组

    1  2  3  4  5  6  7  8
    

    并行减少将在以下步骤中发生

    1  2  3  4  5  6  7  8
      3    7      11   15
        10          26
              36
    

    如果计算归约操作的次数,我们在第一步、第二步和第三步分别有 4,2 和 1。所以我们的操作总数是 4+2+1=7=N-1 并且我们在 O(N) 中做了所有的减少,我们也有 log(8)=3(这是对基数为 2)步骤所以我们为执行这些步骤付出了代价,即 O(logN)。因此,如果我们使用单个线程以这种方式减少,我们将两个成本相加,因为它们彼此分开发生并且我们有 O(N+logN)。其中 O(N) 是执行所有操作的成本,O(logN) 是执行所有步骤的成本。现在没有办法并行化步骤的成本,因为它们必须按顺序发生。但是,我们可以使用多个线程来执行操作并将 O(N) 成本除以 O(N/P)。所以我们有

    Total cost = O(N/P + logN)
    

    【讨论】:

      【解决方案2】:

      我不熟悉 cuda,但通常在你做的并行缩减中

      • 首先在每个处理器上进行局部缩减,这将花费 O(N/P),然后
      • 计算 P 个局部结果的缩减,这需要 O(log P) 步。

      因此你得到 O(N/P + log P)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-05-14
        • 2020-01-26
        • 2015-06-24
        • 2015-06-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多