Я пытаюсь преобразовать программу удаления серийного образа в параллельную 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.