Changes in benchmark/readyQ/cycle.cfa [b5d51b0:7a2a3af]
- File:
-
- 1 edited
-
benchmark/readyQ/cycle.cfa (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
benchmark/readyQ/cycle.cfa
rb5d51b0 r7a2a3af 1 1 #include "rq_bench.hfa" 2 2 3 struct Partner { 3 thread Partner { 4 Partner * partner; 4 5 unsigned long long count; 5 unsigned long long blocks;6 bench_sem self;7 bench_sem * next;8 6 }; 9 7 10 8 void ?{}( Partner & this ) { 11 this.count = this.blocks = 0;9 ((thread&)this){ bench_cluster }; 12 10 } 13 11 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; 12 void main( Partner & this ) { 13 this.count = 0; 27 14 for() { 28 blocks += wait( self);29 post( *next);30 count ++;15 park(); 16 unpark( *this.partner ); 17 this.count ++; 31 18 if( clock_mode && stop) break; 32 if(!clock_mode && count >= stop_count) break;19 if(!clock_mode && this.count >= stop_count) break; 33 20 } 34 21 … … 46 33 { 47 34 unsigned long long global_counter = 0; 48 unsigned long long global_blocks = 0;49 35 unsigned tthreads = nthreads * ring_size; 50 36 Time start, end; … … 52 38 { 53 39 threads_left = tthreads; 54 BThrd * threads[tthreads]; 55 Partner thddata[tthreads]; 40 Partner threads[tthreads]; 56 41 for(i; tthreads) { 57 42 unsigned pi = (i + nthreads) % tthreads; 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] }; 43 threads[i].partner = &threads[pi]; 63 44 } 64 45 printf("Starting\n"); … … 68 49 69 50 for(i; nthreads) { 70 post( thddata[i].self);51 unpark( threads[i] ); 71 52 } 72 53 wait(start, is_tty); … … 77 58 78 59 for(i; tthreads) { 79 Partner & partner = join( *threads[i] ).partner; 80 global_counter += partner.count; 81 global_blocks += partner.blocks; 82 delete(threads[i]); 60 global_counter += join( threads[i] ).count; 83 61 } 84 62 } 85 63 86 printf("Duration (ms) : %'ld\n", (end - start)`dms); 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)`ds); 93 printf("ns per ops : %'18.2lf\n", (end - start)`dns / 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)`ds); 97 printf("ns per ops/procs : %'18.2lf\n", (end - start)`dns / (global_counter / nprocs)); 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)); 98 75 fflush(stdout); 99 76 }
Note:
See TracChangeset
for help on using the changeset viewer.