[gem5-users] Re: HPCG on RISCV

2022-10-05 Thread Νικόλαος Ταμπουρατζής
In my previous results, I had used double (not float) for the  
following variables: result, sq_i and sq_j. In the case of float  
instead of double I get "nan" and not 0.00.


Quoting Νικόλαος Ταμπουρατζής :


Dear Jason, all,

I am trying to find the accuracy problem with RISCV-FS and I observe  
that the problem is created (at least in my dummy example) because  
the variables (double) are set to zero in random simulated time (for  
this reason I get different results among executions of the same  
code). Specifically for the following dummy code:



#include 
#include 

int main(){

int dim = 10;

float result;

for (int iter = 0; iter < 2; iter++){
result = 0;
for (int i = 0; i < dim; i++){
for (int j = 0; j < dim; j++){
float sq_i = sqrt(i);
float sq_j = sqrt(j);
result += sq_i * sq_j;
printf("ITER: %d | i: %d | j: %d Result(i: %f | j:  
%f | i*j: %f): %f\n", iter, i , j, sq_i, sq_j, sq_i * sq_j, result);

}
}
printf("Final Result: %lf\n", result);
}
}


The correct Final Result in both iterations is 372.721656. However,  
I get the following results in FS:


ITER: 0 | i: 0 | j: 0 Result(i: 0.00 | j: 0.00 | i*j:  
0.00): 0.00
ITER: 0 | i: 0 | j: 1 Result(i: 0.00 | j: 1.00 | i*j:  
0.00): 0.00
ITER: 0 | i: 0 | j: 2 Result(i: 0.00 | j: 1.414214 | i*j:  
0.00): 0.00
ITER: 0 | i: 0 | j: 3 Result(i: 0.00 | j: 1.732051 | i*j:  
0.00): 0.00
ITER: 0 | i: 0 | j: 4 Result(i: 0.00 | j: 2.00 | i*j:  
0.00): 0.00
ITER: 0 | i: 0 | j: 5 Result(i: 0.00 | j: 2.236068 | i*j:  
0.00): 0.00
ITER: 0 | i: 0 | j: 6 Result(i: 0.00 | j: 2.449490 | i*j:  
0.00): 0.00
ITER: 0 | i: 0 | j: 7 Result(i: 0.00 | j: 2.645751 | i*j:  
0.00): 0.00
ITER: 0 | i: 0 | j: 8 Result(i: 0.00 | j: 2.828427 | i*j:  
0.00): 0.00
ITER: 0 | i: 0 | j: 9 Result(i: 0.00 | j: 3.00 | i*j:  
0.00): 0.00
ITER: 0 | i: 1 | j: 0 Result(i: 1.00 | j: 0.00 | i*j:  
0.00): 0.00
ITER: 0 | i: 1 | j: 1 Result(i: 1.00 | j: 1.00 | i*j:  
1.00): 1.00
ITER: 0 | i: 1 | j: 2 Result(i: 1.00 | j: 1.414214 | i*j:  
1.414214): 2.414214
ITER: 0 | i: 1 | j: 3 Result(i: 1.00 | j: 1.732051 | i*j:  
1.732051): 4.146264
ITER: 0 | i: 1 | j: 4 Result(i: 0.00 | j: 2.00 | i*j:  
0.00): 0.00
ITER: 0 | i: 1 | j: 5 Result(i: 0.00 | j: 2.236068 | i*j:  
0.00): 0.00
ITER: 0 | i: 1 | j: 6 Result(i: 0.00 | j: 2.449490 | i*j:  
0.00): 0.00
ITER: 0 | i: 1 | j: 7 Result(i: 0.00 | j: 2.645751 | i*j:  
0.00): 0.00
ITER: 0 | i: 1 | j: 8 Result(i: 0.00 | j: 2.828427 | i*j:  
0.00): 0.00
ITER: 0 | i: 1 | j: 9 Result(i: 0.00 | j: 3.00 | i*j:  
0.00): 0.00
ITER: 0 | i: 2 | j: 0 Result(i: 1.414214 | j: 0.00 | i*j:  
0.00): 0.00
ITER: 0 | i: 2 | j: 1 Result(i: 1.414214 | j: 1.00 | i*j:  
1.414214): 1.414214
ITER: 0 | i: 2 | j: 2 Result(i: 1.414214 | j: 1.414214 | i*j:  
2.00): 3.414214
ITER: 0 | i: 2 | j: 3 Result(i: 1.414214 | j: 1.732051 | i*j:  
2.449490): 5.863703
ITER: 0 | i: 2 | j: 4 Result(i: 1.414214 | j: 2.00 | i*j:  
2.828427): 8.692130
ITER: 0 | i: 2 | j: 5 Result(i: 1.414214 | j: 2.236068 | i*j:  
3.162278): 11.854408
ITER: 0 | i: 2 | j: 6 Result(i: 1.414214 | j: 2.449490 | i*j:  
3.464102): 15.318510
ITER: 0 | i: 2 | j: 7 Result(i: 1.414214 | j: 2.645751 | i*j:  
3.741657): 19.060167
ITER: 0 | i: 2 | j: 8 Result(i: 1.414214 | j: 2.828427 | i*j:  
4.00): 23.060167
ITER: 0 | i: 2 | j: 9 Result(i: 1.414214 | j: 3.00 | i*j:  
4.242641): 27.302808
ITER: 0 | i: 3 | j: 0 Result(i: 1.732051 | j: 0.00 | i*j:  
0.00): 27.302808
ITER: 0 | i: 3 | j: 1 Result(i: 1.732051 | j: 1.00 | i*j:  
1.732051): 29.034859
ITER: 0 | i: 3 | j: 2 Result(i: 1.732051 | j: 1.414214 | i*j:  
2.449490): 31.484348
ITER: 0 | i: 3 | j: 3 Result(i: 1.732051 | j: 1.732051 | i*j:  
3.00): 34.484348
ITER: 0 | i: 3 | j: 4 Result(i: 1.732051 | j: 2.00 | i*j:  
3.464102): 37.948450
ITER: 0 | i: 3 | j: 5 Result(i: 1.732051 | j: 2.236068 | i*j:  
3.872983): 41.821433
ITER: 0 | i: 3 | j: 6 Result(i: 1.732051 | j: 2.449490 | i*j:  
4.242641): 46.064074
ITER: 0 | i: 3 | j: 7 Result(i: 1.732051 | j: 2.645751 | i*j:  
4.582576): 50.646650
ITER: 0 | i: 3 | j: 8 Result(i: 1.732051 | j: 2.828427 | i*j:  
4.898979): 55.545629
ITER: 0 | i: 3 | j: 9 Result(i: 1.732051 | j: 3.00 | i*j:  
5.196152): 60.741782
ITER: 0 | i: 4 | j: 0 Result(i: 2.00 | j: 0.00 | i*j:  
0.00): 60.741782
ITER: 0 | i: 4 | j: 1 Result(i: 2.00 | j: 1.00 | i*j:  
2.00): 62.741782
ITER: 0 | i: 4 | j: 2 Result(i: 2.00 | j: 1.414214 | i*j:  
2.828427): 65.570209
ITER: 0 | i: 4 | j: 3 Result(i: 2.00 | j: 1.732051 | i*j:  
3.464102): 69.034310
ITER: 0 | i: 4 | j: 4 Result(i: 2.00 | j: 2.00 | i*j: 

[gem5-users] Re: HPCG on RISCV

2022-10-05 Thread Νικόλαος Ταμπουρατζής

Dear Jason, all,

I am trying to find the accuracy problem with RISCV-FS and I observe  
that the problem is created (at least in my dummy example) because the  
variables (double) are set to zero in random simulated time (for this  
reason I get different results among executions of the same code).  
Specifically for the following dummy code:



#include 
#include 

int main(){

int dim = 10;

float result;

for (int iter = 0; iter < 2; iter++){
result = 0;
for (int i = 0; i < dim; i++){
for (int j = 0; j < dim; j++){
float sq_i = sqrt(i);
float sq_j = sqrt(j);
result += sq_i * sq_j;
printf("ITER: %d | i: %d | j: %d Result(i: %f | j: %f  
| i*j: %f): %f\n", iter, i , j, sq_i, sq_j, sq_i * sq_j, result);

}
}
printf("Final Result: %lf\n", result);
}
}


The correct Final Result in both iterations is 372.721656. However, I  
get the following results in FS:


ITER: 0 | i: 0 | j: 0 Result(i: 0.00 | j: 0.00 | i*j:  
0.00): 0.00
ITER: 0 | i: 0 | j: 1 Result(i: 0.00 | j: 1.00 | i*j:  
0.00): 0.00
ITER: 0 | i: 0 | j: 2 Result(i: 0.00 | j: 1.414214 | i*j:  
0.00): 0.00
ITER: 0 | i: 0 | j: 3 Result(i: 0.00 | j: 1.732051 | i*j:  
0.00): 0.00
ITER: 0 | i: 0 | j: 4 Result(i: 0.00 | j: 2.00 | i*j:  
0.00): 0.00
ITER: 0 | i: 0 | j: 5 Result(i: 0.00 | j: 2.236068 | i*j:  
0.00): 0.00
ITER: 0 | i: 0 | j: 6 Result(i: 0.00 | j: 2.449490 | i*j:  
0.00): 0.00
ITER: 0 | i: 0 | j: 7 Result(i: 0.00 | j: 2.645751 | i*j:  
0.00): 0.00
ITER: 0 | i: 0 | j: 8 Result(i: 0.00 | j: 2.828427 | i*j:  
0.00): 0.00
ITER: 0 | i: 0 | j: 9 Result(i: 0.00 | j: 3.00 | i*j:  
0.00): 0.00
ITER: 0 | i: 1 | j: 0 Result(i: 1.00 | j: 0.00 | i*j:  
0.00): 0.00
ITER: 0 | i: 1 | j: 1 Result(i: 1.00 | j: 1.00 | i*j:  
1.00): 1.00
ITER: 0 | i: 1 | j: 2 Result(i: 1.00 | j: 1.414214 | i*j:  
1.414214): 2.414214
ITER: 0 | i: 1 | j: 3 Result(i: 1.00 | j: 1.732051 | i*j:  
1.732051): 4.146264
ITER: 0 | i: 1 | j: 4 Result(i: 0.00 | j: 2.00 | i*j:  
0.00): 0.00
ITER: 0 | i: 1 | j: 5 Result(i: 0.00 | j: 2.236068 | i*j:  
0.00): 0.00
ITER: 0 | i: 1 | j: 6 Result(i: 0.00 | j: 2.449490 | i*j:  
0.00): 0.00
ITER: 0 | i: 1 | j: 7 Result(i: 0.00 | j: 2.645751 | i*j:  
0.00): 0.00
ITER: 0 | i: 1 | j: 8 Result(i: 0.00 | j: 2.828427 | i*j:  
0.00): 0.00
ITER: 0 | i: 1 | j: 9 Result(i: 0.00 | j: 3.00 | i*j:  
0.00): 0.00
ITER: 0 | i: 2 | j: 0 Result(i: 1.414214 | j: 0.00 | i*j:  
0.00): 0.00
ITER: 0 | i: 2 | j: 1 Result(i: 1.414214 | j: 1.00 | i*j:  
1.414214): 1.414214
ITER: 0 | i: 2 | j: 2 Result(i: 1.414214 | j: 1.414214 | i*j:  
2.00): 3.414214
ITER: 0 | i: 2 | j: 3 Result(i: 1.414214 | j: 1.732051 | i*j:  
2.449490): 5.863703
ITER: 0 | i: 2 | j: 4 Result(i: 1.414214 | j: 2.00 | i*j:  
2.828427): 8.692130
ITER: 0 | i: 2 | j: 5 Result(i: 1.414214 | j: 2.236068 | i*j:  
3.162278): 11.854408
ITER: 0 | i: 2 | j: 6 Result(i: 1.414214 | j: 2.449490 | i*j:  
3.464102): 15.318510
ITER: 0 | i: 2 | j: 7 Result(i: 1.414214 | j: 2.645751 | i*j:  
3.741657): 19.060167
ITER: 0 | i: 2 | j: 8 Result(i: 1.414214 | j: 2.828427 | i*j:  
4.00): 23.060167
ITER: 0 | i: 2 | j: 9 Result(i: 1.414214 | j: 3.00 | i*j:  
4.242641): 27.302808
ITER: 0 | i: 3 | j: 0 Result(i: 1.732051 | j: 0.00 | i*j:  
0.00): 27.302808
ITER: 0 | i: 3 | j: 1 Result(i: 1.732051 | j: 1.00 | i*j:  
1.732051): 29.034859
ITER: 0 | i: 3 | j: 2 Result(i: 1.732051 | j: 1.414214 | i*j:  
2.449490): 31.484348
ITER: 0 | i: 3 | j: 3 Result(i: 1.732051 | j: 1.732051 | i*j:  
3.00): 34.484348
ITER: 0 | i: 3 | j: 4 Result(i: 1.732051 | j: 2.00 | i*j:  
3.464102): 37.948450
ITER: 0 | i: 3 | j: 5 Result(i: 1.732051 | j: 2.236068 | i*j:  
3.872983): 41.821433
ITER: 0 | i: 3 | j: 6 Result(i: 1.732051 | j: 2.449490 | i*j:  
4.242641): 46.064074
ITER: 0 | i: 3 | j: 7 Result(i: 1.732051 | j: 2.645751 | i*j:  
4.582576): 50.646650
ITER: 0 | i: 3 | j: 8 Result(i: 1.732051 | j: 2.828427 | i*j:  
4.898979): 55.545629
ITER: 0 | i: 3 | j: 9 Result(i: 1.732051 | j: 3.00 | i*j:  
5.196152): 60.741782
ITER: 0 | i: 4 | j: 0 Result(i: 2.00 | j: 0.00 | i*j:  
0.00): 60.741782
ITER: 0 | i: 4 | j: 1 Result(i: 2.00 | j: 1.00 | i*j:  
2.00): 62.741782
ITER: 0 | i: 4 | j: 2 Result(i: 2.00 | j: 1.414214 | i*j:  
2.828427): 65.570209
ITER: 0 | i: 4 | j: 3 Result(i: 2.00 | j: 1.732051 | i*j:  
3.464102): 69.034310
ITER: 0 | i: 4 | j: 4 Result(i: 2.00 | j: 2.00 | i*j:  
4.00): 73.034310
ITER: 0 | i: 4 | j: 5 Result(i: 2.00 | j: 2.236068 | i*j:  
4.472136): 77.506446
ITER: 0 | i: 4 | j: 6 Result(i: 2.00 | j: 2.449490 | i*j:  
4.898979): 82.405426
ITER: 0 | i: 4 | j: