Ignore:
Timestamp:
Nov 17, 2017, 10:56:16 AM (4 years ago)
Author:
Rob Schluntz <rschlunt@…>
Branches:
aaron-thesis, arm-eh, cleanup-dtors, deferred_resn, demangler, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, resolv-new, with_gc
Children:
cdbfab0
Parents:
f5c3b6c (diff), b7f8cb4 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge branch 'master' into fix-bug-51

File:
1 edited

Legend:

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

    rf5c3b6c r0fe4e62  
    2828// coroutine context switch
    2929long long int measure_coroutine() {
    30         const unsigned int NoOfTimes = N;
     30        const unsigned int NoOfTimes = 50000000;
    3131        long long int StartTime, EndTime;
    3232
     
    4343// thread context switch
    4444long long int measure_thread() {
    45         const unsigned int NoOfTimes = N;
     45        const unsigned int NoOfTimes = 50000000;
    4646        long long int StartTime, EndTime;
    4747
     
    6161
    6262long long int measure_1_monitor_entry() {
    63         const unsigned int NoOfTimes = N;
     63        const unsigned int NoOfTimes = 5000000;
    6464        long long int StartTime, EndTime;
    6565        mon_t mon;
     
    7979
    8080long long int measure_2_monitor_entry() {
    81         const unsigned int NoOfTimes = N;
     81        const unsigned int NoOfTimes = 5000000;
    8282        long long int StartTime, EndTime;
    8383        mon_t mon1, mon2;
     
    9494//-----------------------------------------------------------------------------
    9595// single internal sched entry
     96const unsigned int NoOfTimes = 500000;
     97
    9698mon_t mon1;
    9799
     
    107109
    108110void side1A( mon_t & mutex a, long long int * out ) {
    109         long long int StartTime, EndTime;
    110 
    111         StartTime = Time();
    112         for( int i = 0;; i++ ) {
    113                 signal(&cond1a);
     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;
     123}
     124
     125void side1B( mon_t & mutex a ) {
     126        for( int i = 0;; i++ ) {
     127                signal(cond1b);
    114128                if( i > N ) break;
    115                 wait(&cond1b);
    116         }
    117         EndTime = Time();
    118 
    119         *out = ( EndTime - StartTime ) / N;
    120 }
    121 
    122 void side1B( mon_t & mutex a ) {
    123         for( int i = 0;; i++ ) {
    124                 signal(&cond1b);
    125                 if( i > N ) break;
    126                 wait(&cond1a);
     129                wait(cond1a);
    127130        }
    128131}
     
    141144
    142145//-----------------------------------------------------------------------------
    143 // multi internal sched entry
     146// multi internal sched
    144147mon_t mon2;
    145148
     
    155158
    156159void side2A( mon_t & mutex a, mon_t & mutex b, long long int * out ) {
    157         long long int StartTime, EndTime;
    158 
    159         StartTime = Time();
    160         for( int i = 0;; i++ ) {
    161                 signal(&cond2a);
     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;
     172}
     173
     174void side2B( mon_t & mutex a, mon_t & mutex b ) {
     175        for( int i = 0;; i++ ) {
     176                signal(cond2b);
    162177                if( i > N ) break;
    163                 wait(&cond2b);
    164         }
    165         EndTime = Time();
    166 
    167         *out = ( EndTime - StartTime ) / N;
    168 }
    169 
    170 void side2B( mon_t & mutex a, mon_t & mutex b ) {
    171         for( int i = 0;; i++ ) {
    172                 signal(&cond2b);
    173                 if( i > N ) break;
    174                 wait(&cond2a);
     178                wait(cond2a);
    175179        }
    176180}
     
    189193
    190194//-----------------------------------------------------------------------------
     195// single external sched
     196
     197volatile int go = 0;
     198
     199void __attribute__((noinline)) call( mon_t & mutex m1 ) {}
     200
     201long 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
     216thread thrd3 {};
     217void ^?{}( thrd3 & mutex this ) {}
     218void main( thrd3 & this ) {
     219        while(go == 0) { yield(); }
     220        while(go == 1) { call(mon1); }
     221
     222}
     223
     224long long int measure_1_sched_ext() {
     225        go = 0;
     226        thrd3 t;
     227        return wait(mon1);
     228}
     229
     230//-----------------------------------------------------------------------------
     231// multi external sched
     232
     233void __attribute__((noinline)) call( mon_t & mutex m1, mon_t & mutex m2 ) {}
     234
     235long 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
     250thread thrd4 {};
     251void ^?{}( thrd4 & mutex this ) {}
     252void main( thrd4 & this ) {
     253        while(go == 0) { yield(); }
     254        while(go == 1) { call(mon1, mon2); }
     255
     256}
     257
     258long long int measure_2_sched_ext() {
     259        go = 0;
     260        thrd3 t;
     261        return wait(mon1, mon2);
     262}
     263
     264//-----------------------------------------------------------------------------
    191265// main loop
    192266int main()
    193267{
    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 }
     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}
Note: See TracChangeset for help on using the changeset viewer.