Changeset 9042795
- Timestamp:
- May 2, 2017, 7:18:52 PM (8 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:
- 6db9dab
- Parents:
- ed8a0d2 (diff), b510ac2 (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. - Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
Jenkinsfile
red8a0d2 r9042795 371 371 """ 372 372 373 def email_to = "pabuhr@uwaterloo.ca, rschlunt@uwaterloo.ca, a3moss@uwaterloo.ca, tdelisle@uwaterloo.ca, brice.dobry@huawei.com "373 def email_to = "pabuhr@uwaterloo.ca, rschlunt@uwaterloo.ca, a3moss@uwaterloo.ca, tdelisle@uwaterloo.ca, brice.dobry@huawei.com, ajbeach@edu.uwaterloo.ca" 374 374 375 375 //send email notification -
src/benchmark/CorCtxSwitch.c
red8a0d2 r9042795 23 23 } // Time 24 24 25 struct GreatSuspender { 26 coroutine_desc __cor; 27 }; 28 29 DECL_COROUTINE(GreatSuspender); 25 coroutine GreatSuspender {}; 30 26 31 27 void ?{}( GreatSuspender * this ) { -
src/benchmark/bench.c
red8a0d2 r9042795 86 86 //======================================= 87 87 88 struct CoroutineDummy { coroutine_desc __cor; }; 89 DECL_COROUTINE(CoroutineDummy); 88 coroutine CoroutineDummy {}; 90 89 void main(CoroutineDummy * this) {} 91 90 … … 117 116 } 118 117 119 structCoroutineResume {118 coroutine CoroutineResume { 120 119 int N; 121 coroutine_desc __cor;122 120 }; 123 124 DECL_COROUTINE(CoroutineResume);125 121 126 122 void ?{}(CoroutineResume* this, int N) { … … 150 146 //======================================= 151 147 152 struct ThreadDummy { thread_desc __thrd; }; 153 DECL_THREAD(ThreadDummy); 148 thread ThreadDummy {}; 154 149 void main(ThreadDummy * this) {} 155 150 … … 177 172 } 178 173 179 structContextSwitch {174 thread ContextSwitch { 180 175 int N; 181 176 long long result; 182 thread_desc __thrd;183 177 }; 184 185 DECL_THREAD(ContextSwitch);186 178 187 179 void main(ContextSwitch * this) { … … 241 233 DynamicTaskCreateDelete( NoOfTimes ); 242 234 { 243 scoped(ContextSwitch)dummy = { (int)NoOfTimes }; // context switch235 ContextSwitch dummy = { (int)NoOfTimes }; // context switch 244 236 } 245 237 sout | "\t" | endl; -
src/benchmark/csv-data.c
red8a0d2 r9042795 25 25 } // Time 26 26 27 struct GreatSuspender { 28 coroutine_desc __cor; 29 }; 30 31 DECL_COROUTINE(GreatSuspender); 27 coroutine GreatSuspender {}; 32 28 33 29 void ?{}( GreatSuspender * this ) { -
src/libcfa/concurrency/monitor.c
red8a0d2 r9042795 17 17 #include "monitor" 18 18 19 #include <stdlib> 20 19 21 #include "kernel_private.h" 20 22 #include "libhdr.h" … … 130 132 this_thread()->current_monitors = this->prev_mntrs; 131 133 this_thread()->current_monitor_count = this->prev_count; 134 } 135 136 void debug_break() __attribute__(( noinline )) 137 { 138 132 139 } 133 140 … … 171 178 172 179 //Find the next thread(s) to run 173 unsigned short thread_count = count;180 unsigned short thread_count = 0; 174 181 thread_desc * threads[ count ]; 182 for(int i = 0; i < count; i++) { 183 threads[i] = 0; 184 } 185 186 debug_break(); 175 187 176 188 for( int i = 0; i < count; i++) { 177 189 thread_desc * new_owner = next_thread( this->monitors[i] ); 178 thread_count = insert_unique( threads, i, new_owner ); 179 } 190 thread_count = insert_unique( threads, thread_count, new_owner ); 191 } 192 193 debug_break(); 180 194 181 195 LIB_DEBUG_PRINT_SAFE("Will unblock: "); … … 339 353 LIB_DEBUG_PRINT_SAFE("Branding\n"); 340 354 assertf( thrd->current_monitors != NULL, "No current monitor to brand condition", thrd->current_monitors ); 341 this->monitors = thrd->current_monitors;342 355 this->monitor_count = thrd->current_monitor_count; 356 357 this->monitors = malloc( this->monitor_count * sizeof( *this->monitors ) ); 358 for( int i = 0; i < this->monitor_count; i++ ) { 359 this->monitors[i] = thrd->current_monitors[i]; 360 } 343 361 } 344 362 } 345 363 346 364 static inline unsigned short insert_unique( thread_desc ** thrds, unsigned short end, thread_desc * val ) { 347 for(int i = 0; i < end; i++) { 365 if( !val ) return end; 366 367 for(int i = 0; i <= end; i++) { 348 368 if( thrds[i] == val ) return end; 349 369 } -
src/tests/.expect/concurrent/sched-int-multi.txt
red8a0d2 r9042795 1 Waiting All 2 Entering A 3 Entering A & B 4 Signal 5 Leaving A & B 6 Leaving A 7 Done waiting 1 1000 2 2000 3 3000 4 4000 5 5000 6 6000 7 7000 8 8000 9 9000 10 10000 11 11000 12 12000 13 13000 14 14000 15 15000 16 16000 17 17000 18 18000 19 19000 20 20000 21 21000 22 22000 23 23000 24 24000 25 25000 26 26000 27 27000 28 28000 29 29000 30 30000 31 31000 32 32000 33 33000 34 34000 35 35000 36 36000 37 37000 38 38000 39 39000 40 40000 41 41000 42 42000 43 43000 44 44000 45 45000 46 46000 47 47000 48 48000 49 49000 50 50000 51 51000 52 52000 53 53000 54 54000 55 55000 56 56000 57 57000 58 58000 59 59000 60 60000 61 61000 62 62000 63 63000 64 64000 65 65000 66 66000 67 67000 68 68000 69 69000 70 70000 71 71000 72 72000 73 73000 74 74000 75 75000 76 76000 77 77000 78 78000 79 79000 80 80000 81 81000 82 82000 83 83000 84 84000 85 85000 86 86000 87 87000 88 88000 89 89000 90 90000 91 91000 92 92000 93 93000 94 94000 95 95000 96 96000 97 97000 98 98000 99 99000 100 100000 -
src/tests/sched-int-multi.c
red8a0d2 r9042795 4 4 #include <thread> 5 5 6 enum state_t { WAIT, SIGNAL, BARGE }; 7 6 8 monitor global_t {}; 7 9 10 monitor global_data_t { 11 bool done; 12 int counter; 13 state_t state; 14 }; 15 16 void ?{} ( global_data_t * this ) { 17 this->done = false; 18 this->counter = 0; 19 this->state = BARGE; 20 } 21 22 void ^?{} ( global_data_t * this ) {} 23 24 global_t globalA; 8 25 global_t globalB; 9 global_ t globalA;26 global_data_t globalC; 10 27 11 28 condition cond; 12 29 13 thread Signalee {}; 14 thread Signaler {}; 30 thread Threads {}; 15 31 16 void signalee_action( global_t * mutex a, global_t * mutex b ) { 17 sout | "Waiting All" | endl; 18 wait( &cond ); 19 sout | "Done waiting" | endl; 32 bool logicC( global_t * mutex a, global_t * mutex b, global_data_t * mutex c ) { 33 c->counter++; 34 35 int action = c->counter % 10; 36 37 if( action == 1 || action == 3 ) { 38 if(c->state != BARGE) { 39 sout | "ERROR Mutual exclusion is inconsistent for wait" | endl; 40 abort(); 41 } 42 43 c->state = WAIT; 44 wait( &cond ); 45 46 if(c->state != SIGNAL) { 47 sout | "ERROR Barging detected" | endl; 48 abort(); 49 } 50 } 51 else if( action == 6 ) { 52 if(c->state != BARGE) { 53 sout | "ERROR Mutual exclusion is inconsistent for signal" | endl; 54 abort(); 55 } 56 57 c->state = SIGNAL; 58 59 signal( &cond ); 60 signal( &cond ); 61 } 62 else { 63 c->state = BARGE; 64 } 65 66 if( (c->counter % 1000) == 0 ) sout | c->counter | endl; 67 if( c->counter == 100_000 ) c->done = true; 68 return !c->done; 20 69 } 21 70 22 void main( Signalee* this) {23 signalee_action( &globalA, &globalB);71 bool logicB( global_t * mutex a, global_t * mutex b ) { 72 return logicC(a, b, &globalC); 24 73 } 25 74 26 void signaler_action_inner( global_t * mutex a, global_t * mutex b ) { 27 sout | "Entering A & B" | endl; 28 sout | "Signal" | endl; 29 signal( &cond ); 30 sout | "Leaving A & B" | endl; 75 bool logicA( global_t * mutex a ) { 76 return logicB(a, &globalB); 31 77 } 32 78 33 void signaler_action( global_t * mutex a, global_t * b ) { 34 sout | "Entering A" | endl; 35 signaler_action_inner( a, b ); 36 sout | "Leaving A" | endl; 37 } 38 39 void main( Signaler* this ) { 40 for(int i = 0; i < 10_000; i++) { 41 asm volatile ("" : : : "memory"); 42 } 43 44 signaler_action( &globalA, &globalB ); 79 void main( Threads* this ) { 80 while( logicA(&globalA) ) { yield(); }; 45 81 } 46 82 47 83 int main(int argc, char* argv[]) { 48 processor p ;84 processor p[3]; 49 85 { 50 Signalee a; 51 Signaler b; 86 Threads t[20]; 52 87 } 53 88 }
Note: See TracChangeset
for help on using the changeset viewer.