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[] )
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;
param.u = param.uhelp;
param.uhelp = tmp;
residual = residual_jacobi( param.u, np, np);
break;
case 1: // GAUSS
......
......@@ -59,7 +59,7 @@ void relax_gauss( double *u,
// Jacobi: relax_jacobi.c
double residual_jacobi( double *u,
unsigned sizex, unsigned sizey );
void relax_jacobi( double *u, double *utmp,
double relax_jacobi_return_residual( double *u, double *utmp,
unsigned sizex, unsigned sizey );
......
......@@ -38,19 +38,36 @@ double residual_jacobi( double *u,
/*
* One Jacobi iteration step
*/
void relax_jacobi( double *u, double *utmp,
unsigned sizex, unsigned sizey )
double relax_jacobi_return_residual( double *u, double *utmp,
unsigned sizex, unsigned sizey )
{
int i, j;
for( i=1; i<sizey-1; i++ )
{
for( j=1; j<sizex-1; j++ )
{
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 ]); // bottom
int i, j;
double unew, diff, sum=0.0;
for( i=1; i<sizey; i++ )
{
for( j=1; j<sizex-1; j++ )
{
if(i<sizey-1)
{
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 ]); // 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