Skip to content
Snippets Groups Projects
Commit 90ef6004 authored by Claudio Gheller's avatar Claudio Gheller
Browse files

openmp (CPU) added to phase correction

parent eacb3f9e
No related branches found
No related tags found
No related merge requests found
...@@ -87,7 +87,7 @@ __global__ void phase_g(int xaxis, ...@@ -87,7 +87,7 @@ __global__ void phase_g(int xaxis,
#endif #endif
void phase_correction(double* gridss, double* image_real, double* image_imag, int xaxis, int yaxis, int num_w_planes, int xaxistot, int yaxistot, void phase_correction(double* gridss, double* image_real, double* image_imag, int xaxis, int yaxis, int num_w_planes, int xaxistot, int yaxistot,
double resolution, double wmin, double wmax) double resolution, double wmin, double wmax, int num_threads)
{ {
double dw = (wmax-wmin)/(double)num_w_planes; double dw = (wmax-wmin)/(double)num_w_planes;
double wterm = wmin+0.5*dw; double wterm = wmin+0.5*dw;
...@@ -135,6 +135,11 @@ void phase_correction(double* gridss, double* image_real, double* image_imag, in ...@@ -135,6 +135,11 @@ void phase_correction(double* gridss, double* image_real, double* image_imag, in
#else #else
#ifdef _OPENMP
omp_set_num_threads(num_threads);
#endif
#pragma omp parallel for collapse(3) private(wterm)
for (int iw=0; iw<num_w_planes; iw++) for (int iw=0; iw<num_w_planes; iw++)
{ {
for (int iv=0; iv<yaxis; iv++) for (int iv=0; iv<yaxis; iv++)
...@@ -143,6 +148,7 @@ void phase_correction(double* gridss, double* image_real, double* image_imag, in ...@@ -143,6 +148,7 @@ void phase_correction(double* gridss, double* image_real, double* image_imag, in
long index = 2*(iu+iv*xaxis+xaxis*yaxis*iw); long index = 2*(iu+iv*xaxis+xaxis*yaxis*iw);
long img_index = iu+iv*xaxis; long img_index = iu+iv*xaxis;
wterm = wmin + iw*dw;
#ifdef PHASE_ON #ifdef PHASE_ON
if (num_w_planes > 1) if (num_w_planes > 1)
{ {
...@@ -166,19 +172,24 @@ void phase_correction(double* gridss, double* image_real, double* image_imag, in ...@@ -166,19 +172,24 @@ void phase_correction(double* gridss, double* image_real, double* image_imag, in
s = pimag; s = pimag;
//printf("%d %d %d %ld %ld\n",iu,iv,iw,index,img_index); //printf("%d %d %d %ld %ld\n",iu,iv,iw,index,img_index);
#pragma omp atomic
image_real[img_index] += (p*r-q*s)*dwnorm*sqrt(1-radius2); image_real[img_index] += (p*r-q*s)*dwnorm*sqrt(1-radius2);
#pragma omp atomic
image_imag[img_index] += (p*s+q*r)*dwnorm*sqrt(1-radius2); image_imag[img_index] += (p*s+q*r)*dwnorm*sqrt(1-radius2);
} else { } else {
#pragma omp atomic
image_real[img_index] += gridss[index]; image_real[img_index] += gridss[index];
#pragma omp atomic
image_imag[img_index] += gridss[index+1]; image_imag[img_index] += gridss[index+1];
} }
#else #else
#pragma omp atomic
image_real[img_index] += gridss[index]; image_real[img_index] += gridss[index];
#pragma omp atomic
image_imag[img_index] += gridss[index+1]; image_imag[img_index] += gridss[index+1];
#endif // end of PHASE_ON #endif // end of PHASE_ON
} }
wterm += dw;
} }
#endif // end of __CUDACC__ #endif // end of __CUDACC__
......
...@@ -860,7 +860,7 @@ int main(int argc, char * argv[]) ...@@ -860,7 +860,7 @@ int main(int argc, char * argv[])
double* image_real = (double*) calloc(xaxis*yaxis,sizeof(double)); double* image_real = (double*) calloc(xaxis*yaxis,sizeof(double));
double* image_imag = (double*) calloc(xaxis*yaxis,sizeof(double)); double* image_imag = (double*) calloc(xaxis*yaxis,sizeof(double));
phase_correction(gridss,image_real,image_imag,xaxis,yaxis,num_w_planes,grid_size_x,grid_size_y,resolution,wmin,wmax); phase_correction(gridss,image_real,image_imag,xaxis,yaxis,num_w_planes,grid_size_x,grid_size_y,resolution,wmin,wmax,num_threads);
end = clock(); end = clock();
clock_gettime(CLOCK_MONOTONIC, &finish); clock_gettime(CLOCK_MONOTONIC, &finish);
......
...@@ -46,5 +46,6 @@ void phase_correction( ...@@ -46,5 +46,6 @@ void phase_correction(
int, int,
double, double,
double, double,
double); double,
int);
#endif #endif
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment