Changeset 2c7eee0 for benchmark/readyQ/cycle.cfa
- Timestamp:
- Nov 3, 2020, 1:21:36 PM (4 years ago)
- Branches:
- ADT, arm-eh, ast-experimental, enum, forall-pointer-decay, jacob/cs343-translation, master, new-ast-unique-expr, pthread-emulation, qualifiedEnum
- Children:
- dbb1073
- Parents:
- 58688bf
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
benchmark/readyQ/cycle.cfa
r58688bf r2c7eee0 1 1 #include "rq_bench.hfa" 2 2 3 thread Partner { 4 Partner * partner; 3 struct Partner { 5 4 unsigned long long count; 5 unsigned long long blocks; 6 bench_sem self; 7 bench_sem * next; 6 8 }; 7 9 8 10 void ?{}( Partner & this ) { 9 ((thread&)this){ bench_cluster };11 this.count = this.blocks = 0; 10 12 } 11 13 12 void main( Partner & this ) { 13 this.count = 0; 14 thread BThrd { 15 Partner & partner; 16 }; 17 18 void ?{}( BThrd & this, Partner * partner ) { 19 ((thread&)this){ bench_cluster }; 20 &this.partner = partner; 21 } 22 23 void ^?{}( BThrd & mutex this ) {} 24 25 void main( BThrd & thrd ) with(thrd.partner) { 26 count = 0; 14 27 for() { 15 park();16 unpark( *this.partner);17 this.count ++;28 blocks += wait( self ); 29 post( *next ); 30 count ++; 18 31 if( clock_mode && stop) break; 19 if(!clock_mode && this.count >= stop_count) break;32 if(!clock_mode && count >= stop_count) break; 20 33 } 21 34 … … 33 46 { 34 47 unsigned long long global_counter = 0; 48 unsigned long long global_blocks = 0; 35 49 unsigned tthreads = nthreads * ring_size; 36 50 Time start, end; … … 38 52 { 39 53 threads_left = tthreads; 40 Partner threads[tthreads]; 54 BThrd * threads[tthreads]; 55 Partner thddata[tthreads]; 41 56 for(i; tthreads) { 42 57 unsigned pi = (i + nthreads) % tthreads; 43 threads[i].partner = &threads[pi]; 58 thddata[i].next = &thddata[pi].self; 59 } 60 for(int i = 0; i < tthreads; i++) { 61 threads[i] = malloc(); 62 (*threads[i]){ &thddata[i] }; 44 63 } 45 64 printf("Starting\n"); … … 49 68 50 69 for(i; nthreads) { 51 unpark( threads[i]);70 post( thddata[i].self ); 52 71 } 53 72 wait(start, is_tty); … … 58 77 59 78 for(i; tthreads) { 60 global_counter += join( threads[i] ).count; 79 Partner & partner = join( *threads[i] ).partner; 80 global_counter += partner.count; 81 global_blocks += partner.blocks; 82 delete(threads[i]); 61 83 } 62 84 } 63 85 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); 68 printf("Yields per second : %'18.2lf\n", ((double)global_counter) / (end - start)`s); 69 printf("ns per yields : %'18.2lf\n", ((double)(end - start)`ns) / global_counter); 70 printf("Total yields : %'15llu\n", global_counter); 71 printf("Yields per threads : %'15llu\n", global_counter / tthreads); 72 printf("Yields per procs : %'15llu\n", global_counter / nprocs); 73 printf("Yields/sec/procs : %'18.2lf\n", (((double)global_counter) / nprocs) / (end - start)`s); 74 printf("ns per yields/procs : %'18.2lf\n", ((double)(end - start)`ns) / (global_counter / nprocs)); 86 printf("Duration (ms) : %'ld\n", (end - start)`ms); 87 printf("Number of processors : %'d\n", nprocs); 88 printf("Number of threads : %'d\n", tthreads); 89 printf("Cycle size (# thrds) : %'d\n", ring_size); 90 printf("Total Operations(ops): %'15llu\n", global_counter); 91 printf("Total blocks : %'15llu\n", global_blocks); 92 printf("Ops per second : %'18.2lf\n", ((double)global_counter) / (end - start)`s); 93 printf("ns per ops : %'18.2lf\n", ((double)(end - start)`ns) / global_counter); 94 printf("Ops per threads : %'15llu\n", global_counter / tthreads); 95 printf("Ops per procs : %'15llu\n", global_counter / nprocs); 96 printf("Ops/sec/procs : %'18.2lf\n", (((double)global_counter) / nprocs) / (end - start)`s); 97 printf("ns per ops/procs : %'18.2lf\n", ((double)(end - start)`ns) / (global_counter / nprocs)); 75 98 fflush(stdout); 76 99 }
Note: See TracChangeset
for help on using the changeset viewer.