并行约简算法的时间复杂度

时间:2018-11-19 10:23:37

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

目前,我正在研究GPU架构及其概念。在并行还原技术中,以下NVIDIA指南中第29张幻灯片所示的时间复杂度如何来自O(N / P + log N)?我知道对于N个线程,它将是O(log N)。如果我们有P个并行线程可用,则时间复杂度应为O((N / P)* log P)。对?我在哪里错了?

Parallel Reduction Techniques

2 个答案:

答案 0 :(得分:2)

我对cuda并不熟悉,但通常会并行进行

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

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

答案 1 :(得分: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)