#!/usr/bin/gawk -f

BEGIN {
    # HARDCODED PARAMETERS
    if (!load_per_node) {
        load_per_node = 1000;   # average load per node
        printf "WARNING: Hardcoded load_per_node: %g\n", load_per_node > "/dev/stderr";
    }
    if (!theo_dur) {
        theo_dur = 10000.0;     # theoretical time limit
        printf "WARNING: Hardcoded theo_dur: %g\n", theo_dur > "/dev/stderr";
    }
    if (!comp_factor) {
        comp_factor = 1e6;       # computing factor ( -c )
        printf "WARNING: Hardcoded comp_factor: %g\n", comp_factor > "/dev/stderr";
    }
    if (!comm_factor) {
        comm_factor = 1.25e5;    # communication factor ( -C )
        printf "WARNING: Hardcoded comm_factor: %g\n", comm_factor > "/dev/stderr";
        printf "         comm_factor will be adjusted by ratio from exp. name\n" > "/dev/stderr";
        adjust_comm_factor = 1;
    }
    if (!comp_power) {          # average computing power per node
        comp_power = 1e9;
        printf "WARNING: Hardcoded comp_power: %g\n", comp_power > "/dev/stderr";
    }

    if (print_overhead) {
        printf "%-75s %11s %11s %11s %14s %11s\n", "# Experimentation",
            "Overhead", "Comput.(1)", "Comput.(2)", "Data amnt", "Stddev";
    } else {
        printf "%-75s %11s %11s %14s %11s\n", "# Experimentation",
            "Comput.(1)", "Comput.(2)", "Data amnt", "Stddev";
    }
}

/^# Experiment/ {
    next;
}

/^#/ {
    print;
    next;
}

{
    total_load = $2;
    nodes = total_load / load_per_node;
    stddev = 100.0 * $3 / load_per_node;
    computed = $4;
    real_dur = $7;
    comp_cap = comp_power * nodes;
    theo_comp = 100.0 * computed / (theo_dur * comp_cap);
    real_comp = 100.0 * computed / (real_dur * comp_cap);
    if (adjust_comm_factor) {
        # find comp/comm ratio
        split($1, tmp, "[_/:]")
        ratio = tmp[4] / tmp[3]
        real_comm_factor = comm_factor * ratio;
    } else {
        real_comm_factor = comm_factor;
    }
#    printf "# real_comm_factor: %g\n", real_comm_factor > "/dev/stderr";
    data_total = total_load * real_comm_factor;
    data = $5 / data_total;
    if (print_overhead) {
        overhead = 100.0 * (real_dur / theo_dur - 1.0);
        printf "%-75s %11.4f %11.4f %11.4f %14.4f %11.4f\n",
            $1, overhead, theo_comp, real_comp, data, stddev;
    } else {
        printf "%-75s %11.4f %11.4f %14.4f %11.4f\n",
            $1, theo_comp, real_comp, data, stddev;
    }
}