Commit 51562a59 authored by Gaurav Kukreja's avatar Gaurav Kukreja

Interleaved Residaul Calculation

Improves Cache Hit Ratio
Signed-off-by: 's avatarGaurav Kukreja <mailme.gaurav@gmail.com>
parent 476a1e0f
...@@ -116,11 +116,10 @@ int main( int argc, char *argv[] ) ...@@ -116,11 +116,10 @@ int main( int argc, char *argv[] )
case 0: // JACOBI case 0: // JACOBI
relax_jacobi(param.u, param.uhelp, np, np); residual = relax_jacobi_return_residual(param.u, param.uhelp, np, np);
tmp = param.u; tmp = param.u;
param.u = param.uhelp; param.u = param.uhelp;
param.uhelp = tmp; param.uhelp = tmp;
residual = residual_jacobi( param.u, np, np);
break; break;
case 1: // GAUSS case 1: // GAUSS
......
...@@ -59,7 +59,7 @@ void relax_gauss( double *u, ...@@ -59,7 +59,7 @@ void relax_gauss( double *u,
// Jacobi: relax_jacobi.c // Jacobi: relax_jacobi.c
double residual_jacobi( double *u, double residual_jacobi( double *u,
unsigned sizex, unsigned sizey ); unsigned sizex, unsigned sizey );
void relax_jacobi( double *u, double *utmp, double relax_jacobi_return_residual( double *u, double *utmp,
unsigned sizex, unsigned sizey ); unsigned sizex, unsigned sizey );
......
...@@ -38,19 +38,36 @@ double residual_jacobi( double *u, ...@@ -38,19 +38,36 @@ double residual_jacobi( double *u,
/* /*
* One Jacobi iteration step * One Jacobi iteration step
*/ */
void relax_jacobi( double *u, double *utmp, double relax_jacobi_return_residual( double *u, double *utmp,
unsigned sizex, unsigned sizey ) unsigned sizex, unsigned sizey )
{ {
int i, j; int i, j;
double unew, diff, sum=0.0;
for( i=1; i<sizey-1; i++ ) for( i=1; i<sizey; i++ )
{ {
for( j=1; j<sizex-1; j++ ) for( j=1; j<sizex-1; j++ )
{ {
utmp[i*sizex+j]= 0.25 * (u[ i*sizex + (j-1) ]+ // left if(i<sizey-1)
u[ i*sizex + (j+1) ]+ // right {
utmp[i*sizex + j]= 0.25 * (u[ i*sizex+j -1 ]+ // left
u[ i*sizex+j +1 ]+ // right
u[ (i-1)*sizex + j ]+ // top u[ (i-1)*sizex + j ]+ // top
u[ (i+1)*sizex + j ]); // bottom u[ (i+1)*sizex + j ]); // bottom
} }
//Residual Calculation
if(i>1)
{
unew = 0.25 * (utmp[ (i-1)*sizex+j -1 ]+ // left
utmp[ (i-1)*sizex+j +1 ]+ // right
utmp[ (i-2)*sizex + j ]+ // top
utmp[ (i)*sizex + j ]); // bottom
diff = unew - utmp[(i-1)*sizex+j];
sum += diff * diff;
}
} }
}
return sum;
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment