source: src/benchmark/csv-data.c@ 4f9636f

ADT aaron-thesis arm-eh ast-experimental cleanup-dtors deferred_resn demangler enum forall-pointer-decay jacob/cs343-translation jenkins-sandbox new-ast new-ast-unique-expr new-env no_list persistent-indexer pthread-emulation qualifiedEnum resolv-new with_gc
Last change on this file since 4f9636f was bd951f7, checked in by Thierry Delisle <tdelisle@…>, 8 years ago

csv-data now contains monitor entry and leave timings

  • Property mode set to 100644
File size: 2.4 KB
Line 
1#include <fstream>
2#include <monitor>
3#include <stdlib>
4#include <thread>
5
6#include "bench.h"
7
8coroutine GreatSuspender {};
9
10void ?{}( GreatSuspender * this ) {
11 prime(this);
12}
13
14void main( GreatSuspender * this )
15{
16 while( true ) {
17 suspend();
18 }
19}
20
21void resumer( GreatSuspender * this, const unsigned int NoOfTimes ) {
22 for ( volatile unsigned int i = 0; i < NoOfTimes; i += 1 ) {
23 resume( this );
24 }
25}
26
27#ifndef N
28#define N 100000000
29#endif
30
31//-----------------------------------------------------------------------------
32// coroutine context switch
33long long int measure_coroutine() {
34 const unsigned int NoOfTimes = N;
35 long long int StartTime, EndTime;
36
37 GreatSuspender s;
38
39 StartTime = Time();
40 // for ( volatile unsigned int i = 0; i < NoOfTimes; i += 1 ) {
41 // resume( this_coroutine() );
42 // // resume( &s );
43 // }
44 resumer( &s, NoOfTimes );
45 EndTime = Time();
46
47 return ( EndTime - StartTime ) / NoOfTimes;
48}
49
50//-----------------------------------------------------------------------------
51// thread context switch
52long long int measure_thread() {
53 const unsigned int NoOfTimes = N;
54 long long int StartTime, EndTime;
55
56 StartTime = Time();
57 for ( volatile unsigned int i = 0; i < NoOfTimes; i += 1 ) {
58 yield();
59 }
60 EndTime = Time();
61
62 return ( EndTime - StartTime ) / NoOfTimes;
63}
64
65//-----------------------------------------------------------------------------
66// single monitor entry
67monitor mon_t {};
68void dummy( mon_t * mutex m ) {}
69
70long long int measure_1_monitor_entry() {
71 const unsigned int NoOfTimes = N;
72 long long int StartTime, EndTime;
73 mon_t mon;
74
75 StartTime = Time();
76 for ( volatile unsigned int i = 0; i < NoOfTimes; i += 1 ) {
77 dummy( &mon );
78 }
79 EndTime = Time();
80
81 return ( EndTime - StartTime ) / NoOfTimes;
82}
83
84//-----------------------------------------------------------------------------
85// multi monitor entry
86void dummy( mon_t * mutex m1, mon_t * mutex m2 ) {}
87
88long long int measure_2_monitor_entry() {
89 const unsigned int NoOfTimes = N;
90 long long int StartTime, EndTime;
91 mon_t mon1, mon2;
92
93 StartTime = Time();
94 for ( volatile unsigned int i = 0; i < NoOfTimes; i += 1 ) {
95 dummy( &mon1, &mon2 );
96 }
97 EndTime = Time();
98
99 return ( EndTime - StartTime ) / NoOfTimes;
100}
101
102int main()
103{
104 sout | time(NULL) | ',';
105 sout | measure_coroutine() | ',';
106 sout | measure_thread() | ',';
107 sout | measure_1_monitor_entry() | ',';
108 sout | measure_2_monitor_entry() | endl;
109}
Note: See TracBrowser for help on using the repository browser.