From c0078554ad734addc344cb09494faf3718b11a1b Mon Sep 17 00:00:00 2001 From: Daniel Maier <daniel.maier@tu-berlin.de> Date: Sat, 3 Nov 2018 10:19:01 +0100 Subject: [PATCH] error calculation using capped mre --- codes/2mm/2mm.c | 11 +++++++---- codes/3mm/3mm.c | 11 +++++++---- codes/adi/adi.c | 11 +++++++---- codes/covariance/covariance.c | 11 +++++++---- codes/deriche/deriche.c | 11 +++++++---- codes/doitgen/doitgen.c | 11 +++++++---- codes/fdtd-2d/fdtd-2d.c | 25 ++++++++++++++++--------- codes/floyd-warshall/floyd-warshall.c | 25 +++++++++++++++---------- codes/gemm/gemm.c | 11 +++++++---- codes/gemver/gemver.c | 8 +++++--- codes/gesummv/gesummv.c | 8 +++++--- codes/heat-3d/heat-3d.c | 10 +++++++--- codes/jacobi-1d/jacobi-1d.c | 6 ++++-- codes/jacobi-2d/jacobi-2d.c | 11 +++++++---- codes/seidel-2d/seidel-2d.c | 11 +++++++---- codes/symm/symm.c | 11 +++++++---- codes/syr2k/syr2k.c | 11 +++++++---- codes/syrk/syrk.c | 11 +++++++---- codes/trmm/trmm.c | 11 +++++++---- 19 files changed, 143 insertions(+), 82 deletions(-) diff --git a/codes/2mm/2mm.c b/codes/2mm/2mm.c index 7c78512..db4bf9a 100644 --- a/codes/2mm/2mm.c +++ b/codes/2mm/2mm.c @@ -77,15 +77,18 @@ void calc_error(int ni, int nl, DATA_TYPE POLYBENCH_2D(D,NI,NL,ni,nl)) { int i; + int n = ni*nl; double err = 0; double *accurate = &_binary_data_bin_start; double *test = &(D[0][0]); - /* calculate the mean squared error */ - for (i = 0; i < ni*nl; i++) { - err += (accurate[i] - test[i])*(accurate[i] - test[i]); + for(i = 0; i < n; i++) { + double e = fabs((accurate[i] - test[i])/accurate[i]); + if(e > 1) + e = 1; + err += e; } - err /= ni*nl; + err /= n; printf("error: %f\n", err); } diff --git a/codes/3mm/3mm.c b/codes/3mm/3mm.c index bbf5720..0b22953 100644 --- a/codes/3mm/3mm.c +++ b/codes/3mm/3mm.c @@ -73,15 +73,18 @@ void calc_error(int ni, int nl, DATA_TYPE POLYBENCH_2D(D,NI,NL,ni,nl)) { int i; + int n = ni*nl; double err = 0; double *accurate = &_binary_data_bin_start; double *test = &(D[0][0]); - /* calculate the mean squared error */ - for (i = 0; i < ni*nl; i++) { - err += (accurate[i] - test[i])*(accurate[i] - test[i]); + for(i = 0; i < n; i++) { + double e = fabs((accurate[i] - test[i])/accurate[i]); + if(e > 1) + e = 1; + err += e; } - err /= ni*nl; + err /= n; printf("error: %f\n", err); } diff --git a/codes/adi/adi.c b/codes/adi/adi.c index 8bd7b05..08f3e2e 100644 --- a/codes/adi/adi.c +++ b/codes/adi/adi.c @@ -64,15 +64,18 @@ void calc_error (int n, DATA_TYPE POLYBENCH_2D(u,N,N,n,n)) { int i; + int n = n*n; double err = 0; double *accurate = &_binary_data_bin_start; double *test = &(u[0][0]); - /* calculate the mean squared error */ - for(i = 0; i < n*n; i++) { - err += (accurate[i] - test[i])*(accurate[i] - test[i]); + for(i = 0; i < n; i++) { + double e = fabs((accurate[i] - test[i])/accurate[i]); + if(e > 1) + e = 1; + err += e; } - err /= n*n; + err /= n; printf("error: %f\n", err); } diff --git a/codes/covariance/covariance.c b/codes/covariance/covariance.c index 3c5a7fe..8f8c98b 100644 --- a/codes/covariance/covariance.c +++ b/codes/covariance/covariance.c @@ -65,15 +65,18 @@ void calc_error(int m, DATA_TYPE POLYBENCH_2D(cov,M,M,m,m)) { int i, j; + int n = m*m; double err = 0; double *accurate = &_binary_data_bin_start; double *test = &(cov[0][0]); - /* calculate the mean squared error */ - for (i = 0; i < m*m; i++) { - err += (accurate[i] - test[i])*(accurate[i] - test[i]); + for(i = 0; i < n; i++) { + double e = fabs((accurate[i] - test[i])/accurate[i]); + if(e > 1) + e = 1; + err += e; } - err /= m*m; + err /= n; printf("error: %f\n", err); } diff --git a/codes/deriche/deriche.c b/codes/deriche/deriche.c index 29c2270..0c0be9b 100644 --- a/codes/deriche/deriche.c +++ b/codes/deriche/deriche.c @@ -66,15 +66,18 @@ void calc_error(int w, int h, DATA_TYPE POLYBENCH_2D(imgOut,W,H,w,h)) { int i; + int n = w*h; double err = 0; float *accurate = &_binary_data_bin_start; float *test = &(imgOut[0][0]); - /* calculate the mean squared error */ - for(i = 0; i < w*h; i++) { - err += (accurate[i] - test[i])*(accurate[i] - test[i]); + for(i = 0; i < n; i++) { + double e = fabs((accurate[i] - test[i])/accurate[i]); + if(e > 1) + e = 1; + err += e; } - err /= w*h; + err /= n; printf("error: %f\n", err); } diff --git a/codes/doitgen/doitgen.c b/codes/doitgen/doitgen.c index 392b054..8cc4746 100644 --- a/codes/doitgen/doitgen.c +++ b/codes/doitgen/doitgen.c @@ -67,15 +67,18 @@ void calc_error(int nr, int nq, int np, DATA_TYPE POLYBENCH_3D(A,NR,NQ,NP,nr,nq,np)) { int i; + int n = nr*nq*np; double err = 0; double *accurate = &_binary_data_bin_start; double *test = &(A[0][0][0]); - /* calculate the mean squared error */ - for(i = 0; i < nr*nq*np; i++) { - err += (accurate[i] - test[i])*(accurate[i] - test[i]); + for(i = 0; i < n; i++) { + double e = fabs((accurate[i] - test[i])/accurate[i]); + if(e > 1) + e = 1; + err += e; } - err /= nr*nq*np; + err /= n; printf("error: %f\n", err); } diff --git a/codes/fdtd-2d/fdtd-2d.c b/codes/fdtd-2d/fdtd-2d.c index 8a7ffc4..ba3e2da 100644 --- a/codes/fdtd-2d/fdtd-2d.c +++ b/codes/fdtd-2d/fdtd-2d.c @@ -95,33 +95,40 @@ void calc_error(int nx, DATA_TYPE POLYBENCH_2D(hz,NX,NY,nx,ny)) { int i; + int n = nx*ny; double err = 0; { double *accurate = &_binary_data_ex_bin_start; double *test = &(ex[0][0]); - /* calculate the mean squared error */ - for(i = 0; i < nx*ny; i++) { - err += (accurate[i] - test[i])*(accurate[i] - test[i]); + for(i = 0; i < n; i++) { + double e = fabs((accurate[i] - test[i])/accurate[i]); + if(e > 1) + e = 1; + err += e; } } { double *accurate = &_binary_data_ey_bin_start; double *test = &(ey[0][0]); - /* calculate the mean squared error */ - for(i = 0; i < nx*ny; i++) { - err += (accurate[i] - test[i])*(accurate[i] - test[i]); + for(i = 0; i < n; i++) { + double e = fabs((accurate[i] - test[i])/accurate[i]); + if(e > 1) + e = 1; + err += e; } } { double *accurate = &_binary_data_hz_bin_start; double *test = &(hz[0][0]); - /* calculate the mean squared error */ - for(i = 0; i < nx*ny; i++) { - err += (accurate[i] - test[i])*(accurate[i] - test[i]); + for(i = 0; i < n; i++) { + double e = fabs((accurate[i] - test[i])/accurate[i]); + if(e > 1) + e = 1; + err += e; } } diff --git a/codes/floyd-warshall/floyd-warshall.c b/codes/floyd-warshall/floyd-warshall.c index ecd1626..e8138c8 100644 --- a/codes/floyd-warshall/floyd-warshall.c +++ b/codes/floyd-warshall/floyd-warshall.c @@ -64,15 +64,20 @@ static void calc_error(int n, DATA_TYPE POLYBENCH_2D(path,N,N,n,n)) { - double err = 0; - int *accurate = &_binary_data_bin_start; - int *test = &(path[0][0]); - - for (int i = 0; i < n*n; i++) { - err += (accurate[i] - test[i]) * (accurate[i] - test[i]); - } - err /= n*n; - printf("error: %f\n", err); + int i; + int n = n*n; + double err = 0; + int *accurate = &_binary_data_bin_start; + int *test = &(path[0][0]); + + for(i = 0; i < n; i++) { + double e = fabs((accurate[i] - test[i])/accurate[i]); + if(e > 1) + e = 1; + err += e; + } + err /= n; + printf("error: %f\n", err); } @@ -85,7 +90,7 @@ void kernel_floyd_warshall(int n, int i, j, k; #pragma scop - for (k = 0; k < _PB_N; k++) + for (k = 0; k < n; k++) { for(i = 0; i < _PB_N; i++) for (j = 0; j < _PB_N; j++) diff --git a/codes/gemm/gemm.c b/codes/gemm/gemm.c index 37f8fd8..b7a73ef 100644 --- a/codes/gemm/gemm.c +++ b/codes/gemm/gemm.c @@ -73,15 +73,18 @@ void calc_error(int ni, int nj, DATA_TYPE POLYBENCH_2D(C,NI,NJ,ni,nj)) { int i; + int n = ni*nj; double err = 0; double *accurate = &_binary_data_bin_start; double *test = &(C[0][0]); - /* calculate the mean squared error */ - for (i = 0; i < ni*nj; i++) { - err += (accurate[i] - test[i])*(accurate[i] - test[i]); + for(i = 0; i < n; i++) { + double e = fabs((accurate[i] - test[i])/accurate[i]); + if(e > 1) + e = 1; + err += e; } - err /= ni*nj; + err /= n; printf("error: %f\n", err); } diff --git a/codes/gemver/gemver.c b/codes/gemver/gemver.c index 8c30035..ad8ec47 100644 --- a/codes/gemver/gemver.c +++ b/codes/gemver/gemver.c @@ -89,9 +89,11 @@ void calc_error(int n, double *accurate = &_binary_data_bin_start; double *test = &(w[0]); - /* calculate the mean squared error */ - for (i = 0; i < n; i++) { - err += (accurate[i] - test[i])*(accurate[i] - test[i]); + for(i = 0; i < n; i++) { + double e = fabs((accurate[i] - test[i])/accurate[i]); + if(e > 1) + e = 1; + err += e; } err /= n; printf("error: %f\n", err); diff --git a/codes/gesummv/gesummv.c b/codes/gesummv/gesummv.c index fe523fe..b21dbe9 100644 --- a/codes/gesummv/gesummv.c +++ b/codes/gesummv/gesummv.c @@ -76,9 +76,11 @@ void calc_error(int n, double *accurate = &_binary_data_bin_start; double *test = &(y[0]); - /* calculate the mean squared error */ - for (i = 0; i < n; i++) { - err += (accurate[i] - test[i])*(accurate[i] - test[i]); + for(i = 0; i < n; i++) { + double e = fabs((accurate[i] - test[i])/accurate[i]); + if(e > 1) + e = 1; + err += e; } err /= n; printf("error: %f\n", err); diff --git a/codes/heat-3d/heat-3d.c b/codes/heat-3d/heat-3d.c index f171a17..85914fd 100644 --- a/codes/heat-3d/heat-3d.c +++ b/codes/heat-3d/heat-3d.c @@ -65,15 +65,19 @@ void calc_error(int n, DATA_TYPE POLYBENCH_3D(A,N,N,N,n,n,n)) { int i; + int n = n*n*n; double err = 0; double *accurate = &_binary_data_bin_start; double *test = &(A[0][0][0]); /* calculate the mean squared error */ - for(i = 0; i < n*n*n; i++) { - err += (accurate[i] - test[i])*(accurate[i] - test[i]); + for(i = 0; i < n; i++) { + double e = fabs((accurate[i] - test[i])/accurate[i]); + if(e > 1) + e = 1; + err += e; } - err /= n*n*n; + err /= n; printf("error: %f\n", err); } diff --git a/codes/jacobi-1d/jacobi-1d.c b/codes/jacobi-1d/jacobi-1d.c index 6cd537c..c77e4e1 100644 --- a/codes/jacobi-1d/jacobi-1d.c +++ b/codes/jacobi-1d/jacobi-1d.c @@ -69,9 +69,11 @@ void calc_error(int n, double *accurate = &_binary_data_bin_start; double *test = &(A[0]); - /* calculate the mean squared error */ for(i = 0; i < n; i++) { - err += (accurate[i] - test[i])*(accurate[i] - test[i]); + double e = fabs((accurate[i] - test[i])/accurate[i]); + if(e > 1) + e = 1; + err += e; } err /= n; printf("error: %f\n", err); diff --git a/codes/jacobi-2d/jacobi-2d.c b/codes/jacobi-2d/jacobi-2d.c index 5dc7edf..643c6c6 100644 --- a/codes/jacobi-2d/jacobi-2d.c +++ b/codes/jacobi-2d/jacobi-2d.c @@ -66,15 +66,18 @@ void calc_error(int n, DATA_TYPE POLYBENCH_2D(A,N,N,n,n)) { int i; + int n = n*n; double err = 0; double *accurate = &_binary_data_bin_start; double *test = &(A[0][0]); - /* calculate the mean squared error */ - for(i = 0; i < n*n; i++) { - err += (accurate[i] - test[i])*(accurate[i] - test[i]); + for(i = 0; i < n; i++) { + double e = fabs((accurate[i] - test[i])/accurate[i]); + if(e > 1) + e = 1; + err += e; } - err /= n*n; + err /= n; printf("error: %f\n", err); } diff --git a/codes/seidel-2d/seidel-2d.c b/codes/seidel-2d/seidel-2d.c index 2debc95..0d6ba05 100644 --- a/codes/seidel-2d/seidel-2d.c +++ b/codes/seidel-2d/seidel-2d.c @@ -62,15 +62,18 @@ void calc_error(int n, DATA_TYPE POLYBENCH_2D(A,N,N,n,n)) { int i; + int n = n*n; double err = 0; double *accurate = &_binary_data_bin_start; double *test = &(A[0][0]); - /* calculate the mean squared error */ - for(i = 0; i < n*n; i++) { - err += (accurate[i] - test[i])*(accurate[i] - test[i]); + for(i = 0; i < n; i++) { + double e = fabs((accurate[i] - test[i])/accurate[i]); + if(e > 1) + e = 1; + err += e; } - err /= n*n; + err /= n; printf("error: %f\n", err); } diff --git a/codes/symm/symm.c b/codes/symm/symm.c index ea286ad..f167ef9 100644 --- a/codes/symm/symm.c +++ b/codes/symm/symm.c @@ -75,15 +75,18 @@ void calc_error(int m, int n, DATA_TYPE POLYBENCH_2D(C,M,N,m,n)) { int i, j; + int n = m*n; double err = 0; double *accurate = &_binary_data_bin_start; double *test = &(C[0][0]); - /* calculate the mean squared error */ - for (i = 0; i < m*n; i++) { - err += (accurate[i] - test[i])*(accurate[i] - test[i]); + for(i = 0; i < n; i++) { + double e = fabs((accurate[i] - test[i])/accurate[i]); + if(e > 1) + e = 1; + err += e; } - err /= m*n; + err /= n; printf("error: %f\n", err); } diff --git a/codes/syr2k/syr2k.c b/codes/syr2k/syr2k.c index 0647acc..60438f3 100644 --- a/codes/syr2k/syr2k.c +++ b/codes/syr2k/syr2k.c @@ -73,15 +73,18 @@ void calc_error(int n, DATA_TYPE POLYBENCH_2D(C,N,N,n,n)) { int i; + int n = n*n; double err = 0; double *accurate = &_binary_data_bin_start; double *test = &(C[0][0]); - /* calculate the mean squared error */ - for (i = 0; i < n*n; i++) { - err += (accurate[i] - test[i])*(accurate[i] - test[i]); + for(i = 0; i < n; i++) { + double e = fabs((accurate[i] - test[i])/accurate[i]); + if(e > 1) + e = 1; + err += e; } - err /= n*n; + err /= n; printf("error: %f\n", err); } diff --git a/codes/syrk/syrk.c b/codes/syrk/syrk.c index 1db7bc1..3c95aa2 100644 --- a/codes/syrk/syrk.c +++ b/codes/syrk/syrk.c @@ -69,15 +69,18 @@ void calc_error(int n, DATA_TYPE POLYBENCH_2D(C,N,N,n,n)) { int i; + int n = n*n; double err = 0; double *accurate = &_binary_data_bin_start; double *test = &(C[0][0]); - /* calculate the mean squared error */ - for (i = 0; i < n*n; i++) { - err += (accurate[i] - test[i])*(accurate[i] - test[i]); + for(i = 0; i < n; i++) { + double e = fabs((accurate[i] - test[i])/accurate[i]); + if(e > 1) + e = 1; + err += e; } - err /= n*n; + err /= n; printf("error: %f\n", err); } diff --git a/codes/trmm/trmm.c b/codes/trmm/trmm.c index 062cf1e..c1d287f 100644 --- a/codes/trmm/trmm.c +++ b/codes/trmm/trmm.c @@ -71,15 +71,18 @@ void calc_error(int m, int n, DATA_TYPE POLYBENCH_2D(B,M,N,m,n)) { int i; + int n = m*n; double err = 0; double *accurate = &_binary_data_bin_start; double *test = &(B[0][0]); - /* calculate the mean squared error */ - for (i = 0; i < m*n; i++) { - err += (accurate[i] - test[i])*(accurate[i] - test[i]); + for(i = 0; i < n; i++) { + double e = fabs((accurate[i] - test[i])/accurate[i]); + if(e > 1) + e = 1; + err += e; } - err /= m*n; + err /= n; printf("error: %f\n", err); } -- GitLab