-1

我按照下面的例子: multi-GPU basic usage

该代码正在总结:

回答为已接受的人发送添加函数,如下所示:

for(int i=0;i<10000;++i) {
    for(int dev=0; dev<2; dev++) {
        cudaSetDevice(dev);
        add<<<NB,NT>>>( dev_a[dev], dev_b[dev], dev_c[dev], Ns[dev] );
    }
}

在上面的代码中,他NS[dev]还添加了添加功能,但是发送问题帖子的人添加了如下功能:

__global__ void add( double *a, double *b, double *c){

    int tid = threadIdx.x + blockIdx.x * blockDim.x; 

    while(tid < N){
        c[tid] = a[tid] + b[tid];
        tid += blockDim.x * gridDim.x;
    }

}

上述函数的作用是什么 Ns[dev]。因为当我 Ns[dev]在下面的代码中删除时,像这样:

add<<<NB,NT>>>( dev_a[dev], dev_b[dev], dev_c[dev]);

添加功能不起作用。我的意思是它不会增加值。

我如何 Ns[dev]在这里使用添加功能?

4

1 回答 1

1

在链接的答案中,Ns是一个数组,指定每个设备应处理的数据量。dev是当前设备的 id。

您应该向内核添加一个参数,该参数应指定内核中正在处理的数据的长度。

__global__ void add( double *a, double *b, double *c, const int N)
{
    int tid = threadIdx.x + blockIdx.x * blockDim.x; 

    while(tid < N){
        c[tid] = a[tid] + b[tid];
        tid += blockDim.x * gridDim.x;
    }
}
于 2013-05-06T11:33:20.497 回答