Я пишу код CUDA, и я использую графическую карту GForce 9500 GT.Как рассчитать число блоков
Я пытаюсь обработать массив 20000000 целочисленных элементов и число потоков Я использую 256
Размер основы составляет 32. Способность вычислить 1,1
Это аппаратные средства http://www.geforce.com/hardware/desktop-gpus/geforce-9500-gt/specifications
Теперь номер блока = 20000000/256 = 78125?
Этот звук неправильный. Как рассчитать номер блока? Любая помощь будет оценена по достоинству.
Функция ядра CUDA заключается в следующем. Идея заключается в том, что каждый блок будет вычислять свою сумму, а затем окончательная сумма будет рассчитываться путем суммирования суммы каждого блока.
__global__ static void calculateSum(int * num, int * result, int DATA_SIZE)
{
extern __shared__ int shared[];
const int tid = threadIdx.x;
const int bid = blockIdx.x;
shared[tid] = 0;
for (int i = bid * THREAD_NUM + tid; i < DATA_SIZE; i += BLOCK_NUM * THREAD_NUM) {
shared[tid] += num[i];
}
__syncthreads();
int offset = THREAD_NUM/2;
while (offset > 0) {
if (tid < offset) {
shared[tid] += shared[tid + offset];
}
offset >>= 1;
__syncthreads();
}
if (tid == 0) {
result[bid] = shared[0];
}
}
И я называю эту функцию как
calculateSum <<<BLOCK_NUM, THREAD_NUM, THREAD_NUM * sizeof(int)>>> (gpuarray, result, size);
Где THREAD_NUM = 256 и массив является GPU размера 20000000.
Здесь я просто используя номер блока, как 16, но не уверен, что если это верно? Как я могу убедиться, что достигается максимальный параллелизм?
Вот результат моего калькулятора занятости CUDA. Он говорит, что у меня будет 100% заполняемость, когда число блоков равно 8. Таким образом, это означает, что я буду иметь максимальную эффективность, если число блоков = 8 и номер потока = 256. Это верно?
Благодаря
Вы неправильно истолковали вывод калькулятора занятости. В нем говорится, что оптимальное количество блоков на мультипроцессор 3 (строка 18). Поэтому (в этом случае) вам нужно 3 блока на многопроцессорный * 4 многопроцессорных = 12 блоков для обеспечения оптимального параллелизма * для этого ядра *. – talonmies