Changes in src/benchmark/csv-data.c [a5b7905:bd37119]
- File:
-
- 1 edited
-
src/benchmark/csv-data.c (modified) (9 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/benchmark/csv-data.c
ra5b7905 rbd37119 28 28 // coroutine context switch 29 29 long long int measure_coroutine() { 30 const unsigned int NoOfTimes = 50000000;30 const unsigned int NoOfTimes = N; 31 31 long long int StartTime, EndTime; 32 32 … … 43 43 // thread context switch 44 44 long long int measure_thread() { 45 const unsigned int NoOfTimes = 50000000;45 const unsigned int NoOfTimes = N; 46 46 long long int StartTime, EndTime; 47 47 … … 61 61 62 62 long long int measure_1_monitor_entry() { 63 const unsigned int NoOfTimes = 5000000;63 const unsigned int NoOfTimes = N; 64 64 long long int StartTime, EndTime; 65 65 mon_t mon; … … 79 79 80 80 long long int measure_2_monitor_entry() { 81 const unsigned int NoOfTimes = 5000000;81 const unsigned int NoOfTimes = N; 82 82 long long int StartTime, EndTime; 83 83 mon_t mon1, mon2; … … 94 94 //----------------------------------------------------------------------------- 95 95 // single internal sched entry 96 const unsigned int NoOfTimes = 500000;97 98 96 mon_t mon1; 99 97 … … 109 107 110 108 void 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; 123 120 } 124 121 125 122 void side1B( mon_t & mutex a ) { 126 123 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); 130 127 } 131 128 } … … 144 141 145 142 //----------------------------------------------------------------------------- 146 // multi internal sched 143 // multi internal sched entry 147 144 mon_t mon2; 148 145 … … 158 155 159 156 void 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; 172 168 } 173 169 174 170 void side2B( mon_t & mutex a, mon_t & mutex b ) { 175 171 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); 179 175 } 180 176 } … … 193 189 194 190 //----------------------------------------------------------------------------- 195 // single external sched196 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 sched232 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 //-----------------------------------------------------------------------------265 191 // main loop 266 192 int main() 267 193 { 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.