2013-05-06 5 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 - это идентификатор текущего устройства.

Вы должны добавить аргумент в ядро, которое должно указывать длину данных, обрабатываемых в ядре.

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

 Смежные вопросы

  • Нет связанных вопросов^_^