bug fixes for timer and timer training.
[akaros.git] / user / null.c
1 // null app
2 #include <inc/lib.h>
3 #include <inc/types.h>
4 #include <inc/syscall.h>
5 #include <inc/x86.h>
6 #include <inc/measure.h>
7 #include <inc/null.h>
8 #include <inc/timer.h>
9
10 #ifdef __DEPUTY__
11 #pragma nodeputy
12 #endif
13
14 #define NUM_ITERATIONS  100000
15 uint64_t times[NUM_ITERATIONS];
16
17 uint64_t total(uint64_t (COUNT(length) array)[], int length)
18 {
19         uint64_t sum = 0;
20         for(int i=0; i<length; i++) {
21                 sum+=array[i];
22         }
23         return sum;
24         //return (length > 0) ? sum/((uint64_t)length) : 0;
25 }
26
27 void print_timer(timer_t* timer)
28 {
29         cprintf("%s, %llu, %llu\n", timer->label, timer->curr_run, timer->aggr_run);
30 }
31
32 void umain(void)
33 {
34         extern uint64_t timing_overhead;
35         async_desc_t *desc1, *desc2;
36         async_rsp_t rsp1, rsp2;
37         cprintf ("training result %llu\n", timing_overhead);
38         /*      
39         cache_buster_async(&desc1, 20, 0xdeadbeef);
40         cache_buster_async(&desc2, 10, 0xcafebabe);
41         waiton_async_call(desc1, &rsp1);
42         waiton_async_call(desc2, &rsp2);
43         //measure_function(sys_null(), NUM_ITERATIONS, "sys_null");
44         //measure_function(asm volatile("nop;"), NUM_ITERATIONS, "nop");
45         //measure_function(cprintf("Reg Sync call  \n"), 10, "printf");
46         //measure_function_async(cprintf_async(&desc, "Cross-Core call\n"), desc, 10,\
47         //                       1, "Async Printf");
48         // Note this won't actually do 100 inner runs (first parameter).  will stop
49         // making calls beyond the ring size and won't wait on any extra calls.
50         measure_async_call(null_async(&desc), desc, 100, 100, "Async Null");
51         */
52         for (int i=0; i<100;i++){
53                 TAGGED_TIMING_BEGIN(umain);
54                 TAGGED_TIMING_END(umain);
55         }
56         POOL_FOR_EACH(&timer_pool, print_timer);
57         // Spin to make sure we don't have any resources deallocated before done
58         while(1);
59 }