c++ - Openmp渲染bmp图片

标签 c++ openmp fractals

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

    } 

最佳答案

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

关于c++ - Openmp渲染bmp图片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36771415/

相关文章:

C++分配标准?

c++ - 我在用 srand 在 C++ 中构建非重复随机数组时做错了什么?

c - openmp - 并行 vector 矩阵乘积

algorithm - Mandelbrot 集的平滑着色算法

c++ - 如何在 Linux 上使用 std::ifstream 从文件中读取非 ASCII 行?

c++ - 读取数组的第一个元素还是第 4000 个元素更快?

c++ - OpenMp:如何使维度 std::vector 线程私有(private)

multithreading - OpenMP:在线程之间共享数组

c - GPU(CUDA)和CPU计算结果不同

蟒 turtle : Is it possible to use layers in fill command