2013-05-06 98 views
-1

我也跟着下面的例子: multi-GPU basic usageCUDA多 - 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]); 
    } 
} 

在上面的代碼中他補充說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]添加功能?

回答

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; 
    } 
}