Added indications where OpenMP pragmas should be placed: Look in the code for comments of the form
//OpenMP here
This commit is contained in:
@@ -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++) {
|
||||
|
||||
|
@@ -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;
|
||||
|
@@ -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, \
|
||||
|
Reference in New Issue
Block a user