diff options
| author | Florian Fischer <florian.fl.fischer@fau.de> | 2020-05-06 16:56:32 +0200 |
|---|---|---|
| committer | Florian Fischer <florian.fl.fischer@fau.de> | 2020-06-02 11:18:47 +0200 |
| commit | 8174a918ea3b7cb216bf7ea98cfdc10661b5c37d (patch) | |
| tree | 0747ec3ccb9f8d7eeccfac35977fc17855ca3bbb /src/benchmarks/loop.py | |
| parent | 8f52e8fc02dd235582f5961941bcd564e9a681cd (diff) | |
| download | allocbench-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.py | 117 |
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() |
