Changes in src/benchmark/csv-data.c [bd37119:a5b7905]
- File:
-
- 1 edited
-
src/benchmark/csv-data.c (modified) (9 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/benchmark/csv-data.c
rbd37119 ra5b7905 28 28 // coroutine context switch 29 29 long long int measure_coroutine() { 30 const unsigned int NoOfTimes = N;30 const unsigned int NoOfTimes = 50000000; 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 = N;45 const unsigned int NoOfTimes = 50000000; 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 = N;63 const unsigned int NoOfTimes = 5000000; 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 = N;81 const unsigned int NoOfTimes = 5000000; 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 96 98 mon_t mon1; 97 99 … … 107 109 108 110 void 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 125 void side1B( mon_t & mutex a ) { 126 for( int i = 0;; i++ ) { 127 signal(cond1b); 114 128 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); 127 130 } 128 131 } … … 141 144 142 145 //----------------------------------------------------------------------------- 143 // multi internal sched entry146 // multi internal sched 144 147 mon_t mon2; 145 148 … … 155 158 156 159 void 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 174 void side2B( mon_t & mutex a, mon_t & mutex b ) { 175 for( int i = 0;; i++ ) { 176 signal(cond2b); 162 177 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); 175 179 } 176 180 } … … 189 193 190 194 //----------------------------------------------------------------------------- 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 //----------------------------------------------------------------------------- 191 265 // main loop 192 266 int main() 193 267 { 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.