Я пытаюсь реализовать довольно простое усреднение во время преобразования изображения. Я уже успешно реализовал преобразование, но теперь мне нужно обработать это результирующее изображение, суммируя все пиксели всех прямоугольников 5x5 пикселей. Моя идея заключалась в том, чтобы увеличивать счетчик для каждого такого блока 5x5 всякий раз, когда установлен пиксель в этом блоке. Тем не менее, эти блок-счетчики значительно не увеличиваются. Таким образом, для отладки я проверил, как часто любой пиксель такого блока попал на все:Координаты CUDA:
int x = (blockIdx.x*blockDim.x) + threadIdx.x;
int y = (blockIdx.y*blockDim.y) + threadIdx.y;
if((x<5)&&(y<5))
{
resultArray [0]++;
}
Ядро называется так:
dim3 threadsPerBlock(8, 8);
dim3 grid(targetAreaRect_px._uiWidth/threadsPerBlock.x, targetAreaRect_px._uiHeight/threadsPerBlock.y);
CudaTransformAndAverageImage << < grid, threadsPerBlock >> > (pcPreRasteredImage_dyn, resultArray);
Я ожидал бы resultArray [0] содержит 25 после ядро, но оно содержит только 1. Это связано с некоторой оптимизацией компилятором CUDA?
Ядро вызывается следующим образом: dim3 threadsPerBlock (8, 8); сетка dim3 (targetAreaRect_px._uiWidth/threadsPerBlock.x, targetAreaRect_px._uiHeight/threadsPerBlock.y); CudaTransformAndAverageImage <<>> (pcPreRasteredImage_dyn, resultArray); –
juergen861