File indexing completed on 2025-05-11 08:24:43
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026 import json
0027 import math
0028 import re
0029 import statistics
0030 import matplotlib.pyplot as plt
0031 from matplotlib import ticker
0032
0033
0034 def _normed_coefficient_of_variation(counter: list[int]) -> float:
0035 return (statistics.stdev(counter) / statistics.mean(counter)) / math.sqrt(
0036 len(counter))
0037
0038
0039 def _plot(data: dict) -> None:
0040 _, axes = plt.subplots()
0041 axes.set_title("SMP Lock Fairness")
0042 axes.set_xlabel("Active Workers")
0043 axes.set_ylabel("Normed Coefficient of Variation")
0044 axes.set_yscale("symlog", linthresh=1e-6)
0045 x = list(range(2, len(data[0]["results"]) + 1))
0046 axes.xaxis.set_major_locator(ticker.FixedLocator(x))
0047 for samples in data:
0048 if samples["lock-object"] != "global":
0049 continue
0050 if samples["section-type"] != "local counter":
0051 continue
0052 y = [
0053 _normed_coefficient_of_variation(results["counter"])
0054 for results in samples["results"][1:]
0055 ]
0056 axes.plot(x, y, label=samples["lock-type"], marker="o")
0057 axes.legend(loc="best")
0058 plt.savefig("smplock01fair.png")
0059 plt.savefig("smplock01fair.pdf")
0060 plt.close()
0061
0062
0063 _JSON_DATA = re.compile(
0064 r"\*\*\* BEGIN OF JSON DATA \*\*\*(.*)"
0065 r"\*\*\* END OF JSON DATA \*\*\*", re.DOTALL)
0066
0067 with open("smplock01.scn", "r", encoding="utf-8") as src:
0068 match = _JSON_DATA.search(src.read())
0069 data = json.loads(match.group(1))
0070
0071 _plot(data)