Моя тестовая функция выглядит так.Насколько эффективно выполнить это ядро в CUDA
DIMENSION 20
POPSIZE 5000
__global__ void repairT(int* H, int* diff){
int tidx = blockDim.x * blockIdx.x + threadIdx.x;
int ii = tidx * DIMENSION;
//if (ii < DIMENSION * POPSIZE)
//{
int Hdiff[DIMENSION] = { 0 };
int diffcount = 0;
bool isInIndiv = false;
//complement set H
for (int i = 1; i <= DIMENSION; i++)
{
for (int j = ii; j < ii + DIMENSION; j++) //H for
{
if (i == H[j])
{
isInIndiv = isInIndiv || true;
}
}
if (isInIndiv == false)
{
Hdiff[diffcount] = i;
diffcount++;
}
else
isInIndiv = false;
}
// diff to array
int diffc = ii * DIMENSION;
for (int i = 0; i < DIMENSION; i++)
{
diff[diffc] = Hdiff[i];
diffc++;
}
//}
}
У меня есть большой массив 1D под названием H (POPSIZE * DIMENSION). И я хочу создать новый массив diff, который сохраняет недостающие элементы в интервале 0-19, 20-39 и так далее ...
И мне нужно выполнить этот код эффектно в parralel 5000times Я пробовал это, но выполнял его только для интервала 0-19 в H
dim3 nbThreadsR1(128);
dim3 nbBlocksR1((POPSIZE/nbThreadsR1.x) + 1);
repairT << <nbBlocksR1, nbThreadsR1 >> >(d_H, d_diff);
Pls дайте мне несколько советов.
no Я удаляю DIMENSION из декларации ii, но теперь ядро иногда делает неправильные вычисления, но работает на всех массивах –