diff --git a/src/benchmarks/falsesharing.py b/src/benchmarks/falsesharing.py index 93c2fe95fb67e9d3aa9af1aa19a42050fbc75519..671dbc8942beee9f49a90ec238d13ff2276d5425 100644 --- a/src/benchmarks/falsesharing.py +++ b/src/benchmarks/falsesharing.py @@ -53,38 +53,35 @@ class BenchmarkFalsesharing(Benchmark): result["time"] = TIME_RE.match(stdout).group("time") def summary(self): - # Speedup thrash args = self.results["args"] nthreads = args["threads"] allocators = self.results["allocators"] + # calculate relevant datapoints: speedup, l1-cache-misses for bench in self.results["args"]["bench"]: for allocator in allocators: - y_vals = [] - - single_threaded_perm = self.Perm(bench=bench, threads=1) - single_threaded = np.mean([float(m["time"]) - for m in self.results[allocator][single_threaded_perm]]) + sequential_perm = self.Perm(bench=bench, threads=1) for perm in self.iterate_args_fixed({"bench": bench}, args=args): + speedup = [] + l1chache_misses = [] + for i, measure in enumerate(self.results[allocator][perm]): + sequential_time = float(self.results[allocator][sequential_perm][i]["time"]) + measure["speedup"] = sequential_time / float(measure["time"]) + measure["l1chache_misses"] = eval("({L1-dcache-load-misses}/{L1-dcache-loads})*100".format(**measure)) + + # delete and recalculate stats + del self.results["stats"] + self.calc_desc_statistics() + + self.plot_fixed_arg("{speedup}", + ylabel="'Speedup'", + title="'Speedup: ' + arg + ' ' + str(arg_value)", + filepostfix="speedup", + autoticks=False, + fixed=["bench"]) - data = [float(m["time"]) for m in self.results[allocator][perm]] - - speedup = single_threaded / np.mean(data) - self.results["stats"][allocator][perm]["mean"]["speedup"] = speedup - y_vals.append(speedup) - - plt.plot(nthreads, y_vals, marker='.', linestyle='-', - label=allocator, color=allocators[allocator]["color"]) - - plt.legend() - plt.xlabel("threads") - plt.ylabel("speedup") - plt.title(bench + " speedup") - plt.savefig(f"{self.name}.{bench}.{summary_file_ext}") - plt.clf() - - self.plot_fixed_arg("({L1-dcache-load-misses}/{L1-dcache-loads})*100", + self.plot_fixed_arg("{l1chache_misses}", ylabel="'l1 cache misses in %'", title="'cache misses: ' + arg + ' ' + str(arg_value)", filepostfix="l1-misses", @@ -103,5 +100,8 @@ class BenchmarkFalsesharing(Benchmark): "sort":">"}], filepostfix="speedup.table") + self.export_stats_to_csv("speedup", "time") + self.export_stats_to_csv("l1chache_misses", "l1-misses") + falsesharing = BenchmarkFalsesharing()