Openmp渲染bmp图像

时间:2016-04-21 13:39:51

标签: c++ openmp fractals

我正在尝试生成一些julia分形图像,我想使用多个内核来加快执行速度。但是如果我使用并行(它们有错误的颜色线,超出规模,......)而生成的图像是坏的,而且,而不是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 个答案:

答案 0 :(得分:2)

您有经典的数据竞争条件。并行线程使用的是常见数据:imeDatoteke [7],imeDatoteke [8],picture [i] [j]。结果线程可以使用来自其他线程的数据来创建图像。您可以为每个线程使用局部变量或使用同步对象。