aboutsummaryrefslogtreecommitdiff
path: root/src/benchmarks/loop.py
diff options
context:
space:
mode:
authorFlorian Fischer <florian.fl.fischer@fau.de>2020-05-06 16:56:32 +0200
committerFlorian Fischer <florian.fl.fischer@fau.de>2020-06-02 11:18:47 +0200
commit8174a918ea3b7cb216bf7ea98cfdc10661b5c37d (patch)
tree0747ec3ccb9f8d7eeccfac35977fc17855ca3bbb /src/benchmarks/loop.py
parent8f52e8fc02dd235582f5961941bcd564e9a681cd (diff)
downloadallocbench-8174a918ea3b7cb216bf7ea98cfdc10661b5c37d.tar.gz
allocbench-8174a918ea3b7cb216bf7ea98cfdc10661b5c37d.zip
make the whole project more python idiomatic
* rename src directory to allocbench * make global variable names UPPERCASE * format a lot of code using yapf * use lowercase ld_preload and ld_library_path as Allocator members * name expected Errors 'err' and don't raise a new Exception * disable some pylint messages
Diffstat (limited to 'src/benchmarks/loop.py')
-rw-r--r--src/benchmarks/loop.py117
1 files changed, 0 insertions, 117 deletions
diff --git a/src/benchmarks/loop.py b/src/benchmarks/loop.py
deleted file mode 100644
index 030552b..0000000
--- a/src/benchmarks/loop.py
+++ /dev/null
@@ -1,117 +0,0 @@
-# Copyright 2018-2020 Florian Fischer <florian.fl.fischer@fau.de>
-#
-# This file is part of allocbench.
-#
-# allocbench is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# allocbench is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with allocbench. If not, see <http://www.gnu.org/licenses/>.
-"""Definition of the loop micro benchmark
-
-This benchmark allocates and immediately deallocates a pseudo random sized allocation
-N times in T threads. The acquired memory is neither read nor written. Not using the
-allocations at all maybe seems odd but this micro benchmark should only measure
-the allocators fast paths, scalability and management overhead.
-Using the allocations will add cache effects to our results which are
-measured for example in the false sharing or larson benchmarks.
-
-Observations:
-* Glibc's factor two faster for allocations <= 1024B
-* TCMalloc suffers when allocating only small chunks
-
-Interpretation:
-* A significant higher cache miss rate than other allocators could mean that
- internals suffer from false sharing (TCMalloc).
-* Speed changes with constant threads but changing sizes may show performance
- differences in differing strategies for seperate sizes (glibc thread caches < 1032B)
-"""
-
-from src.benchmark import Benchmark
-import src.plots as plt
-
-
-class BenchmarkLoop(Benchmark):
- """Loop micro benchmark
-
- This benchmark allocates and frees n blocks in t concurrent threads.
- """
- def __init__(self):
- name = "loop"
-
- self.cmd = "loop{binary_suffix} {threads} 1000000 {maxsize}"
-
- self.args = {
- "maxsize": [2**x for x in range(6, 16)],
- "threads": Benchmark.scale_threads_for_cpus(2)
- }
-
- self.requirements = ["loop"]
- super().__init__(name)
-
- def process_output(self, result, stdout, stderr, alloc, perm):
- result["mops"] = perm.threads / float(result["task-clock"])
-
- def summary(self):
- # Speed
- plt.plot(
- self,
- "{mops}",
- fig_options={
- 'ylabel': 'MOPS/cpu-second',
- 'title': 'Loop: {fixed_part_str}',
- 'autoticks': False,
- },
- file_postfix="time")
-
- # L1 cache misses
- plt.plot(
- self,
- "({L1-dcache-load-misses}/{L1-dcache-loads})*100",
- fig_options={
- 'ylabel': "L1 misses in %",
- 'title': "Loop l1 cache misses: {fixed_part_str}",
- 'autoticks': False,
- },
- file_postfix="l1misses")
-
- # Speed Matrix
- plt.write_best_doublearg_tex_table(
- self,
- "{mops}",
- file_postfix="time.matrix")
-
- plt.write_tex_table(
- self,
- [{
- "label": "MOPS/s",
- "expression": "{mops}",
- "sort": ">"
- }],
- file_postfix="mops.table")
-
- plt.export_stats_to_csv(self, "task-clock")
- plt.export_stats_to_dataref(self, "task-clock")
-
- # pgfplot test
- plt.pgfplot(self,
- self.iterate_args(fixed={"maxsize": 1024}, args=self.results["args"]),
- "int(perm.threads)",
- "{mops}",
- xlabel="Threads",
- ylabel="MOPS/cpu-second",
- title="Loop: 1024B",
- postfix='mops_1024B')
-
- # create pgfplot legend
- plt.pgfplot_legend(self)
-
-
-loop = BenchmarkLoop()