Don't declare gettimeofday in parlib.h
[akaros.git] / tests / juan_test.c
1 #include <stdio.h>
2 #include <pthread.h>
3 #include <stdlib.h>
4 #include <unistd.h>
5 #include <sys/time.h>
6
7 /* OS dependent #incs */
8 #include <parlib.h>
9 #include <vcore.h>
10 #include <timing.h>
11
12 static uint32_t __get_pcoreid(void)
13 {
14         return __procinfo.vcoremap[vcore_id()].pcoreid;
15 }
16
17 static __attribute__ ((noinline)) int juan_work(void)
18 {
19     const int MAX_ITER = 100000;
20     register int res = 0;
21     for (int i = 0; i < MAX_ITER; ++i) {
22         for (int j = 0; j < i; ++j) {
23             res += (i * 2 - 5 * j) / 3;
24         }
25     }
26         return res;
27 }
28
29 static void juan_test(void)
30 {
31         unsigned long long usec_diff;
32         struct timeval start_tv = {0};
33         struct timeval end_tv = {0};
34         int res;
35
36         printf("We are %sin MCP mode, running on vcore %d, pcore %d\n",
37                (in_multi_mode() ? "" : "not "), vcore_id(),
38                __get_pcoreid());
39
40         if (gettimeofday(&start_tv, 0))
41                 perror("Start time error...");
42
43         res = juan_work();
44
45         if (gettimeofday(&end_tv, 0))
46                 perror("End time error...");
47
48         usec_diff = (end_tv.tv_sec - start_tv.tv_sec) * 1000000 +
49                     (end_tv.tv_usec - start_tv.tv_usec);
50
51     printf("Result: %d Usec diff: %llu\n", res, usec_diff);
52 }
53
54 void *juan_thread(void* arg)
55 {       
56         juan_test();
57 }
58
59 int main(int argc, char** argv) 
60 {
61         pthread_t child;
62         void *child_ret;
63         juan_test();
64         printf("Spawning thread, etc...\n");
65         pthread_create(&child, NULL, &juan_thread, NULL);
66         pthread_join(child, &child_ret);
67