Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/benchmark/csv-data.c

    ra5b7905 rbd37119  
    2828// coroutine context switch
    2929long long int measure_coroutine() {
    30         const unsigned int NoOfTimes = 50000000;
     30        const unsigned int NoOfTimes = N;
    3131        long long int StartTime, EndTime;
    3232
     
    4343// thread context switch
    4444long long int measure_thread() {
    45         const unsigned int NoOfTimes = 50000000;
     45        const unsigned int NoOfTimes = N;
    4646        long long int StartTime, EndTime;
    4747
     
    6161
    6262long long int measure_1_monitor_entry() {
    63         const unsigned int NoOfTimes = 5000000;
     63        const unsigned int NoOfTimes = N;
    6464        long long int StartTime, EndTime;
    6565        mon_t mon;
     
    7979
    8080long long int measure_2_monitor_entry() {
    81         const unsigned int NoOfTimes = 5000000;
     81        const unsigned int NoOfTimes = N;
    8282        long long int StartTime, EndTime;
    8383        mon_t mon1, mon2;
     
    9494//-----------------------------------------------------------------------------
    9595// single internal sched entry
    96 const unsigned int NoOfTimes = 500000;
    97 
    9896mon_t mon1;
    9997
     
    109107
    110108void side1A( mon_t & mutex a, long long int * out ) {
    111         const unsigned int NoOfTimes = 500000;
    112         long long int StartTime, EndTime;
    113 
    114         StartTime = Time();
    115         for( int i = 0;; i++ ) {
    116                 signal(cond1a);
    117                 if( i > NoOfTimes ) break;
    118                 wait(cond1b);
    119         }
    120         EndTime = Time();
    121 
    122         *out = ( EndTime - StartTime ) / NoOfTimes;
     109        long long int StartTime, EndTime;
     110
     111        StartTime = Time();
     112        for( int i = 0;; i++ ) {
     113                signal(&cond1a);
     114                if( i > N ) break;
     115                wait(&cond1b);
     116        }
     117        EndTime = Time();
     118
     119        *out = ( EndTime - StartTime ) / N;
    123120}
    124121
    125122void side1B( mon_t & mutex a ) {
    126123        for( int i = 0;; i++ ) {
    127                 signal(cond1b);
    128                 if( i > N ) break;
    129                 wait(cond1a);
     124                signal(&cond1b);
     125                if( i > N ) break;
     126                wait(&cond1a);
    130127        }
    131128}
     
    144141
    145142//-----------------------------------------------------------------------------
    146 // multi internal sched
     143// multi internal sched entry
    147144mon_t mon2;
    148145
     
    158155
    159156void side2A( mon_t & mutex a, mon_t & mutex b, long long int * out ) {
    160         const unsigned int NoOfTimes = 500000;
    161         long long int StartTime, EndTime;
    162 
    163         StartTime = Time();
    164         for( int i = 0;; i++ ) {
    165                 signal(cond2a);
    166                 if( i > NoOfTimes ) break;
    167                 wait(cond2b);
    168         }
    169         EndTime = Time();
    170 
    171         *out = ( EndTime - StartTime ) / NoOfTimes;
     157        long long int StartTime, EndTime;
     158
     159        StartTime = Time();
     160        for( int i = 0;; i++ ) {
     161                signal(&cond2a);
     162                if( i > N ) break;
     163                wait(&cond2b);
     164        }
     165        EndTime = Time();
     166
     167        *out = ( EndTime - StartTime ) / N;
    172168}
    173169
    174170void side2B( mon_t & mutex a, mon_t & mutex b ) {
    175171        for( int i = 0;; i++ ) {
    176                 signal(cond2b);
    177                 if( i > N ) break;
    178                 wait(cond2a);
     172                signal(&cond2b);
     173                if( i > N ) break;
     174                wait(&cond2a);
    179175        }
    180176}
     
    193189
    194190//-----------------------------------------------------------------------------
    195 // single external sched
    196 
    197 volatile int go = 0;
    198 
    199 void __attribute__((noinline)) call( mon_t & mutex m1 ) {}
    200 
    201 long long int  __attribute__((noinline)) wait( mon_t & mutex m1 ) {
    202         go = 1;
    203         const unsigned int NoOfTimes = 5000000;
    204         long long int StartTime, EndTime;
    205 
    206         StartTime = Time();
    207         for (size_t i = 0; i < NoOfTimes; i++) {
    208                 waitfor(call, m1);
    209         }
    210 
    211         EndTime = Time();
    212         go = 0;
    213         return ( EndTime - StartTime ) / NoOfTimes;
    214 }
    215 
    216 thread thrd3 {};
    217 void ^?{}( thrd3 & mutex this ) {}
    218 void main( thrd3 & this ) {
    219         while(go == 0) { yield(); }
    220         while(go == 1) { call(mon1); }
    221 
    222 }
    223 
    224 long long int measure_1_sched_ext() {
    225         go = 0;
    226         thrd3 t;
    227         return wait(mon1);
    228 }
    229 
    230 //-----------------------------------------------------------------------------
    231 // multi external sched
    232 
    233 void __attribute__((noinline)) call( mon_t & mutex m1, mon_t & mutex m2 ) {}
    234 
    235 long long int  __attribute__((noinline)) wait( mon_t & mutex m1, mon_t & mutex m2 ) {
    236         go = 1;
    237         const unsigned int NoOfTimes = 5000000;
    238         long long int StartTime, EndTime;
    239 
    240         StartTime = Time();
    241         for (size_t i = 0; i < NoOfTimes; i++) {
    242                 waitfor(call, m1, m2);
    243         }
    244 
    245         EndTime = Time();
    246         go = 0;
    247         return ( EndTime - StartTime ) / NoOfTimes;
    248 }
    249 
    250 thread thrd4 {};
    251 void ^?{}( thrd4 & mutex this ) {}
    252 void main( thrd4 & this ) {
    253         while(go == 0) { yield(); }
    254         while(go == 1) { call(mon1, mon2); }
    255 
    256 }
    257 
    258 long long int measure_2_sched_ext() {
    259         go = 0;
    260         thrd3 t;
    261         return wait(mon1, mon2);
    262 }
    263 
    264 //-----------------------------------------------------------------------------
    265191// main loop
    266192int main()
    267193{
    268         sout | "\tepoch:" | time(NULL) | ',' | endl;
    269         sout | "\tctxswitch: {" | endl;
    270         sout | "\t\tcoroutine: "| measure_coroutine() | ',' | endl;
    271         sout | "\t\tthread:" | measure_thread() | ',' | endl;
    272         sout | "\t}," | endl;
    273         sout | "\tmutex: ["     | measure_1_monitor_entry()     | ',' | measure_2_monitor_entry()       | "]," | endl;
    274         sout | "\tscheduling: ["| measure_1_sched_int()         | ',' | measure_2_sched_int()   | ','  |
    275                                           measure_1_sched_ext()         | ',' | measure_2_sched_ext()   | "]," | endl;
    276 }
     194        sout | time(NULL) | ',';
     195        sout | measure_coroutine() | ',';
     196        sout | measure_thread() | ',';
     197        sout | measure_1_monitor_entry() | ',';
     198        sout | measure_2_monitor_entry() | ',';
     199        sout | measure_1_sched_int() | ',';
     200        sout | measure_2_sched_int() | endl;
     201}
Note: See TracChangeset for help on using the changeset viewer.