我試圖縮放圖像,通過OpenMP對其進行優化。爲了做到這一點,我使用的是雙三次插值,所以它有各種顏色的RGB工作要做,我決定,在部分做的每一種顏色將是一個不錯的主意:並行化並沒有達到預期的效果
CImg<unsigned char> img // JPG Image of 254x254
int zFactor //Zoom factor, in this case using 4
unsigned char arr[4][4];
unsigned char color[3];
unsigned char tmp_color0, tmp_color1, tmp_color2;
for(i=0; i<z_img.width(); i++) {
for(j=0; j<z_img.height(); j++) {
//For R,G,B
#pragma omp parallel sections
{
#pragma omp section
{
for(l=0; l<4; l++){
for(k=0; k<4; k++){
arr[l][k] = img(i/zFactor +l, j/zFactor +k, 0, 0); // img (x,y,z,c)
}
}
tmp_color0 = bicubicInterpolate_paralelo(arr, (unsigned char)(i%zFactor)/zFactor, (unsigned char)(j%zFactor)/zFactor);
}
#pragma omp section
{
for(l=0; l<4; l++){
for(k=0; k<4; k++){
arr[l][k] = img(i/zFactor +l, j/zFactor +k, 0, 1); // img (x,y,z,c)
}
}
tmp_color1 = bicubicInterpolate_paralelo(arr, (unsigned char)(i%zFactor)/zFactor, (unsigned char)(j%zFactor)/zFactor);
}
#pragma omp section
{
for(l=0; l<4; l++){
for(k=0; k<4; k++){
arr[l][k] = img(i/zFactor +l, j/zFactor +k, 0, 2); // img (x,y,z,c)
}
}
tmp_color2 = bicubicInterpolate_paralelo(arr, (unsigned char)(i%zFactor)/zFactor, (unsigned char)(j%zFactor)/zFactor);
}
}
color[0]=tmp_color0;
color[1]=tmp_color1;
color[2]=tmp_color2;
z_img.draw_point(i,j,color);
}
}
凡bicubicInterpolate_paralelo是計算像素的雙三次插值的函數。運行此代碼,我得到以下結果:
很明顯,我忽略了顏色與時間顏色變量的依賴關係,但我該如何解決它?如果不使用OpenMP,它可以很好地工作,所以它是OpenMP實現的問題。任何幫助表示讚賞!
在您的'parallel'指令中添加'private(arr,l,k)' – Gilles