线程块数之间的关系

时间:2013-04-02 22:45:04

标签: cuda

此代码来自一本名为cuda的书籍

#include "../common/book.h"
#define N (33 * 1024)

__global__ void add( int *a, int *b, int *c ) {
    int tid = threadIdx.x + blockIdx.x * blockDim.x;
    while (tid < N) {
        c[tid] = a[tid] + b[tid];
        tid += blockDim.x * gridDim.x;
    }  
}

                   .
                   .
                   .
add<<<128,128>>>( dev_a, dev_b, dev_c );

33 * 1024 = 33792

128 * 128 = 16384

33792&gt; 16384

那么,在这种情况下,我是否必须增加每个块的线程数才能运行?

1 个答案:

答案 0 :(得分:5)

注意while循环体中的第二个命令,即tid += blockDim.x * gridDim.x;。它甚至可以用于比16384更大的阵列。

ID为0的线程对位置0,16384,32768,...中的数组项进行求和 ID为1的线程对位置1,16385,32769,......中的数组项进行求和。