CUDA多gpu添加功能

CUDA多gpu添加功能,cuda,multi-gpu,Cuda,Multi Gpu,我遵循以下示例: 代码正在进行求和: 被确认为已接受的人发送如下添加函数: 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] ); } } __global__ void a

我遵循以下示例:

代码正在进行求和:

被确认为已接受的人发送如下添加函数:

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] );
    }
}
__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;
    }

}
add<<<NB,NT>>>( dev_a[dev], dev_b[dev], dev_c[dev]);
在上述函数中,
Ns[dev]
的功能是什么。因为当我删除下面代码中的
Ns[dev]
时,如下所示:

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] );
    }
}
__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;
    }

}
add<<<NB,NT>>>( dev_a[dev], dev_b[dev], dev_c[dev]);
add(dev_a[dev],dev_b[dev],dev_c[dev]);
添加功能不起作用。我的意思是它不会增加值


如何在此处添加函数中使用
Ns[dev]

在链接的答案中,
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;
    }
}
\uuuu全局\uuuuu无效添加(双*a,双*b,双*c,常数int N)
{
int tid=threadIdx.x+blockIdx.x*blockDim.x;
而(tid