CUDA вложил l oop параллелизм для накопления суммы - PullRequest
0 голосов
/ 15 апреля 2020

Я пытаюсь преобразовать программу удаления серийного образа в параллельную CUDA.

В программе есть вложенный l oop следующим образом:

 for (int iter = 0; iter < n_iter; iter++) {
         sum = 0;
         sum2 = 0;
         // REDUCTION AND STATISTICS
         // --- 3 floating point arithmetic operations per element -> 3*height*width in total
         for (int i = 0; i <= height; i++) {
             for (int j = 0; j <= width; j++) {
                 tmp = image[i * width + j];    // current pixel value
                 sum += tmp; // --- 1 floating point arithmetic operations
                 sum2 += tmp * tmp; // --- 2 floating point arithmetic operations
             }
         }
         mean = sum / n_pixels; // --- 1 floating point arithmetic operations
         variance = (sum2 / n_pixels) - mean * mean; // --- 3 floating point arithmetic operations
         std_dev = variance / (mean * mean); 
         ...

Вот переменные:

float sum, sum2, tmp, mean, variance, std_dev
unsigned char* image

Мне нужна помощь только для преобразования это l oop в ядре CUDA. Однако сумма и сумма 2 сбивают меня с толку.

Чтобы избежать путаницы, первым для l oop является итерация, поэтому он останется последовательным. Я пытаюсь распараллелить только внутреннее вложенное l oop.

...