[gem5-users] Re: HPCG on RISCV
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
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: