summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--benchmarks/gem_wsim.c91
1 files changed, 51 insertions, 40 deletions
diff --git a/benchmarks/gem_wsim.c b/benchmarks/gem_wsim.c
index 462f440b..3b279bcc 100644
--- a/benchmarks/gem_wsim.c
+++ b/benchmarks/gem_wsim.c
@@ -1141,7 +1141,8 @@ run_workload(unsigned int id, struct workload *wrk,
bool background, int pipe_fd,
const struct workload_balancer *balancer,
unsigned int repeat,
- unsigned int flags)
+ unsigned int flags,
+ bool print_stats)
{
struct timespec t_start, t_end;
struct w_step *w;
@@ -1270,22 +1271,19 @@ run_workload(unsigned int id, struct workload *wrk,
clock_gettime(CLOCK_MONOTONIC, &t_end);
- if (verbose > 1) {
+ if (print_stats) {
double t = elapsed(&t_start, &t_end);
- if (!balancer)
- printf("%c%u: %.3fs elapsed (%.3f workloads/s)\n",
- background ? ' ' : '*', id, t, repeat / t);
- else if (!balancer->get_qd)
- printf("%c%u: %.3fs elapsed (%.3f workloads/s). %lu (%lu + %lu) total VCS batches.\n",
- background ? ' ' : '*', id, t, repeat / t,
+ printf("%c%u: %.3fs elapsed (%.3f workloads/s).",
+ background ? ' ' : '*', id, t, repeat / t);
+ if (balancer)
+ printf(" %lu (%lu + %lu) total VCS batches.",
wrk->nr_bb[VCS], wrk->nr_bb[VCS1], wrk->nr_bb[VCS2]);
- else
- printf("%c%u: %.3fs elapsed (%.3f workloads/s). %lu (%lu + %lu) total VCS batches. Average queue depths %.3f, %.3f.\n",
- background ? ' ' : '*', id, t, repeat / t,
- wrk->nr_bb[VCS], wrk->nr_bb[VCS1], wrk->nr_bb[VCS2],
+ if (balancer && balancer->get_qd)
+ printf(" Average queue depths %.3f, %.3f.",
(double)wrk->qd_sum[VCS1] / wrk->nr_bb[VCS],
(double)wrk->qd_sum[VCS2] / wrk->nr_bb[VCS]);
+ putchar('\n');
}
}
@@ -1341,32 +1339,41 @@ static void print_help(void)
"Usage: gem_wsim [OPTIONS]\n"
"\n"
"Runs a simulated workload on the GPU.\n"
-"When ran without arguments performs a GPU calibration result of which needs\n"
-"to be provided when running the simulation in subsequent invocations.\n"
+"When ran without arguments performs a GPU calibration result of which needs to\n"
+"be provided when running the simulation in subsequent invocations.\n"
"\n"
"Options:\n"
-" -h This text.\n"
-" -q Be quiet - do not output anything to stdout.\n"
-" -n <n> Nop calibration value.\n"
-" -t <n> Nop calibration tolerance percentage.\n"
-" Use when there is a difficulty obtaining calibration\n"
-" with the default settings.\n"
-" -w <desc|path> Filename or a workload descriptor.\n"
-" Can be given multiple times.\n"
-" -W <desc|path> Filename or a master workload descriptor.\n"
-" Only one master workload can be optinally specified\n"
-" in which case all other workloads become background\n"
-" ones and run as long as the master.\n"
-" -r <n> How many times to emit the workload.\n"
-" -c <n> Fork N clients emitting the workload simultaneously.\n"
-" -x Swap VCS1 and VCS2 engines in every other client.\n"
-" -b <n> Load balancing to use. (0: rr, 1: qd, 2: rt, 3: rtr)\n"
-" Balancers can be specified either as names or as their\n"
-" id numbers as listed above.\n"
-" -2 Remap VCS2 to BCS.\n"
-" -R Round-robin initial VCS assignment per client.\n"
-" -S Synchronize the sequence of random batch durations\n"
-" between clients.\n"
+" -h This text.\n"
+" -q Be quiet - do not output anything to stdout.\n"
+" -n <n> Nop calibration value.\n"
+" -t <n> Nop calibration tolerance percentage.\n"
+" Use when there is a difficulty obtaining calibration with the\n"
+" default settings.\n"
+" -w <desc|path> Filename or a workload descriptor.\n"
+" Can be given multiple times.\n"
+" -W <desc|path> Filename or a master workload descriptor.\n"
+" Only one master workload can be optinally specified in which\n"
+" case all other workloads become background ones and run as\n"
+" long as the master.\n"
+" -r <n> How many times to emit the workload.\n"
+" -c <n> Fork N clients emitting the workload simultaneously.\n"
+" -x Swap VCS1 and VCS2 engines in every other client.\n"
+" -b <n> Load balancing to use.\n"
+" Available load balancers are:\n"
+" 0/ rr: Simple round-robin.\n"
+" 1/ qd: Queue depth estimation. Round-robin on equal\n"
+" queue depth.\n"
+" 2/ rt: Like qd but with added last run-time estimation.\n"
+" 3/ rtr: Like rt but with random selection on equal queue\n"
+" depth.\n"
+" 4/rtavg: Improved version of rt tracking average latency\n"
+" per engine.\n"
+" Balancers can be specified either as names or as their id\n"
+" number as listed above.\n"
+" -2 Remap VCS2 to BCS.\n"
+" -R Round-robin initial VCS assignment per client.\n"
+" -S Synchronize the sequence of random batch durations between\n"
+" clients.\n"
);
}
@@ -1482,7 +1489,7 @@ int main(int argc, char **argv)
fd = drm_open_driver(DRIVER_INTEL);
init_clocks();
- while ((c = getopt(argc, argv, "q2RSc:n:r:xw:W:t:b:vh")) != -1) {
+ while ((c = getopt(argc, argv, "hqv2RSxc:n:r:w:W:t:b:")) != -1) {
switch (c) {
case 'W':
if (master_workload >= 0) {
@@ -1618,6 +1625,7 @@ int main(int argc, char **argv)
for (i = 0; i < nr_w_args; i++) {
w_args[i] = load_workload_descriptor(w_args[i]);
+
if (!w_args[i]) {
if (verbose)
fprintf(stderr,
@@ -1635,11 +1643,12 @@ int main(int argc, char **argv)
}
}
+ if (nr_w_args > 1)
+ clients = nr_w_args;
+
if (verbose > 1) {
printf("Using %lu nop calibration for %uus delay.\n",
nop_calibration, nop_calibration_us);
- if (nr_w_args > 1)
- clients = nr_w_args;
printf("%u client%s.\n", clients, clients > 1 ? "s" : "");
if (flags & SWAPVCS)
printf("Swapping VCS rings between clients.\n");
@@ -1685,7 +1694,9 @@ int main(int argc, char **argv)
}
run_workload(child, w[child], background, pipe_fd, balancer,
- repeat, flags);
+ repeat, flags,
+ verbose > 1 ||
+ (verbose > 0 && master_workload == child));
}
if (master_workload >= 0) {