Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • benchmark/readyQ/yield.cfa

    r8197ca5 r6dc2db9  
    1 #include "rq_bench.hfa"
     1#include <stdlib.h>
     2#include <stdio.h>
     3#include <string.h>
     4#include <limits.h>
     5
     6extern "C" {
     7        #include <locale.h>
     8        #include <getopt.h>
     9}
     10
     11#include <unistd.h>
     12
     13#include <clock.hfa>
     14#include <time.hfa>
     15#include <stats.hfa>
     16
     17#include "../benchcltr.hfa"
     18
     19extern bool traceHeapOn();
     20
     21
     22volatile bool run = false;
     23volatile unsigned long long global_counter;
    224
    325thread __attribute__((aligned(128))) Yielder {
    4         unsigned long long count;
     26        unsigned long long counter;
    527};
    628void ?{}( Yielder & this ) {
    7         ((thread&)this){ "Yielder Thread", bench_cluster };
    8         this.count = 0;
     29        this.counter = 0;
     30        ((thread&)this){ "Yielder Thread", *the_benchmark_cluster };
    931}
    1032
    1133void main( Yielder & this ) {
    1234        park();
    13         for() {
     35        /* paranoid */ assert( true == __atomic_load_n(&run, __ATOMIC_RELAXED) );
     36
     37        while(__atomic_load_n(&run, __ATOMIC_RELAXED)) {
    1438                yield();
    15                 this.count++;
    16                 if( clock_mode && stop) break;
    17                 if(!clock_mode && this.count >= stop_count) break;
     39                this.counter++;
    1840        }
    19 
    20         __atomic_fetch_add(&threads_left, -1, __ATOMIC_SEQ_CST);
     41        __atomic_fetch_add(&global_counter, this.counter, __ATOMIC_SEQ_CST);
    2142}
    2243
    2344int main(int argc, char * argv[]) {
     45        unsigned num_io = 1;
     46        io_context_params params;
     47
    2448        cfa_option opt[] = {
    25                 BENCH_OPT
     49                BENCH_OPT_CFA
    2650        };
    27         BENCH_OPT_PARSE("cforall yield benchmark");
     51        int opt_cnt = sizeof(opt) / sizeof(cfa_option);
     52
     53        char **left;
     54        parse_args( argc, argv, opt, opt_cnt, "[OPTIONS]...\ncforall yield benchmark", left );
    2855
    2956        {
    30                 unsigned long long global_counter = 0;
     57                printf("Running %d threads on %d processors for %f seconds\n", nthreads, nprocs, duration);
    3158
    3259                Time start, end;
    33                 BenchCluster bc = { nprocs };
     60                BenchCluster cl = { num_io, params, CFA_STATS_READY_Q };
    3461                {
    35                         threads_left = nthreads;
    36                         Yielder threads[nthreads];
    37                         printf("Starting\n");
     62                        BenchProc procs[nprocs];
     63                        {
     64                                Yielder threads[nthreads];
     65                                printf("Starting\n");
    3866
    39                         bool is_tty = isatty(STDOUT_FILENO);
    40                         start = timeHiRes();
     67                                bool is_tty = isatty(STDOUT_FILENO);
     68                                start = timeHiRes();
     69                                run = true;
    4170
    42                         for(i; nthreads) {
    43                                 unpark( threads[i] );
    44                         }
    45                         wait(start, is_tty);
     71                                for(i; nthreads) {
     72                                        unpark( threads[i] );
     73                                }
     74                                wait(duration, start, end, is_tty);
    4675
    47                         stop = true;
    48                         end = timeHiRes();
    49                         printf("\nDone\n");
    50 
    51                         for(i; nthreads) {
    52                                 Yielder & y = join( threads[i] );
    53                                 global_counter += y.count;
     76                                run = false;
     77                                end = timeHiRes();
     78                                printf("\nDone\n");
    5479                        }
    5580                }
    5681
    57                 printf("Duration (ms)        : %'ld\n", (end - start)`dms);
    58                 printf("Number of processors : %'d\n", nprocs);
    59                 printf("Number of threads    : %'d\n", nthreads);
    60                 printf("Total Operations(ops): %'15llu\n", global_counter);
    61                 printf("Ops per second       : %'18.2lf\n", ((double)global_counter) / (end - start)`s);
    62                 printf("ns per ops           : %'18.2lf\n", (end - start)`dns / global_counter);
    63                 printf("Ops per threads      : %'15llu\n", global_counter / nthreads);
    64                 printf("Ops per procs        : %'15llu\n", global_counter / nprocs);
    65                 printf("Ops/sec/procs        : %'18.2lf\n", (((double)global_counter) / nprocs) / (end - start)`s);
    66                 printf("ns per ops/procs     : %'18.2lf\n", (end - start)`dns / (global_counter / nprocs));
     82                printf("Duration (ms)       : %'ld\n", (end - start)`dms);
     83                printf("Number of processors: %'d\n", nprocs);
     84                printf("Number of threads   : %'d\n", nthreads);
     85                printf("Total yields        : %'15llu\n", global_counter);
     86                printf("Yields per second   : %'18.2lf\n", ((double)global_counter) / (end - start)`s);
     87                printf("ns per yields       : %'18.2lf\n", ((double)(end - start)`ns) / global_counter);
     88                printf("Yields per procs    : %'15llu\n", global_counter / nprocs);
     89                printf("Yields/sec/procs    : %'18.2lf\n", (((double)global_counter) / nprocs) / (end - start)`s);
     90                printf("ns per yields/procs : %'18.2lf\n", ((double)(end - start)`ns) / (global_counter / nprocs));
    6791                fflush(stdout);
    6892        }
Note: See TracChangeset for help on using the changeset viewer.