* under the terms of the license (GNU LGPL) which comes with this package. */
#include "gras.h"
+#include "xbt/log.h"
XBT_LOG_NEW_DEFAULT_CATEGORY(Chrono,"Messages specific to this example");
int multiplier (int argc,char *argv[])
{
- int i,j,k;
+ int i,j,k,l;
double *A,*B,*C;
- int n = 500;
+ int n = 100;
+ double start = 0.0;
+ double now = 0.0;
+
gras_init(&argc, argv, NULL);
-
+
A = malloc(n*n*sizeof(double));
B = malloc(n*n*sizeof(double));
C = malloc(n*n*sizeof(double));
- INFO1("Before computation : %lg", gras_os_time());
- for(i=0; i<n; i++)
- for(j=0; j<n; j++) {
- A[i*n+j]=2/n;
- B[i*n+j]=1/n;
- C[i*n+j]=0.0;
- }
-
- for(i=0; i<n; i++)
- for(j=0; j<n; j++)
- for(k=0; k<n; k++)
- C[i*n+j] += A[i*n+k]*B[k*n+j];
-
- INFO1("After computation : %lg", gras_os_time());
+ start=now=gras_os_time();
+
+ INFO1("Before computation: %lg", start);
+
+ for(l=0; l<4; l++) {
+ now=gras_os_time();
+ GRAS_BENCH_ONCE_RUN_ONCE_BEGIN();
+ for(i=0; i<n; i++)
+ for(j=0; j<n; j++) {
+ A[i*n+j]=2/n;
+ B[i*n+j]=1/n;
+ C[i*n+j]=0.0;
+ }
+
+ for(i=0; i<n; i++)
+ for(j=0; j<n; j++)
+ for(k=0; k<n; k++)
+ C[i*n+j] += A[i*n+k]*B[k*n+j];
+
+ GRAS_BENCH_ONCE_RUN_ONCE_END();
+ now=gras_os_time()-now;
+ INFO2("Iteration %d : %lg ", l, now);
+ }
+
+ now=gras_os_time()-start;
+ INFO2("After computation: %lg; Duration: %lg ", gras_os_time(), now);
return 0;
}