Changeset b7f8cb4 for src/benchmark/csv-data.c
- Timestamp:
- Nov 16, 2017, 12:26:09 PM (7 years ago)
- Branches:
- ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, deferred_resn, demangler, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, with_gc
- Children:
- 0cf5b79, 0fe4e62, 5f91d650
- Parents:
- 11094d9 (diff), c3d048c (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. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/benchmark/csv-data.c
r11094d9 rb7f8cb4 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 ) { 111 const unsigned int NoOfTimes = 500000; 109 112 long long int StartTime, EndTime; 110 113 … … 112 115 for( int i = 0;; i++ ) { 113 116 signal(cond1a); 114 if( i > N ) break;117 if( i > NoOfTimes ) break; 115 118 wait(cond1b); 116 119 } 117 120 EndTime = Time(); 118 121 119 *out = ( EndTime - StartTime ) / N ;122 *out = ( EndTime - StartTime ) / NoOfTimes; 120 123 } 121 124 … … 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 ) { 160 const unsigned int NoOfTimes = 500000; 157 161 long long int StartTime, EndTime; 158 162 … … 160 164 for( int i = 0;; i++ ) { 161 165 signal(cond2a); 162 if( i > N ) break;166 if( i > NoOfTimes ) break; 163 167 wait(cond2b); 164 168 } 165 169 EndTime = Time(); 166 170 167 *out = ( EndTime - StartTime ) / N ;171 *out = ( EndTime - StartTime ) / NoOfTimes; 168 172 } 169 173 … … 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.