source: src/benchmark/csv-data.c @ c10ee66

ADTaaron-thesisarm-ehast-experimentalcleanup-dtorsdeferred_resndemanglerenumforall-pointer-decayjacob/cs343-translationjenkins-sandboxnew-astnew-ast-unique-exprnew-envno_listpersistent-indexerpthread-emulationqualifiedEnumresolv-newwith_gc
Last change on this file since c10ee66 was bd951f7, checked in by Thierry Delisle <tdelisle@…>, 7 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.