我遵循以下示例: 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]
添加功能?
答案 0 :(得分: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;
}
}