3

这是cuda的第一个并行代码示例。

谁能描述一下内核调用:<<< N, 1 >>>

这是重要的代码:

#define N   10

__global__ void add( int *a, int *b, int *c ) {
    int tid = blockIdx.x;    // this thread handles the data at its thread id
    if (tid < N)
        c[tid] = a[tid] + b[tid];
}

int main( void ) {
    int a[N], b[N], c[N];
    int *dev_a, *dev_b, *dev_c;

    // allocate the memory on the GPU
    // fill the arrays 'a' and 'b' on the CPU
    // copy the arrays 'a' and 'b' to the GPU

    add<<<N,1>>>( dev_a, dev_b, dev_c );

    // copy the array 'c' back from the GPU to the CPU
    // display the results
    // free the memory allocated on the GPU

    return 0;
}

为什么它使用<<< N , 1 >>>它意味着我们在每个块中使用了 N 个块和 1 个线程?因为我们可以写这个<<< 1 , N >>>并在这个块中使用 1 个块和 N 个线程来进行更多优化。

4

1 回答 1

5

对于这个小例子,没有特别的原因(正如巴特在评论中已经告诉你的那样)。但是对于更大、更实际的示例,您应该始终牢记每个块的线程数是有限的。也就是说,如果您使用 N = 10000,您将无法再使用<<<1,N>>>,但<<<N,1>>>仍然可以使用。

于 2012-07-20T12:57:25.010 回答