Zatem problem wygląda tak: mam pętlę, która generuje fraktal mandelbrota i muszę ją zrównoleglić.
Kod wygląda tak:
for(int y = 0; y < ImageHeight; ++y)
{
double c_im = MaxIm - y*Im_factor;
for(int x=0; x<ImageWidth; ++x)
{
double c_re = MinRe + x*Re_factor;
double Z_re = c_re, Z_im = c_im;
bool isInside = true;
for(n = 0; n < MaxIterations; ++n)
{
double Z_re2 = Z_re*Z_re, Z_im2 = Z_im*Z_im;
if(Z_re2 + Z_im2 > 4)
{
isInside = false;
break;
}
Z_im = 2*Z_re*Z_im + c_im;
Z_re = Z_re2 - Z_im2 + c_re;
}
if(isInside){
Output(x, y) -> Blue = 0;
Output(x, y) -> Red = 0;
Output(x, y) -> Green = 0;
}
else{
Output(x, y) -> Blue = (int)((n % 8) * 8 % 256);
Output(x, y) -> Red = (int)((n % 8) * 16 % 256);
Output(x, y) -> Green = (int)((n % 8) * 32 % 256);
}
}
}
I teraz moje pytania:
- Czy mogę po prostu na początku tej pętli wstawić
#pragma omp for
i wszystko będzie ok? Jeśli mam tyle zagnieżdzonych pętli?
2. Czy przy tej deklaracji muszę deklarować zmienne private i shared? A jeśli tak, to które będą private? x i y?
Muszę to przetestować w wersji schedule static, guided i dynamic, jeśli ma to jakieś znaczenie.
Próbowałem już po prostu wstawić tam #pragma omp for, ale wtedy obrazek wychodzi cały "zaszumiony".
Z góry dzięki za jakąkolwiek pomoc ;)