Added indications where OpenMP pragmas should be placed: Look in the code for comments of the form

//OpenMP here
This commit is contained in:
Emil Martinec
2012-03-19 08:51:59 -05:00
parent 80bc1a6afc
commit 62d8f39352
3 changed files with 29 additions and 10 deletions

View File

@@ -197,7 +197,6 @@ namespace rtengine {
//now we have tile dimensions, overlaps
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
#pragma omp parallel for schedule(dynamic)
for (int tiletop=0; tiletop<imheight; tiletop+=tileHskip) {
for (int tileleft=0; tileleft<imwidth; tileleft+=tileWskip) {
@@ -306,6 +305,7 @@ namespace rtengine {
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
// Main detail recovery algorithm: Block loop
//OpenMP here
for (int vblk=0; vblk<numblox_H; vblk++) {
//printf("vblock=%d",vblk);
int vblkmod = vblk%8;
@@ -577,7 +577,8 @@ namespace rtengine {
float parfrac = 0.05;
float madL[8][3], mada[8][3], madb[8][3];
//OpenMP here
for (int lvl=0; lvl<maxlvl; lvl++) {
// compute median absolute deviation (MAD) of detail coefficients as robust noise estimator
@@ -590,7 +591,7 @@ namespace rtengine {
float ** WavCoeffs_L = WaveletCoeffs_L.level_coeffs(lvl);
float ** WavCoeffs_a = WaveletCoeffs_a.level_coeffs(lvl);
float ** WavCoeffs_b = WaveletCoeffs_b.level_coeffs(lvl);
for (int dir=1; dir<4; dir++) {
madL[lvl][dir-1] = SQR(MadMax(WavCoeffs_L[dir], max, Wlvl_L*Hlvl_L));
mada[lvl][dir-1] = SQR(MadMax(WavCoeffs_a[dir], max, Wlvl_ab*Hlvl_ab));
@@ -645,6 +646,7 @@ namespace rtengine {
printf(" dir=%d mad_L=%f mad_a=%f mad_b=%f \n",dir,sqrt(mad_L),sqrt(mad_a),sqrt(mad_b));
//OpenMP here
for (int i=0; i<Hlvl_ab; i++) {
for (int j=0; j<Wlvl_ab; j++) {
@@ -678,7 +680,7 @@ namespace rtengine {
if (noisevar_L>0.01) {
mad_L *= noisevar_L*5/(lvl+1);
//OpenMP here
for (int i=0; i<Hlvl_L; i++)
for (int j=0; j<Wlvl_L; j++) {
@@ -700,7 +702,7 @@ namespace rtengine {
gaussVertical<float> (edge, edge, buffer, Wlvl_L, Hlvl_L, 1<<(lvl+1), false);
boxblur(sfave, sfave, lvl+2, lvl+2, Wlvl_L, Hlvl_L);//increase smoothness by locally averaging shrinkage
//OpenMP here
for (int i=0; i<Hlvl_L; i++)
for (int j=0; j<Wlvl_L; j++) {
@@ -761,6 +763,7 @@ namespace rtengine {
float mad_b = madb*noisevar_ab;
if (noisevar_ab>0.01) {
//OpenMP here
for (int i=0; i<H_ab; i++) {
for (int j=0; j<W_ab; j++) {
@@ -792,7 +795,7 @@ namespace rtengine {
}
if (noisevar_L>0.01) {
//OpenMP here
for (int i=0; i<W_L*H_L; i++) {
//float coeff_L = fabs(WavCoeffs_L[dir][i]);
@@ -808,7 +811,7 @@ namespace rtengine {
//WavCoeffs_L[dir][i] *= shrinkfactor;
sfave[i] = shrinkfactor;
}
//OpenMP here
boxblur(sfave, sfave, level+2, level+2, W_L, H_L);//increase smoothness by locally averaging shrinkage
for (int i=0; i<W_L*H_L; i++) {

View File

@@ -49,6 +49,7 @@ template<class T, class A> void boxblur (T** src, A** dst, int radx, int rady, i
}
} else {
//horizontal blur
//OpenMP here
for (int row = 0; row < H; row++) {
int len = radx + 1;
temp[row*W+0] = (float)src[row][0]/len;
@@ -76,6 +77,7 @@ template<class T, class A> void boxblur (T** src, A** dst, int radx, int rady, i
}
} else {
//vertical blur
//OpenMP here
for (int col = 0; col < W; col++) {
int len = rady + 1;
dst[0][col] = temp[0*W+col]/len;
@@ -119,6 +121,7 @@ template<class T, class A> void boxblur (T* src, A* dst, int radx, int rady, int
}
} else {
//horizontal blur
//OpenMP here
for (int row = 0; row < H; row++) {
int len = radx + 1;
temp[row*W+0] = (float)src[row*W+0]/len;
@@ -146,6 +149,7 @@ template<class T, class A> void boxblur (T* src, A* dst, int radx, int rady, int
}
} else {
//vertical blur
//OpenMP here
for (int col = 0; col < W; col++) {
int len = rady + 1;
dst[0*W+col] = temp[0*W+col]/len;
@@ -279,6 +283,7 @@ template<typename T> void boxdev (T* src, T* dst, int radx, int rady, int W, int
}
} else {
//horizontal blur
//OpenMP here
for (int row = 0; row < H; row++) {
int len = radx + 1;
temp[row*W+0] = (float)src[row*W+0]/len;
@@ -306,6 +311,7 @@ template<typename T> void boxdev (T* src, T* dst, int radx, int rady, int W, int
}
} else {
//vertical blur
//OpenMP here
for (int col = 0; col < W; col++) {
int len = rady + 1;
tempave[0*W+col] = temp[0*W+col]/len;
@@ -337,6 +343,7 @@ template<typename T> void boxdev (T* src, T* dst, int radx, int rady, int W, int
}
} else {
//horizontal blur
//OpenMP here
for (int row = 0; row < H; row++) {
int len = radx + 1;
temp[row*W+0] = fabs(src[row*W+0]-tempave[row*W+0])/len;
@@ -365,6 +372,7 @@ template<typename T> void boxdev (T* src, T* dst, int radx, int rady, int W, int
}
} else {
//vertical blur
//OpenMP here
for (int col = 0; col < W; col++) {
int len = rady + 1;
dst[0*W+col] = temp[0*W+col]/len;
@@ -409,6 +417,7 @@ template<class T, class A> void boxsqblur (T* src, A* dst, int radx, int rady, i
}
} else {
//horizontal blur
//OpenMP here
for (int row = 0; row < H; row++) {
int len = radx + 1;
temp[row*W+0] = SQR((float)src[row*W+0])/len;
@@ -436,6 +445,7 @@ template<class T, class A> void boxsqblur (T* src, A* dst, int radx, int rady, i
}
} else {
//vertical blur
//OpenMP here
for (int col = 0; col < W; col++) {
int len = rady + 1;
dst[0*W+col] = temp[0*W+col]/len;
@@ -482,6 +492,7 @@ template<class T, class A> void boxcorrelate (T* src, A* dst, int dx, int dy, in
}
} else {
//horizontal blur
//OpenMP here
for (int row = 0; row < H; row++) {
int len = radx + 1;
int rr = MIN(H-1,MAX(0,row+dy));
@@ -517,6 +528,7 @@ template<class T, class A> void boxcorrelate (T* src, A* dst, int dx, int dy, in
}
} else {
//vertical blur
//OpenMP here
for (int col = 0; col < W; col++) {
int len = rady + 1;
dst[0*W+col] = temp[0*W+col]/len;
@@ -561,6 +573,7 @@ template<class T, class A> void boxabsblur (T* src, A* dst, int radx, int rady,
}
} else {
//horizontal blur
//OpenMP here
for (int row = 0; row < H; row++) {
int len = radx + 1;
temp[row*W+0] = fabs((float)src[row*W+0])/len;
@@ -588,6 +601,7 @@ template<class T, class A> void boxabsblur (T* src, A* dst, int radx, int rady,
}
} else {
//vertical blur
//OpenMP here
for (int col = 0; col < W; col++) {
int len = rady + 1;
dst[0*W+col] = temp[0*W+col]/len;

View File

@@ -505,6 +505,7 @@ namespace rtengine {
T *buffer = new T[MAX(m_w,m_h)+2*m_pad+skip];
/* filter along columns */
//OpenMP here
for (int j=0; j<m_w; j++) {
loadbuffer(src+j, buffer, m_w/*pitch*/, m_h/*srclen*/);//pad a column of data and load it to buffer
if (subsamp_out) {
@@ -517,6 +518,7 @@ namespace rtengine {
}
/* filter along rows */
//OpenMP here
for (int i=0; i<m_h2; i++) {
loadbuffer(tmpLo+i*m_w, buffer, 1/*pitch*/, m_w/*srclen*/);//pad a row of data and load it to buffer
if (subsamp_out) {
@@ -535,9 +537,7 @@ namespace rtengine {
AnalysisFilterHaar (buffer, wavcoeffs[2]+i*m_w2, wavcoeffs[3]+i*m_w2, 1, m_w);
}
}
//imp_nr (wavcoeffs[0], m_w2, m_h2, 50.0f/20.0f);
delete[] tmpLo;
delete[] tmpHi;
delete[] buffer;
@@ -557,6 +557,7 @@ namespace rtengine {
float *bufferHi = new float[buflen];
/* filter along rows */
//OpenMP here
for (int i=0; i<m_h2; i++) {
if (subsamp_out) {
@@ -577,6 +578,7 @@ namespace rtengine {
}
/* filter along columns */
//OpenMP here
for (int j=0; j<m_w; j++) {
if (subsamp_out) {
SynthesisFilterSubsamp (tmpLo+j, tmpHi+j, dst+j, bufferLo, bufferHi, \