Changes in / [3100754:4ae78c1]
- Files:
-
- 1 added
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
benchmark/readyQ/cycle.cfa
r3100754 r4ae78c1 62 62 } 63 63 64 printf("Took %'ld ms\n", (end - start)`ms); 64 printf("Duration (ms) : %'ld\n", (end - start)`ms); 65 printf("Number of processors: %'d\n", nprocs); 66 printf("Number of threads : %'d\n", tthreads); 67 printf("Cycle size (# thrds): %'d\n", ring_size); 65 68 printf("Yields per second : %'18.2lf\n", ((double)global_counter) / (end - start)`s); 66 69 printf("ns per yields : %'18.2lf\n", ((double)(end - start)`ns) / global_counter); -
benchmark/readyQ/cycle.go
r3100754 r4ae78c1 126 126 127 127 p := message.NewPrinter(language.English) 128 p.Printf("Took %f ms\n", delta.Seconds()) 128 p.Printf("Duration (ms) : %f\n", delta.Seconds()); 129 p.Printf("Number of processors: %d\n", nprocs); 130 p.Printf("Number of threads : %d\n", tthreads); 131 p.Printf("Cycle size (# thrds): %d\n", ring_size); 129 132 p.Printf("Yields per second : %18.2f\n", float64(global_counter) / delta.Seconds()) 130 133 p.Printf("ns per yields : %18.2f\n", float64(delta.Nanoseconds()) / float64(global_counter)) -
libcfa/src/concurrency/invoke.h
r3100754 r4ae78c1 157 157 158 158 // current execution status for coroutine 159 // Possible values are: 160 // - TICKET_BLOCKED (-1) thread is blocked 161 // - TICKET_RUNNING ( 0) thread is running 162 // - TICKET_UNBLOCK ( 1) thread should ignore next block 159 163 volatile int ticket; 160 164 enum __Coroutine_State state:8; -
libcfa/src/concurrency/io/setup.cfa
r3100754 r4ae78c1 250 250 // Fixup the thread state 251 251 thrd.state = Blocked; 252 thrd.ticket = 0;252 thrd.ticket = TICKET_BLOCKED; 253 253 thrd.preempted = __NO_PREEMPTION; 254 254 -
libcfa/src/concurrency/kernel.cfa
r3100754 r4ae78c1 299 299 int old_ticket = __atomic_fetch_sub(&thrd_dst->ticket, 1, __ATOMIC_SEQ_CST); 300 300 switch(old_ticket) { 301 case 1:301 case TICKET_RUNNING: 302 302 // This is case 1, the regular case, nothing more is needed 303 303 break RUNNING; 304 case 2:304 case TICKET_UNBLOCK: 305 305 // This is case 2, the racy case, someone tried to run this thread before it finished blocking 306 306 // In this case, just run it again. … … 410 410 int old_ticket = __atomic_fetch_add(&thrd->ticket, 1, __ATOMIC_SEQ_CST); 411 411 switch(old_ticket) { 412 case 1:412 case TICKET_RUNNING: 413 413 // Wake won the race, the thread will reschedule/rerun itself 414 414 break; 415 case 0:415 case TICKET_BLOCKED: 416 416 /* paranoid */ verify( ! thrd->preempted != __NO_PREEMPTION ); 417 417 /* paranoid */ verify( thrd->state == Blocked ); … … 422 422 default: 423 423 // This makes no sense, something is wrong abort 424 abort( );424 abort("Thread %p (%s) has mismatch park/unpark\n", thrd, thrd->self_cor.name); 425 425 } 426 426 } -
libcfa/src/concurrency/kernel/startup.cfa
r3100754 r4ae78c1 441 441 442 442 static void ?{}( $thread & this, current_stack_info_t * info) with( this ) { 443 ticket = 1;443 ticket = TICKET_RUNNING; 444 444 state = Start; 445 445 self_cor{ info }; -
libcfa/src/concurrency/kernel_private.hfa
r3100754 r4ae78c1 65 65 // KERNEL ONLY unpark with out disabling interrupts 66 66 void __unpark( struct __processor_id_t *, $thread * thrd ); 67 68 #define TICKET_BLOCKED (-1) // thread is blocked 69 #define TICKET_RUNNING ( 0) // thread is running 70 #define TICKET_UNBLOCK ( 1) // thread should ignore next block 67 71 68 72 static inline bool __post(single_sem & this, struct __processor_id_t * id) { -
libcfa/src/concurrency/thread.cfa
r3100754 r4ae78c1 29 29 context{ 0p, 0p }; 30 30 self_cor{ name, storage, storageSize }; 31 ticket = 1;31 ticket = TICKET_RUNNING; 32 32 state = Start; 33 33 preempted = __NO_PREEMPTION;
Note: See TracChangeset
for help on using the changeset viewer.