目前,我正在研究GPU架构及其概念。在并行还原技术中,以下NVIDIA指南中第29张幻灯片所示的时间复杂度如何来自O(N / P + log N)?我知道对于N个线程,它将是O(log N)。如果我们有P个并行线程可用,则时间复杂度应为O((N / P)* log P)。对?我在哪里错了?
答案 0 :(得分:2)
我对cuda并不熟悉,但通常会并行进行
因此,您得到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)