OpenMP рендеринг изображений BMP

Я пытаюсь сгенерировать некоторые изображения фрактала Джулии, и я хотел бы использовать несколько ядер для более быстрого выполнения. Но сгенерированные изображения плохи, если я использую параллель для (у них линии неправильного цвета, они не в масштабе, …), а также, вместо 40 изображений, создается только около 20. Сгенерированные изображения в порядке, если я удаляю строку с #pragma

#pragma omp parallel for
for (k = 0; k < 40; k++) { //for loop that creates 40 images
z.Im = scale;     //z and c are complex numbers

imeDatoteke[7] = k / 10 + '0'; // file name
imeDatoteke[8] = k % 10 + '0';

c.Im += 0.005; // imaginary part increments every image

for (i = 0; i < DIM - 1; i++) { //DIM is image dimension

z.Im -= 2 * scale / (DIM - 1);
z.Re = -scale;

for (j = 0; j < DIM - 1; j++) {

z.Re += 2 * scale / (DIM - 1);

picture[i][j] = polinom(z, c); // a function that returns color between 0 and 255
}
}

saveBMP(picture, DIM, DIM, imeDatoteke); //save image arrays in bpm files

}

1

Решение

У вас классическое состояние гонки данных. Параллельные потоки используют общие данные: imeDatoteke [7], imeDatoteke [8], picture [i] [j]. В результате поток может использовать данные из другого потока для создания изображения. Вы можете использовать локальные переменные для каждого потока или использовать объекты синхронизации.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]