Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Various fixes. Working (in SG) for ForkJoins, but not for Montage.
[simgrid.git] / examples / gras / chrono / chrono.c
1 /* $Id$ */
2
3 /* chrono - demo of GRAS benchmarking features                              */
4
5 /* Copyright (c) 2005 Martin Quinson, Arnaud Legrand. All rights reserved.  */
6
7 /* This program is free software; you can redistribute it and/or modify it
8  * under the terms of the license (GNU LGPL) which comes with this package. */
9
10 #include "gras.h"
11 #include "xbt/log.h"
12
13 XBT_LOG_NEW_DEFAULT_CATEGORY(Chrono, "Messages specific to this example");
14
15
16 /* Function prototypes */
17 int multiplier(int argc, char *argv[]);
18
19 int multiplier(int argc, char *argv[])
20 {
21   int i, j, k, l;
22   double *A, *B, *C;
23   int n = 100;
24   double start = 0.0;
25   double now = 0.0;
26
27   gras_init(&argc, argv);
28
29   A = malloc(n * n * sizeof(double));
30   B = malloc(n * n * sizeof(double));
31   C = malloc(n * n * sizeof(double));
32
33   start = now = gras_os_time();
34
35   INFO1("Begin matrix multiplication loop (time: %g)", start);
36
37   for (l = 0; l < 4; l++) {
38     now = gras_os_time();
39     GRAS_BENCH_ONCE_RUN_ONCE_BEGIN();
40     for (i = 0; i < n; i++)
41       for (j = 0; j < n; j++) {
42         A[i * n + j] = 2 / n;
43         B[i * n + j] = 1 / n;
44         C[i * n + j] = 0.0;
45       }
46
47     for (i = 0; i < n; i++)
48       for (j = 0; j < n; j++)
49         for (k = 0; k < n; k++)
50           C[i * n + j] += A[i * n + k] * B[k * n + j];
51
52     GRAS_BENCH_ONCE_RUN_ONCE_END();
53     now = gras_os_time() - now;
54     INFO2("Iteration %d : %g ", l, now);
55   }
56
57   now = gras_os_time() - start;
58   INFO2("End matrix multiplication loop (time: %g; Duration: %g)",
59         gras_os_time(), now);
60
61   start = now = gras_os_time();
62   INFO1("Begin malloc loop (time: %g)", start);
63   for (l = 0; l < 4; l++) {
64     now = gras_os_time();
65     GRAS_BENCH_ONCE_RUN_ONCE_BEGIN();
66     free(A);
67     A = malloc(n * n * sizeof(double));
68     GRAS_BENCH_ONCE_RUN_ONCE_END();
69     now = gras_os_time() - now;
70     INFO2("Iteration %d : %g ", l, now);
71   }
72
73   start = now = gras_os_time();
74   INFO1("Begin integer incrementation loop (time: %g)", start);
75   for (l = 0; l < 4; l++) {
76     GRAS_BENCH_ONCE_RUN_ONCE_BEGIN();
77     j++;
78     GRAS_BENCH_ONCE_RUN_ONCE_END();
79   }
80   free(A);
81   free(B);
82   free(C);
83
84   gras_exit();
85   return 0;
86 }