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