Openmp呈现BMP图像

问题描述:

我想要生成一些茱莉亚分形图像,我想使用多个核心更快的执行。但是如果我使用并行处理(它们有错误的颜色行,超出范围,...),并且40个图像中只有大约20个图像被创建,那么生成的图像很糟糕。如果我用#pragma删除行,生成的图像没问题Openmp呈现BMP图像

#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 

    } 

您有传统的数据竞争条件。并行线程使用普通数据:imeDatoteke [7],imeDatoteke [8],图片[i] [j]。因为结果线程可以使用来自其他线程的数据来创建映像。您可以为每个线程使用局部变量或使用同步对象。