summaryrefslogtreecommitdiff
path: root/decompress
diff options
context:
space:
mode:
Diffstat (limited to 'decompress')
-rwxr-xr-xdecompress/analyze_bw.py345
-rwxr-xr-xdecompress/analyze_time.py332
-rw-r--r--decompress/bw.pngbin0 -> 68796 bytes
-rw-r--r--decompress/bw_VANILLA.csv751
-rw-r--r--decompress/bw_all.CSV4
-rwxr-xr-xdecompress/combine.py169
-rwxr-xr-xdecompress/run.sh150
-rwxr-xr-xdecompress/sum.sh21
-rw-r--r--decompress/summary/bw.txt12
-rw-r--r--decompress/summary/times.txt14
-rw-r--r--decompress/time_1.00G.pngbin0 -> 76412 bytes
-rw-r--r--decompress/time_268M.pngbin0 -> 74420 bytes
-rw-r--r--decompress/time_537M.pngbin0 -> 74040 bytes
-rw-r--r--decompress/times_VANILLA.csv751
-rw-r--r--decompress/times_all.CSV751
15 files changed, 3300 insertions, 0 deletions
diff --git a/decompress/analyze_bw.py b/decompress/analyze_bw.py
new file mode 100755
index 0000000..e4fab84
--- /dev/null
+++ b/decompress/analyze_bw.py
@@ -0,0 +1,345 @@
+#!/usr/bin/env python3
+
+import argparse
+import csv
+import sys
+from collections import defaultdict
+from pathlib import Path
+
+import matplotlib.pyplot as plt
+import numpy as np
+
+
+KIBPS_TO_UNIT = {
+ "KiBps": 1.0,
+ "MiBps": 1.0 / 1024.0,
+ "GiBps": 1.0 / (1024.0 * 1024.0),
+}
+
+
+UNIT_DISPLAY = {
+ "KiBps": "KiB/s",
+ "MiBps": "MiB/s",
+ "GiBps": "GiB/s",
+}
+
+
+def format_bytes(n) -> str:
+ """
+ Format size using the largest readable unit.
+
+ Examples:
+ 246132K -> 246M
+ 2097148K -> 2.0G
+
+ Notes:
+ - CSV normally gives integer bytes.
+ - This also accepts strings like "246132K" if needed.
+ - M is shown as rounded whole MB.
+ - G/T are shown with one decimal place.
+ """
+ if isinstance(n, str):
+ s = n.strip()
+ suffix = s[-1].upper()
+
+ if suffix in {"K", "M", "G", "T"}:
+ value = float(s[:-1])
+ # Interpret suffix input as decimal-style units.
+ scale = {
+ "K": 1_000,
+ "M": 1_000_000,
+ "G": 1_000_000_000,
+ "T": 1_000_000_000_000,
+ }[suffix]
+ n = int(value * scale)
+ else:
+ n = int(s)
+
+ n = int(n)
+
+ # Use G/T when the value is large enough.
+ if n >= 1024 ** 4:
+ return f"{n / (1024 ** 4):.2f}T"
+
+ if n >= 1024 ** 3:
+ return f"{n / (1024 ** 3):.2f}G"
+
+ if n >= 1_000_000:
+ return f"{round(n / 1_000_000)}M"
+
+ if n >= 1_000:
+ return f"{round(n / 1_000)}K"
+
+ return f"{n}B"
+
+def experiment_label(path: str) -> str:
+ name = Path(path).name
+
+ if name.startswith("bw_") and name.endswith(".csv"):
+ return name[len("bw_") : -len(".csv")]
+
+ if name.startswith("bandwidth_") and name.endswith(".csv"):
+ return name[len("bandwidth_") : -len(".csv")]
+
+ return Path(path).stem
+
+
+def percentile(values, p: float) -> float:
+ return float(np.percentile(np.array(values, dtype=float), p))
+
+
+def read_bw_csv(path: str, unit: str):
+ grouped = defaultdict(list)
+
+ with open(path, newline="") as f:
+ reader = csv.DictReader(f)
+
+ if reader.fieldnames is None:
+ raise ValueError(f"{path}: empty CSV or missing header")
+
+ fieldnames = [name.strip() for name in reader.fieldnames]
+ if fieldnames != ["bytes", "bw_KiBps"]:
+ raise ValueError(
+ f"{path}: expected header 'bytes,bw_KiBps', got: {','.join(fieldnames)}"
+ )
+
+ for line_no, row in enumerate(reader, start=2):
+ try:
+ nbytes = int(row["bytes"].strip())
+ bw_kibps = float(row["bw_KiBps"].strip())
+ except Exception as e:
+ raise ValueError(f"{path}: invalid row at line {line_no}: {row} ({e})")
+
+ grouped[nbytes].append(bw_kibps * KIBPS_TO_UNIT[unit])
+
+ return grouped
+
+
+def main() -> int:
+ parser = argparse.ArgumentParser(
+ description="Create grouped bandwidth bar graph from bw_*.csv files."
+ )
+ parser.add_argument(
+ "inputs",
+ nargs="+",
+ help="Input CSV files with header: bytes,bw_KiBps. Recommended naming: bw_<label>.csv",
+ )
+ parser.add_argument(
+ "--unit",
+ default="GiBps",
+ choices=sorted(KIBPS_TO_UNIT.keys()),
+ help="Output bandwidth unit. Input is always bw_KiBps. Default: GiBps",
+ )
+ parser.add_argument(
+ "--out",
+ default="bandwidth_bar.png",
+ help="Output bar graph filename. Default: bandwidth_bar.png",
+ )
+ parser.add_argument(
+ "--no-errorbar",
+ action="store_true",
+ help="Disable standard-deviation error bars.",
+ )
+ parser.add_argument(
+ "--legend-outside",
+ action="store_true",
+ help="Place legend outside the plot.",
+ )
+
+ args = parser.parse_args()
+
+ output_unit = UNIT_DISPLAY[args.unit]
+ all_data = []
+
+ for path in args.inputs:
+ try:
+ grouped = read_bw_csv(path, args.unit)
+ except ValueError as e:
+ print(f"ERROR: {e}", file=sys.stderr)
+ return 1
+
+ if not grouped:
+ print(f"ERROR: {path}: no data rows", file=sys.stderr)
+ return 1
+
+ all_data.append(
+ {
+ "path": path,
+ "label": experiment_label(path),
+ "grouped": grouped,
+ }
+ )
+
+ print("Bandwidth summary")
+ print("=================")
+ print(f"input_files: {len(all_data)}")
+ print(f"input_unit: KiB/s")
+ print(f"output_unit: {output_unit}")
+ print()
+
+ print(
+ f"{'file_label':>18} {'bytes':>14} {'size':>8} {'n':>8} "
+ f"{'min':>12} {'avg':>12} {'std':>12} "
+ f"{'p1':>12} {'p5':>12} {'p10':>12} {'p50':>12} "
+ f"{'p90':>12} {'p99':>12} {'max':>12}"
+ )
+
+ # stats[label][nbytes] = dict(...)
+ stats = defaultdict(dict)
+ all_sizes = set()
+
+ for item in all_data:
+ file_label = item["label"]
+ grouped = item["grouped"]
+
+ for nbytes in sorted(grouped.keys()):
+ bws = np.array(grouped[nbytes], dtype=float)
+ all_sizes.add(nbytes)
+
+ min_v = float(np.min(bws))
+ avg = float(np.mean(bws))
+ std = float(np.std(bws))
+ p1 = percentile(bws, 1)
+ p5 = percentile(bws, 5)
+ p10 = percentile(bws, 10)
+ p50 = percentile(bws, 50)
+ p90 = percentile(bws, 90)
+ p99 = percentile(bws, 99)
+ max_v = float(np.max(bws))
+
+ size_label = format_bytes(nbytes)
+
+ print(
+ f"{file_label:>18} {nbytes:14d} {size_label:>8} {len(bws):8d} "
+ f"{min_v:12.6f} {avg:12.6f} {std:12.6f} "
+ f"{p1:12.6f} {p5:12.6f} {p10:12.6f} {p50:12.6f} "
+ f"{p90:12.6f} {p99:12.6f} {max_v:12.6f}"
+ )
+
+ stats[file_label][nbytes] = {
+ "n": len(bws),
+ "avg": avg,
+ "std": std,
+ "min": min_v,
+ "max": max_v,
+ "p50": p50,
+ "p90": p90,
+ "p99": p99,
+ }
+
+ sizes = sorted(all_sizes)
+ size_labels = [format_bytes(s) for s in sizes]
+ experiment_labels = [item["label"] for item in all_data]
+
+ x = np.arange(len(sizes))
+ num_experiments = len(experiment_labels)
+
+ # Bar width shrinks as the number of experiments grows.
+ total_group_width = 0.82
+ bar_width = total_group_width / max(1, num_experiments)
+
+ fig_width = max(9, len(sizes) * 1.4)
+ fig, ax = plt.subplots(figsize=(fig_width, 6))
+
+ for idx, label in enumerate(experiment_labels):
+ offsets = x - total_group_width / 2 + bar_width / 2 + idx * bar_width
+
+ means = []
+ errors = []
+
+ for nbytes in sizes:
+ if nbytes in stats[label]:
+ means.append(stats[label][nbytes]["avg"])
+ errors.append(stats[label][nbytes]["std"])
+ else:
+ means.append(np.nan)
+ errors.append(0.0)
+
+ if args.no_errorbar:
+ ax.bar(
+ offsets,
+ means,
+ width=bar_width,
+ label=label,
+ )
+ else:
+ ax.bar(
+ offsets,
+ means,
+ width=bar_width,
+ yerr=errors,
+ capsize=3,
+ label=label,
+ )
+
+ # Automatically cut off the bottom of the y-axis to make bar differences visible.
+ # This intentionally truncates the y-axis.
+ all_bar_values = []
+ all_error_values = []
+
+ for label in experiment_labels:
+ for nbytes in sizes:
+ if nbytes in stats[label]:
+ all_bar_values.append(stats[label][nbytes]["avg"])
+ all_error_values.append(stats[label][nbytes]["std"])
+
+ if all_bar_values:
+ values = np.array(all_bar_values, dtype=float)
+ errors = np.array(all_error_values, dtype=float)
+
+ if args.no_errorbar:
+ low = float(np.nanmin(values))
+ high = float(np.nanmax(values))
+ else:
+ low = float(np.nanmin(values - errors))
+ high = float(np.nanmax(values + errors))
+
+ span = max(high - low, 1e-9)
+
+ # Leave 10% padding below the lowest visible bar/error.
+ auto_bottom = low - 0.10 * span
+
+ # Avoid negative y-axis for bandwidth.
+ auto_bottom = max(0.0, auto_bottom)
+
+ ax.set_ylim(bottom=auto_bottom)
+
+ ax.text(
+ 0.01,
+ 0.98,
+ "Y-axis truncated",
+ transform=ax.transAxes,
+ va="top",
+ fontsize=9,
+ )
+
+ ax.set_xlabel("Transfer size")
+ ax.set_ylabel(f"Bandwidth ({output_unit})")
+ ax.set_title("DMA Bandwidth by Transfer Size")
+ ax.set_xticks(x)
+ ax.set_xticklabels(size_labels)
+ ax.grid(axis="y", linestyle="--", alpha=0.6)
+
+ if args.legend_outside:
+ ax.legend(
+ title="Experiment",
+ fontsize=8,
+ loc="center left",
+ bbox_to_anchor=(1.02, 0.5),
+ )
+ fig.tight_layout(rect=[0, 0, 0.80, 1])
+ else:
+ ax.legend(title="Experiment", fontsize=8)
+ fig.tight_layout()
+
+ fig.savefig(args.out, dpi=200)
+ plt.close(fig)
+
+ print()
+ print(f"Wrote bar graph: {args.out}")
+
+ return 0
+
+
+if __name__ == "__main__":
+ raise SystemExit(main())
diff --git a/decompress/analyze_time.py b/decompress/analyze_time.py
new file mode 100755
index 0000000..8f467e4
--- /dev/null
+++ b/decompress/analyze_time.py
@@ -0,0 +1,332 @@
+#!/usr/bin/env python3
+
+import argparse
+import csv
+import sys
+from collections import defaultdict
+from pathlib import Path
+
+import matplotlib.pyplot as plt
+import numpy as np
+
+
+USEC_TO_UNIT = {
+ "sec": 1.0 / 1_000_000.0,
+ "msec": 1.0 / 1_000.0,
+ "usec": 1.0,
+ "nsec": 1_000.0,
+}
+
+
+LINESTYLES = ["-", "--", "-.", ":"]
+MARKERS = ["o", "s", "^", "D", "v", "P", "X", "*"]
+
+def format_bytes(n) -> str:
+ """
+ Format size using the largest readable unit.
+
+ Examples:
+ 246132K -> 246M
+ 2097148K -> 2.0G
+
+ Notes:
+ - CSV normally gives integer bytes.
+ - This also accepts strings like "246132K" if needed.
+ - M is shown as rounded whole MB.
+ - G/T are shown with one decimal place.
+ """
+ if isinstance(n, str):
+ s = n.strip()
+ suffix = s[-1].upper()
+
+ if suffix in {"K", "M", "G", "T"}:
+ value = float(s[:-1])
+ # Interpret suffix input as decimal-style units.
+ scale = {
+ "K": 1_000,
+ "M": 1_000_000,
+ "G": 1_000_000_000,
+ "T": 1_000_000_000_000,
+ }[suffix]
+ n = int(value * scale)
+ else:
+ n = int(s)
+
+ n = int(n)
+
+ # Use G/T when the value is large enough.
+ if n >= 1024 ** 4:
+ return f"{n / (1024 ** 4):.2f}T"
+
+ if n >= 1024 ** 3:
+ return f"{n / (1024 ** 3):.2f}G"
+
+ if n >= 1_000_000:
+ return f"{round(n / 1_000_000)}M"
+
+ if n >= 1_000:
+ return f"{round(n / 1_000)}K"
+
+ return f"{n}B"
+
+def experiment_label(path: str) -> str:
+ name = Path(path).name
+
+ if name.startswith("times_") and name.endswith(".csv"):
+ return name[len("times_") : -len(".csv")]
+
+ return Path(path).stem
+
+
+def percentile(values, p: float) -> float:
+ return float(np.percentile(np.array(values, dtype=float), p))
+
+
+def read_times_csv(path: str, unit: str):
+ grouped = defaultdict(list)
+
+ with open(path, newline="") as f:
+ reader = csv.DictReader(f)
+
+ if reader.fieldnames is None:
+ raise ValueError(f"{path}: empty CSV or missing header")
+
+ fieldnames = [name.strip() for name in reader.fieldnames]
+ if fieldnames != ["bytes", "time_usec"]:
+ raise ValueError(
+ f"{path}: expected header 'bytes,time_usec', got: {','.join(fieldnames)}"
+ )
+
+ for line_no, row in enumerate(reader, start=2):
+ try:
+ nbytes = int(row["bytes"].strip())
+ time_usec = float(row["time_usec"].strip())
+ except Exception as e:
+ raise ValueError(f"{path}: invalid row at line {line_no}: {row} ({e})")
+
+ grouped[nbytes].append(time_usec * USEC_TO_UNIT[unit])
+
+ return grouped
+
+
+def add_legend_and_save(fig, ax, out_path: Path, legend_title: str, legend_outside: bool):
+ if legend_outside:
+ ax.legend(
+ title=legend_title,
+ fontsize=8,
+ loc="center left",
+ bbox_to_anchor=(1.02, 0.5),
+ )
+ fig.tight_layout(rect=[0, 0, 0.78, 1])
+ else:
+ ax.legend(title=legend_title, fontsize=8)
+ fig.tight_layout()
+
+ fig.savefig(out_path, dpi=200)
+ plt.close(fig)
+
+
+def plot_size_graph(
+ nbytes: int,
+ series,
+ unit: str,
+ out_path: Path,
+ markers_mode: str,
+ line_markers: bool,
+ legend_outside: bool,
+):
+ size_label = format_bytes(nbytes)
+ fig, ax = plt.subplots(figsize=(10, 6))
+
+ for item in series:
+ x = item["x"]
+ y = item["y"]
+ marker = item["marker"] if line_markers else None
+
+ ax.plot(
+ x,
+ y,
+ linestyle=item["linestyle"],
+ marker=marker,
+ markersize=3,
+ markevery=max(1, len(x) // 25),
+ linewidth=1.8,
+ label=f"{item['file_label']} (n={item['n']})",
+ )
+
+ if markers_mode == "tail":
+ ax.scatter([item["p90"]], [0.90], marker="x", s=70, zorder=5)
+ ax.scatter([item["p99"]], [0.99], marker="*", s=100, zorder=5)
+
+ ax.annotate(
+ "P90",
+ xy=(item["p90"], 0.90),
+ xytext=(5, 5),
+ textcoords="offset points",
+ fontsize=8,
+ )
+ ax.annotate(
+ "P99",
+ xy=(item["p99"], 0.99),
+ xytext=(5, 5),
+ textcoords="offset points",
+ fontsize=8,
+ )
+
+ ax.set_xlabel(f"Latency ({unit})")
+ ax.set_ylabel("CDF")
+ ax.set_title(f"DMA Latency CDF - {size_label}")
+ ax.grid(True)
+
+ add_legend_and_save(
+ fig,
+ ax,
+ out_path,
+ "Experiment",
+ legend_outside,
+ )
+
+
+def main() -> int:
+ parser = argparse.ArgumentParser(
+ description="Create separate latency CDF graphs per byte count from times_*.csv files."
+ )
+ parser.add_argument(
+ "inputs",
+ nargs="+",
+ help="Input CSV files with header: bytes,time_usec. Recommended naming: times_<label>.csv",
+ )
+ parser.add_argument(
+ "--unit",
+ default="usec",
+ choices=sorted(USEC_TO_UNIT.keys()),
+ help="Output time unit. Input is always time_usec. Default: usec",
+ )
+ parser.add_argument(
+ "--out",
+ default="latency_cdf.png",
+ help="Output base filename. Per-size graphs are generated from this name.",
+ )
+ parser.add_argument(
+ "--markers",
+ default="none",
+ choices=["none", "tail"],
+ help="Marker mode. 'none' disables percentile markers; 'tail' shows P90 and P99 markers. Default: none",
+ )
+ parser.add_argument(
+ "--legend-outside",
+ action="store_true",
+ help="Place legend outside the plot.",
+ )
+ parser.add_argument(
+ "--line-markers",
+ action="store_true",
+ help="Show point markers on CDF lines. Default: no line markers.",
+ )
+
+ args = parser.parse_args()
+
+ all_data = []
+
+ for path in args.inputs:
+ try:
+ grouped = read_times_csv(path, args.unit)
+ except ValueError as e:
+ print(f"ERROR: {e}", file=sys.stderr)
+ return 1
+
+ if not grouped:
+ print(f"ERROR: {path}: no data rows", file=sys.stderr)
+ return 1
+
+ all_data.append(
+ {
+ "path": path,
+ "label": experiment_label(path),
+ "grouped": grouped,
+ }
+ )
+
+ print("Latency summary")
+ print("================")
+ print(f"input_files: {len(all_data)}")
+ print(f"input_unit: usec")
+ print(f"output_unit: {args.unit}")
+ print()
+
+ print(
+ f"{'file_label':>18} {'bytes':>14} {'size':>8} {'n':>8} "
+ f"{'min':>12} {'avg':>12} {'std':>12} "
+ f"{'p50':>12} {'p90':>12} {'p99':>12} {'max':>12}"
+ )
+
+ series_by_size = defaultdict(list)
+
+ for file_idx, item in enumerate(all_data):
+ file_label = item["label"]
+ grouped = item["grouped"]
+ linestyle = LINESTYLES[file_idx % len(LINESTYLES)]
+
+ for size_idx, nbytes in enumerate(sorted(grouped.keys())):
+ times = np.array(grouped[nbytes], dtype=float)
+ sorted_times = np.sort(times)
+ cdf = np.arange(1, len(sorted_times) + 1) / len(sorted_times)
+
+ min_v = float(np.min(times))
+ avg = float(np.mean(times))
+ std = float(np.std(times))
+ p50 = percentile(times, 50)
+ p90 = percentile(times, 90)
+ p99 = percentile(times, 99)
+ max_v = float(np.max(times))
+
+ size_label = format_bytes(nbytes)
+
+ print(
+ f"{file_label:>18} {nbytes:14d} {size_label:>8} {len(times):8d} "
+ f"{min_v:12.6f} {avg:12.6f} {std:12.6f} "
+ f"{p50:12.6f} {p90:12.6f} {p99:12.6f} {max_v:12.6f}"
+ )
+
+ series_by_size[nbytes].append(
+ {
+ "file_label": file_label,
+ "nbytes": nbytes,
+ "size_label": size_label,
+ "x": sorted_times,
+ "y": cdf,
+ "n": len(times),
+ "p90": p90,
+ "p99": p99,
+ "linestyle": linestyle,
+ "marker": MARKERS[size_idx % len(MARKERS)],
+ }
+ )
+
+ out_base = Path(args.out)
+ stem = out_base.stem
+ suffix = out_base.suffix or ".png"
+
+ print()
+
+ for nbytes in sorted(series_by_size.keys()):
+ size_label = format_bytes(nbytes)
+ out_path = out_base.with_name(f"{stem}_{size_label}{suffix}")
+
+ plot_size_graph(
+ nbytes=nbytes,
+ series=series_by_size[nbytes],
+ unit=args.unit,
+ out_path=out_path,
+ markers_mode=args.markers,
+ line_markers=args.line_markers,
+ legend_outside=args.legend_outside,
+ )
+
+ print(f"Wrote CDF graph: {out_path}")
+
+ return 0
+
+
+if __name__ == "__main__":
+ raise SystemExit(main())
diff --git a/decompress/bw.png b/decompress/bw.png
new file mode 100644
index 0000000..8d01e74
--- /dev/null
+++ b/decompress/bw.png
Binary files differ
diff --git a/decompress/bw_VANILLA.csv b/decompress/bw_VANILLA.csv
new file mode 100644
index 0000000..418f2e8
--- /dev/null
+++ b/decompress/bw_VANILLA.csv
@@ -0,0 +1,751 @@
+bytes,bw_KiBps
+1073741824,3448798.624768
+1073741824,3448491.660288
+1073741824,3445689.852928
+1073741824,3442474.722304
+1073741824,3449114.630144
+1073741824,3444636.783616
+1073741824,3444600.720384
+1073741824,3447153.239040
+1073741824,3446643.912704
+1073741824,3447379.062784
+1073741824,3444459.552768
+1073741824,3441856.836608
+1073741824,3451319.576576
+1073741824,3443677.060096
+1073741824,3446698.179584
+1073741824,3446929.281024
+1073741824,3446003.601408
+1073741824,3446155.881472
+1073741824,3444572.578816
+1073741824,3447942.255616
+1073741824,3446527.760384
+1073741824,3446319.808512
+1073741824,3444942.101504
+1073741824,3444964.228096
+1073741824,3444791.976960
+1073741824,3445728.996352
+1073741824,3447829.405696
+1073741824,3442614.212608
+1073741824,3453045.310464
+1073741824,3446847.258624
+1073741824,3445738.303488
+1073741824,3445442.785280
+1073741824,3447581.316096
+1073741824,3444128.596992
+1073741824,3446428.232704
+1073741824,3441760.302080
+1073741824,3449356.687360
+1073741824,3442341.221376
+1073741824,3451627.784192
+1073741824,3448078.720000
+1073741824,3450244.866048
+1073741824,3446490.739712
+1073741824,3450273.838080
+1073741824,3448359.733248
+1073741824,3445133.304832
+1073741824,3441504.681984
+1073741824,3445433.989120
+1073741824,3448344.174592
+1073741824,3445855.422464
+1073741824,3446308.322304
+1073741824,3446748.867584
+1073741824,3444570.882048
+1073741824,3443676.144640
+1073741824,3442721.421312
+1073741824,3450645.005312
+1073741824,3444390.523904
+1073741824,3447666.276352
+1073741824,3446855.630848
+1073741824,3447561.412608
+1073741824,3444645.723136
+1073741824,3450422.636544
+1073741824,3450611.507200
+1073741824,3452772.276224
+1073741824,3448704.581632
+1073741824,3450167.045120
+1073741824,3444988.142592
+1073741824,3443740.078080
+1073741824,3445431.792640
+1073741824,3449581.971456
+1073741824,3446210.008064
+1073741824,3447478.928384
+1073741824,3447831.514112
+1073741824,3444021.877760
+1073741824,3445674.963968
+1073741824,3446504.695808
+1073741824,3446639.030272
+1073741824,3446025.129984
+1073741824,3447144.921088
+1073741824,3442723.512320
+1073741824,3444729.757696
+1073741824,3446270.095360
+1073741824,3448411.332608
+1073741824,3453328.816128
+1073741824,3444558.276608
+1073741824,3446088.460288
+1073741824,3451282.487296
+1073741824,3446988.655616
+1073741824,3446509.566976
+1073741824,3444398.194688
+1073741824,3444256.444416
+1073741824,3447661.707264
+1073741824,3444923.574272
+1073741824,3446877.669376
+1073741824,3445871.434752
+1073741824,3444025.067520
+1073741824,3441576.295424
+1073741824,3443074.683904
+1073741824,3443079.478272
+1073741824,3455004.579840
+1073741824,3447354.208256
+1073741824,3442825.673728
+1073741824,3448962.860032
+1073741824,3450485.412864
+1073741824,3445049.895936
+1073741824,3444159.129600
+1073741824,3444014.716928
+1073741824,3445201.390592
+1073741824,3444065.349632
+1073741824,3444391.609344
+1073741824,3445491.116032
+1073741824,3446302.432256
+1073741824,3447443.293184
+1073741824,3444334.678016
+1073741824,3451487.357952
+1073741824,3443721.722880
+1073741824,3444059.116544
+1073741824,3446382.662656
+1073741824,3442427.312128
+1073741824,3443964.595200
+1073741824,3444235.174912
+1073741824,3450483.812352
+1073741824,3445057.003520
+1073741824,3445888.386048
+1073741824,3441631.363072
+1073741824,3442076.171264
+1073741824,3444782.821376
+1073741824,3446067.078144
+1073741824,3449278.305280
+1073741824,3444328.466432
+1073741824,3449630.077952
+1073741824,3445545.867264
+1073741824,3447070.163968
+1073741824,3444661.757952
+1073741824,3452120.059904
+1073741824,3440477.751296
+1073741824,3446975.851520
+1073741824,3444182.218752
+1073741824,3453044.912128
+1073741824,3436456.840192
+1073741824,3446825.832448
+1073741824,3444111.356928
+1073741824,3444400.061440
+1073741824,3435997.630464
+1073741824,3451019.340800
+1073741824,3443841.837056
+1073741824,3447252.048896
+1073741824,3447567.964160
+1073741824,3454737.667072
+1073741824,3441157.466112
+1073741824,3448056.904704
+1073741824,3445311.815680
+1073741824,3447363.627008
+1073741824,3447048.032256
+1073741824,3447816.980480
+1073741824,3443484.764160
+1073741824,3446892.637184
+1073741824,3444758.320128
+1073741824,3447384.322048
+1073741824,3443649.601536
+1073741824,3446721.552384
+1073741824,3448349.458432
+1073741824,3446125.529088
+1073741824,3443264.232448
+1073741824,3441860.745216
+1073741824,3443082.598400
+1073741824,3445277.945856
+1073741824,3442806.434816
+1073741824,3444166.279168
+1073741824,3443153.350656
+1073741824,3442747.169792
+1073741824,3443119.612928
+1073741824,3445945.234432
+1073741824,3443928.965120
+1073741824,3443930.921984
+1073741824,3447817.955328
+1073741824,3443375.281152
+1073741824,3448252.456960
+1073741824,3444795.133952
+1073741824,3444921.616384
+1073741824,3445557.313536
+1073741824,3445592.400896
+1073741824,3445476.669440
+1073741824,3449592.990720
+1073741824,3445667.580928
+1073741824,3443931.634688
+1073741824,3444049.139712
+1073741824,3444545.196032
+1073741824,3445376.433152
+1073741824,3445508.471808
+1073741824,3445843.566592
+1073741824,3445011.616768
+1073741824,3445083.240448
+1073741824,3443740.100608
+1073741824,3446532.959232
+1073741824,3447460.215808
+1073741824,3449153.828864
+1073741824,3441675.847680
+1073741824,3449831.914496
+1073741824,3449026.695168
+1073741824,3448034.308096
+1073741824,3445832.763392
+1073741824,3444616.246272
+1073741824,3444895.495168
+1073741824,3443538.140160
+1073741824,3445994.744832
+1073741824,3446895.401984
+1073741824,3446911.276032
+1073741824,3454721.083392
+1073741824,3445108.934656
+1073741824,3448046.756864
+1073741824,3442112.338944
+1073741824,3449650.007040
+1073741824,3444702.134272
+1073741824,3445746.965504
+1073741824,3444087.781376
+1073741824,3446404.456448
+1073741824,3442233.155584
+1073741824,3443307.448320
+1073741824,3446557.146112
+1073741824,3448380.950528
+1073741824,3443778.294784
+1073741824,3448582.403072
+1073741824,3454115.940352
+1073741824,3445044.497408
+1073741824,3445037.830144
+1073741824,3444472.418304
+1073741824,3447985.112064
+1073741824,3445578.021888
+1073741824,3446829.186048
+1073741824,3454584.251392
+1073741824,3445052.680192
+1073741824,3447213.381632
+1073741824,3446863.981568
+1073741824,3445047.609344
+1073741824,3447006.763008
+1073741824,3447026.185216
+1073741824,3445018.452992
+1073741824,3449584.150528
+1073741824,3445736.832000
+1073741824,3446141.486080
+1073741824,3446948.271104
+1073741824,3440842.770432
+1073741824,3441852.622848
+1073741824,3441573.607424
+1073741824,3447712.470016
+1073741824,3443950.739456
+1073741824,3442118.339584
+1073741824,3444598.412288
+1073741824,3446591.867904
+1073741824,3448680.195072
+536870912,3449337.228288
+536870912,3447986.178048
+536870912,3443867.614208
+536870912,3447874.208768
+536870912,3447618.621440
+536870912,3447323.494400
+536870912,3445197.303808
+536870912,3445361.263616
+536870912,3454980.696064
+536870912,3447529.209856
+536870912,3447271.881728
+536870912,3444903.315456
+536870912,3455383.209984
+536870912,3445324.313600
+536870912,3454927.511552
+536870912,3448163.533824
+536870912,3450358.805504
+536870912,3435785.205760
+536870912,3447858.019328
+536870912,3441828.491264
+536870912,3445542.448128
+536870912,3446440.341504
+536870912,3451423.226880
+536870912,3457923.938304
+536870912,3452375.246848
+536870912,3449858.167808
+536870912,3446713.701376
+536870912,3449592.298496
+536870912,3448932.649984
+536870912,3455350.735872
+536870912,3447144.071168
+536870912,3445810.840576
+536870912,3451721.056256
+536870912,3445916.379136
+536870912,3449286.304768
+536870912,3449550.401536
+536870912,3451360.835584
+536870912,3443026.658304
+536870912,3453523.487744
+536870912,3449236.766720
+536870912,3453946.368000
+536870912,3452626.038784
+536870912,3446342.088704
+536870912,3456319.689728
+536870912,3447031.817216
+536870912,3450531.023872
+536870912,3445988.290560
+536870912,3446594.609152
+536870912,3458700.723200
+536870912,3446210.291712
+536870912,3447304.431616
+536870912,3446987.646976
+536870912,3449059.981312
+536870912,3444756.215808
+536870912,3436715.280384
+536870912,3451835.092992
+536870912,3444357.169152
+536870912,3449201.866752
+536870912,3455200.032768
+536870912,3440340.973568
+536870912,3450484.560896
+536870912,3449605.054464
+536870912,3449126.599680
+536870912,3445513.283584
+536870912,3461050.243072
+536870912,3456530.308096
+536870912,3445862.658048
+536870912,3452109.786112
+536870912,3449823.209472
+536870912,3448773.772288
+536870912,3447448.529920
+536870912,3445265.833984
+536870912,3445852.082176
+536870912,3450832.878592
+536870912,3450516.694016
+536870912,3448494.143488
+536870912,3449852.582912
+536870912,3448257.582080
+536870912,3456376.220672
+536870912,3449398.864896
+536870912,3445576.074240
+536870912,3460453.741568
+536870912,3450798.717952
+536870912,3443432.588288
+536870912,3443961.247744
+536870912,3449873.331200
+536870912,3450952.648704
+536870912,3450916.533248
+536870912,3447785.646080
+536870912,3446309.262336
+536870912,3448229.551104
+536870912,3452024.140800
+536870912,3452035.551232
+536870912,3449695.368192
+536870912,3449262.386176
+536870912,3452348.966912
+536870912,3451004.643328
+536870912,3447248.989184
+536870912,3453713.768448
+536870912,3438490.029056
+536870912,3453349.492736
+536870912,3447916.065792
+536870912,3443800.407040
+536870912,3452395.435008
+536870912,3450261.827584
+536870912,3450399.202304
+536870912,3447450.320896
+536870912,3435053.381632
+536870912,3454054.294528
+536870912,3451258.371072
+536870912,3449624.029184
+536870912,3454368.783360
+536870912,3446906.381312
+536870912,3452046.483456
+536870912,3445311.114240
+536870912,3449011.992576
+536870912,3451801.253888
+536870912,3446498.477056
+536870912,3451361.994752
+536870912,3449319.572480
+536870912,3442783.815680
+536870912,3449565.289472
+536870912,3449503.011840
+536870912,3438675.814400
+536870912,3446274.897920
+536870912,3443541.712896
+536870912,3450582.188032
+536870912,3443702.507520
+536870912,3454145.319936
+536870912,3450057.079808
+536870912,3447200.190464
+536870912,3449621.419008
+536870912,3461528.400896
+536870912,3448449.391616
+536870912,3447861.964800
+536870912,3446271.567872
+536870912,3446483.387392
+536870912,3450345.204736
+536870912,3448342.313984
+536870912,3449242.053632
+536870912,3445591.200768
+536870912,3454177.065984
+536870912,3444045.497344
+536870912,3448679.264256
+536870912,3452314.118144
+536870912,3444828.055552
+536870912,3447490.807808
+536870912,3443395.407872
+536870912,3446152.936448
+536870912,3458361.401344
+536870912,3448339.842048
+536870912,3450304.286720
+536870912,3450201.022464
+536870912,3448256.425984
+536870912,3440849.601536
+536870912,3451471.826944
+536870912,3444285.009920
+536870912,3449192.812544
+536870912,3437142.594560
+536870912,3437118.281728
+536870912,3429180.433408
+536870912,3448239.190016
+536870912,3454840.247296
+536870912,3443776.112640
+536870912,3445891.987456
+536870912,3449193.311232
+536870912,3449310.813184
+536870912,3450593.270784
+536870912,3448822.389760
+536870912,3454661.293056
+536870912,3445154.448384
+536870912,3448061.848576
+536870912,3449196.443648
+536870912,3455409.307648
+536870912,3451071.769600
+536870912,3450183.675904
+536870912,3445296.262144
+536870912,3446153.186304
+536870912,3455017.740288
+536870912,3457479.950336
+536870912,3450012.514304
+536870912,3449457.144832
+536870912,3449868.881920
+536870912,3443872.070656
+536870912,3459357.562880
+536870912,3446380.192768
+536870912,3448022.890496
+536870912,3450701.896704
+536870912,3447387.869184
+536870912,3444782.312448
+536870912,3453844.409344
+536870912,3453221.891072
+536870912,3453952.171008
+536870912,3446489.142272
+536870912,3449383.568384
+536870912,3446259.742720
+536870912,3460290.946048
+536870912,3446720.000000
+536870912,3451656.995840
+536870912,3449657.871360
+536870912,3448086.475776
+536870912,3457631.558656
+536870912,3457282.187264
+536870912,3444347.597824
+536870912,3451544.083456
+536870912,3456937.194496
+536870912,3447010.627584
+536870912,3456520.714240
+536870912,3450380.945408
+536870912,3443959.030784
+536870912,3445176.724480
+536870912,3445353.475072
+536870912,3442576.835584
+536870912,3448826.449920
+536870912,3446867.448832
+536870912,3450191.804416
+536870912,3445160.425472
+536870912,3446422.851584
+536870912,3454616.722432
+536870912,3449329.193984
+536870912,3446355.295232
+536870912,3434644.790272
+536870912,3447525.355520
+536870912,3456827.583488
+536870912,3448879.969280
+536870912,3449759.014912
+536870912,3448717.647872
+536870912,3446717.643776
+536870912,3446898.970624
+536870912,3448839.154688
+536870912,3447831.241728
+536870912,3447451.748352
+536870912,3445480.836096
+536870912,3443843.047424
+536870912,3448341.271552
+536870912,3451050.302464
+536870912,3450539.380736
+536870912,3447875.683328
+536870912,3451511.885824
+536870912,3447458.503680
+536870912,3443479.245824
+536870912,3447164.039168
+536870912,3451339.865088
+536870912,3440927.352832
+536870912,3446677.650432
+536870912,3451717.533696
+536870912,3454385.261568
+536870912,3448134.755328
+536870912,3450587.252736
+536870912,3454527.812608
+268435456,3459163.694080
+268435456,3430796.759040
+268435456,3451239.310336
+268435456,3461031.758848
+268435456,3447169.682432
+268435456,3462529.155072
+268435456,3447317.600256
+268435456,3460763.320320
+268435456,3448875.840512
+268435456,3450054.627328
+268435456,3462016.634880
+268435456,3450032.197632
+268435456,3459465.029632
+268435456,3450830.516224
+268435456,3456008.331264
+268435456,3440884.830208
+268435456,3455782.992896
+268435456,3452809.920512
+268435456,3451877.091328
+268435456,3462016.360448
+268435456,3446026.885120
+268435456,3451500.502016
+268435456,3447577.382912
+268435456,3449440.667648
+268435456,3448527.350784
+268435456,3458503.414784
+268435456,3455835.611136
+268435456,3449396.867072
+268435456,3449557.141504
+268435456,3450246.251520
+268435456,3462823.848960
+268435456,3453087.952896
+268435456,3449960.730624
+268435456,3429425.197056
+268435456,3424818.157568
+268435456,3450483.948544
+268435456,3453894.785024
+268435456,3458960.079872
+268435456,3455463.305216
+268435456,3447817.977856
+268435456,3452376.429568
+268435456,3445090.971648
+268435456,3441819.543552
+268435456,3449083.850752
+268435456,3457229.524992
+268435456,3449535.081472
+268435456,3459326.246912
+268435456,3449360.284672
+268435456,3447553.580032
+268435456,3456761.282560
+268435456,3448087.586816
+268435456,3456028.241920
+268435456,3453598.605312
+268435456,3449144.253440
+268435456,3449489.326080
+268435456,3449164.902400
+268435456,3456261.586944
+268435456,3451641.702400
+268435456,3454617.906176
+268435456,3449624.051712
+268435456,3451792.186368
+268435456,3462618.110976
+268435456,3456045.739008
+268435456,3453919.313920
+268435456,3450469.642240
+268435456,3462478.298112
+268435456,3449657.690112
+268435456,3462567.709696
+268435456,3452225.713152
+268435456,3436880.709632
+268435456,3453210.723328
+268435456,3445811.905536
+268435456,3441777.925120
+268435456,3453664.716800
+268435456,3465267.999744
+268435456,3446127.136768
+268435456,3457344.837632
+268435456,3448291.420160
+268435456,3451190.239232
+268435456,3462929.335296
+268435456,3450030.562304
+268435456,3454039.003136
+268435456,3457569.148928
+268435456,3454912.803840
+268435456,3449758.652416
+268435456,3446647.515136
+268435456,3451505.819648
+268435456,3450159.472640
+268435456,3460315.268096
+268435456,3453920.087040
+268435456,3426721.597440
+268435456,3453095.184384
+268435456,3456754.900992
+268435456,3452683.268096
+268435456,3447922.279424
+268435456,3453326.314496
+268435456,3440587.355136
+268435456,3451439.881216
+268435456,3445326.283776
+268435456,3459686.967296
+268435456,3449051.495424
+268435456,3456593.546240
+268435456,3460191.991808
+268435456,3450090.544128
+268435456,3464546.183168
+268435456,3450541.310976
+268435456,3456955.839488
+268435456,3449476.843520
+268435456,3451995.321344
+268435456,3466050.518016
+268435456,3447101.870080
+268435456,3457395.544064
+268435456,3431074.445312
+268435456,3454015.974400
+268435456,3454068.948992
+268435456,3450687.156224
+268435456,3459653.361664
+268435456,3449191.496704
+268435456,3465345.781760
+268435456,3450736.031744
+268435456,3451400.074240
+268435456,3460238.123008
+268435456,3461413.310464
+268435456,3462527.508480
+268435456,3442372.615168
+268435456,3459402.895360
+268435456,3454431.032320
+268435456,3457940.130816
+268435456,3449780.579328
+268435456,3454832.484352
+268435456,3451976.774656
+268435456,3452863.358976
+268435456,3452691.499008
+268435456,3446001.607680
+268435456,3445225.761792
+268435456,3452305.593344
+268435456,3449335.775232
+268435456,3457150.327808
+268435456,3451479.780352
+268435456,3454427.663360
+268435456,3447008.905216
+268435456,3459015.990272
+268435456,3447523.020800
+268435456,3446355.567616
+268435456,3461536.262144
+268435456,3458601.928704
+268435456,3458215.704576
+268435456,3447785.418752
+268435456,3453562.706944
+268435456,3450771.144704
+268435456,3459505.022976
+268435456,3441299.176448
+268435456,3454529.997824
+268435456,3453218.775040
+268435456,3445528.250368
+268435456,3465046.490112
+268435456,3451445.425152
+268435456,3456749.568000
+268435456,3453221.230592
+268435456,3461697.529856
+268435456,3449465.950208
+268435456,3452803.189760
+268435456,3454269.440000
+268435456,3449436.310528
+268435456,3441366.037504
+268435456,3454108.636160
+268435456,3447598.557184
+268435456,3452715.509760
+268435456,3450015.306752
+268435456,3458644.046848
+268435456,3454546.841600
+268435456,3451898.318848
+268435456,3445510.317056
+268435456,3447040.225280
+268435456,3456508.135424
+268435456,3445874.775040
+268435456,3461728.294912
+268435456,3445911.917568
+268435456,3442757.343232
+268435456,3442532.418560
+268435456,3458100.560896
+268435456,3447822.422016
+268435456,3451278.249984
+268435456,3457788.472320
+268435456,3452337.646592
+268435456,3461041.354752
+268435456,3454872.325120
+268435456,3458932.558848
+268435456,3447894.479872
+268435456,3453178.835968
+268435456,3451966.501888
+268435456,3451977.866240
+268435456,3462654.518272
+268435456,3448724.975616
+268435456,3449925.680128
+268435456,3460866.669568
+268435456,3447391.224832
+268435456,3453424.989184
+268435456,3450164.513792
+268435456,3450452.383744
+268435456,3454423.930880
+268435456,3455018.263552
+268435456,3446601.882624
+268435456,3448767.896576
+268435456,3462170.951680
+268435456,3447963.411456
+268435456,3446291.819520
+268435456,3448611.098624
+268435456,3461471.814656
+268435456,3448885.096448
+268435456,3458446.699520
+268435456,3444729.938944
+268435456,3458624.379904
+268435456,3462996.261888
+268435456,3438707.141632
+268435456,3449308.497920
+268435456,3446658.164736
+268435456,3456377.747456
+268435456,3459131.240448
+268435456,3448215.853056
+268435456,3454670.580736
+268435456,3446826.886144
+268435456,3459203.999744
+268435456,3448007.764992
+268435456,3447926.133760
+268435456,3458219.035648
+268435456,3425448.358912
+268435456,3448087.495680
+268435456,3456012.250112
+268435456,3461090.158592
+268435456,3449974.124544
+268435456,3451482.779648
+268435456,3442437.122048
+268435456,3443090.060288
+268435456,3463405.518848
+268435456,3450580.734976
+268435456,3456815.891456
+268435456,3445751.120896
+268435456,3455884.678144
+268435456,3450542.810112
+268435456,3449184.734208
+268435456,3451539.993600
+268435456,3452629.880832
+268435456,3461000.274944
+268435456,3456057.083904
+268435456,3462168.207360
+268435456,3456814.796800
+268435456,3452302.729216
+268435456,3457794.583552
+268435456,3446548.230144
diff --git a/decompress/bw_all.CSV b/decompress/bw_all.CSV
new file mode 100644
index 0000000..c025bfe
--- /dev/null
+++ b/decompress/bw_all.CSV
@@ -0,0 +1,4 @@
+bytes,size,VANILLA,VANILLA_err,FALCO,FALCO_err,TETRA,TETRA_err,TRACE,TRACE_err
+268435456,256M,3371.312850,6.685594,,,,,,
+536870912,512M,3367.953428,4.529973,,,,,,
+1073741824,1G,3365.289682,2.809557,,,,,,
diff --git a/decompress/combine.py b/decompress/combine.py
new file mode 100755
index 0000000..7397449
--- /dev/null
+++ b/decompress/combine.py
@@ -0,0 +1,169 @@
+#!/usr/bin/env python3
+
+import csv
+import glob
+import math
+from collections import defaultdict
+from pathlib import Path
+
+
+LABELS = ["VANILLA", "FALCO", "TETRA", "TRACE"]
+
+
+def label_from_path(path: str, prefix: str) -> str:
+ stem = Path(path).stem
+ if stem.startswith(prefix):
+ stem = stem[len(prefix):]
+ return stem.upper()
+
+
+def format_size(n: int) -> str:
+ gib = 1024 ** 3
+ mib = 1024 ** 2
+ kib = 1024
+
+ if n >= gib:
+ v = n / gib
+ if abs(v - round(v)) < 0.03:
+ return f"{int(round(v))}G"
+ return f"{v:.1f}G"
+
+ if n >= mib:
+ v = n / mib
+ if abs(v - round(v)) < 0.03:
+ return f"{int(round(v))}M"
+ return f"{round(n / 1_000_000)}M"
+
+ if n >= kib:
+ return f"{round(n / 1000)}K"
+
+ return f"{n}B"
+
+
+def mean(xs):
+ return sum(xs) / len(xs)
+
+
+def stddev(xs):
+ m = mean(xs)
+ return math.sqrt(sum((x - m) ** 2 for x in xs) / len(xs))
+
+
+def prepare_times():
+ groups = defaultdict(list)
+
+ for path in sorted(glob.glob("times_*.csv")):
+ label = label_from_path(path, "times_")
+
+ if label not in LABELS:
+ print(f"Skipping unknown latency label: {path}")
+ continue
+
+ with open(path, newline="") as f:
+ r = csv.DictReader(f)
+ if r.fieldnames != ["bytes", "time_usec"]:
+ raise ValueError(f"{path}: expected bytes,time_usec, got {r.fieldnames}")
+
+ for row in r:
+ nbytes = int(row["bytes"])
+ time_usec = float(row["time_usec"])
+ groups[(label, nbytes)].append(time_usec)
+
+ sizes = sorted({nbytes for (_, nbytes) in groups.keys()})
+
+ fieldnames = ["bytes"]
+ for label in LABELS:
+ fieldnames += [f"{label}_time_usec", f"{label}_cdf"]
+
+ with open("times_all.CSV", "w", newline="") as f:
+ w = csv.DictWriter(f, fieldnames=fieldnames)
+ w.writeheader()
+
+ for nbytes in sizes:
+ per_label = {}
+ max_n = 0
+
+ for label in LABELS:
+ values = sorted(groups.get((label, nbytes), []))
+ n = len(values)
+ max_n = max(max_n, n)
+
+ per_label[label] = [
+ (v, (i + 1) / n) for i, v in enumerate(values)
+ ] if n else []
+
+ for i in range(max_n):
+ row = {"bytes": nbytes}
+
+ for label in LABELS:
+ if i < len(per_label[label]):
+ t, cdf = per_label[label][i]
+ row[f"{label}_time_usec"] = f"{t / 1000.0:.6f}"
+ row[f"{label}_cdf"] = f"{cdf:.9f}"
+ else:
+ row[f"{label}_time_usec"] = ""
+ row[f"{label}_cdf"] = ""
+
+ w.writerow(row)
+
+ print("Wrote times_all.CSV")
+
+
+def prepare_bw():
+ groups = defaultdict(list)
+
+ for path in sorted(glob.glob("bw_*.csv")):
+ label = label_from_path(path, "bw_")
+
+ if label not in LABELS:
+ print(f"Skipping unknown bandwidth label: {path}")
+ continue
+
+ with open(path, newline="") as f:
+ r = csv.DictReader(f)
+ if r.fieldnames != ["bytes", "bw_KiBps"]:
+ raise ValueError(f"{path}: expected bytes,bw_KiBps, got {r.fieldnames}")
+
+ for row in r:
+ nbytes = int(row["bytes"])
+ bw_mibps = float(row["bw_KiBps"]) / 1024.0
+ groups[(label, nbytes)].append(bw_mibps)
+
+ sizes = sorted({nbytes for (_, nbytes) in groups.keys()})
+
+ fieldnames = ["bytes", "size"]
+ for label in LABELS:
+ fieldnames += [label, f"{label}_err"]
+
+ with open("bw_all.CSV", "w", newline="") as f:
+ w = csv.DictWriter(f, fieldnames=fieldnames)
+ w.writeheader()
+
+ for nbytes in sizes:
+ row = {
+ "bytes": nbytes,
+ "size": format_size(nbytes),
+ }
+
+ for label in LABELS:
+ values = groups.get((label, nbytes), [])
+
+ if values:
+ row[label] = f"{mean(values):.6f}"
+ row[f"{label}_err"] = f"{stddev(values):.6f}"
+ else:
+ row[label] = ""
+ row[f"{label}_err"] = ""
+
+ w.writerow(row)
+
+ print("Wrote bw_all.CSV")
+
+
+def main():
+ prepare_times()
+ prepare_bw()
+
+
+if __name__ == "__main__":
+ main()
diff --git a/decompress/run.sh b/decompress/run.sh
new file mode 100755
index 0000000..e75b465
--- /dev/null
+++ b/decompress/run.sh
@@ -0,0 +1,150 @@
+#!/usr/bin/env bash
+
+set -euo pipefail
+
+usage() {
+ echo "Usage: $0 <tag> <runs> <remote-chunk-directory> <chunk-size> [remote-log-prefix-base]"
+ echo
+ echo "Examples:"
+ echo " $0 VANILLA_1G 10 bins/1G 1M"
+ echo " $0 TRACE_5G 10 bins/5G 1M TRACE_5G"
+}
+
+if [[ $# -lt 4 || $# -gt 5 ]]; then
+ usage
+ exit 1
+fi
+
+TAG="$1"
+RUNS="$2"
+REMOTE_CHUNK_DIR="$3"
+CHUNK_SIZE="$4"
+REMOTE_PREFIX_BASE="${5:-${TAG}}"
+
+SSH_KEY="$HOME/.ssh/id_ed25519"
+REMOTE_HOST="ubuntu@143.248.53.46"
+REMOTE_DIR="/home/ubuntu/siho-benchmark/compress"
+
+# DPU-side PCI BDF.
+DPU_PCI="03:00.0"
+
+# DPU-side wrapper script.
+DPU_SCRIPT="./run.sh"
+
+TIMES_CSV="times_${TAG}.csv"
+BW_CSV="bw_${TAG}.csv"
+
+SSH_OPTS=(
+ -i "$SSH_KEY"
+ -n
+ -o BatchMode=yes
+ -o StrictHostKeyChecking=accept-new
+)
+
+echo "====="
+echo "SIHO'S DOCA DECOMPRESS BENCHMARKING"
+echo "SSH KEY LOCATION: $SSH_KEY"
+echo "REMOTE HOST: $REMOTE_HOST"
+echo "REMOTE DIR: $REMOTE_DIR"
+echo "TAG: $TAG"
+echo "DPU PCIE ADDRESS: $DPU_PCI"
+echo "RUNS: $RUNS"
+echo "REMOTE CHUNK DIR: $REMOTE_CHUNK_DIR"
+echo "CHUNK SIZE: $CHUNK_SIZE"
+echo "DPU SCRIPT: $DPU_SCRIPT"
+echo "====="
+echo "PROCEED (y/N)?"
+
+read -r proceed
+
+if [[ "${proceed:-}" != "y" ]]; then
+ echo "TERMINATING..."
+ exit 0
+fi
+
+for i in $(seq 1 "$RUNS"); do
+ echo "===== RUN $i/$RUNS ====="
+
+ RUN_LABEL="${REMOTE_PREFIX_BASE}_run_${i}"
+
+ echo "[dpu] Running decompressor through wrapper..."
+
+ if ! dpu_out="$(
+ ssh "${SSH_OPTS[@]}" "$REMOTE_HOST" \
+ "cd '$REMOTE_DIR' && sudo -n '$DPU_SCRIPT' '$REMOTE_PREFIX_BASE' '$DPU_PCI' '$REMOTE_CHUNK_DIR' '$CHUNK_SIZE' '$RUN_LABEL'" \
+ 2>&1
+ )"; then
+ echo "ERROR: DPU decompressor failed"
+ echo "$dpu_out"
+ exit 1
+ fi
+
+ compressed_bytes="$(
+ awk '/^[[:space:]]*compressed_bytes:/ {print $2}' <<< "$dpu_out" | tail -n1
+ )"
+
+ bytes="$(
+ awk '/^[[:space:]]*bytes:/ {print $2}' <<< "$dpu_out" | tail -n1
+ )"
+
+ time_val="$(
+ awk '/^[[:space:]]*time:/ {print $2}' <<< "$dpu_out" | tail -n1
+ )"
+
+ time_unit="$(
+ awk '/^[[:space:]]*time:/ {print $3}' <<< "$dpu_out" | tail -n1
+ )"
+
+ bw_val="$(
+ awk '/^[[:space:]]*BW:/ {print $2}' <<< "$dpu_out" | tail -n1
+ )"
+
+ bw_unit="$(
+ awk '/^[[:space:]]*BW:/ {print $3}' <<< "$dpu_out" | tail -n1
+ )"
+
+ chunks="$(
+ awk '/^[[:space:]]*chunks:/ {print $2}' <<< "$dpu_out" | tail -n1
+ )"
+
+ if [[ -z "${bytes:-}" || -z "${time_val:-}" || -z "${bw_val:-}" ]]; then
+ echo "ERROR: failed to parse DPU output"
+ echo "$dpu_out"
+ exit 1
+ fi
+
+ # Convert time to usec.
+ case "$time_unit" in
+ usec) time_usec="$time_val" ;;
+ msec) time_usec="$(awk -v x="$time_val" 'BEGIN { printf "%.6f", x * 1000.0 }')" ;;
+ sec) time_usec="$(awk -v x="$time_val" 'BEGIN { printf "%.6f", x * 1000000.0 }')" ;;
+ nsec) time_usec="$(awk -v x="$time_val" 'BEGIN { printf "%.6f", x / 1000.0 }')" ;;
+ *) time_usec="$time_val" ;;
+ esac
+
+ # Convert bandwidth to KiB/s.
+ case "$bw_unit" in
+ KiB/s|KiBps) bw_kibps="$bw_val" ;;
+ MiB/s|MiBps) bw_kibps="$(awk -v x="$bw_val" 'BEGIN { printf "%.6f", x * 1024.0 }')" ;;
+ GiB/s|GiBps) bw_kibps="$(awk -v x="$bw_val" 'BEGIN { printf "%.6f", x * 1024.0 * 1024.0 }')" ;;
+ B/s|Bps) bw_kibps="$(awk -v x="$bw_val" 'BEGIN { printf "%.6f", x / 1024.0 }')" ;;
+ *) bw_kibps="$bw_val" ;;
+ esac
+
+ if [[ ! -f "$TIMES_CSV" ]]; then
+ echo "bytes,time_usec" > "$TIMES_CSV"
+ fi
+
+ if [[ ! -f "$BW_CSV" ]]; then
+ echo "bytes,bw_KiBps" > "$BW_CSV"
+ fi
+
+ echo "$bytes,$time_usec" >> "$TIMES_CSV"
+ echo "$bytes,$bw_kibps" >> "$BW_CSV"
+
+ echo "[result] chunks=${chunks:-N/A} compressed_bytes=${compressed_bytes:-N/A} bytes=$bytes time_usec=$time_usec bw_KiBps=$bw_kibps"
+ echo "===== RUN $i/$RUNS DONE ====="
+done
+
+echo "Wrote: $TIMES_CSV"
+echo "Wrote: $BW_CSV"
diff --git a/decompress/sum.sh b/decompress/sum.sh
new file mode 100755
index 0000000..1958da7
--- /dev/null
+++ b/decompress/sum.sh
@@ -0,0 +1,21 @@
+#!/bin/bash
+
+set -euo pipefail
+
+ #times_FALCO.csv \
+ #times_TETRA.csv \
+ #times_TRACE.csv \
+ #bw_FALCO.csv \
+ #bw_TETRA.csv \
+ #bw_TRACE.csv \
+
+./analyze_time.py \
+ --unit msec \
+ --out time \
+ times_VANILLA.csv \
+ | tee ./summary/times.txt
+./analyze_bw.py \
+ --unit MiBps \
+ --out bw \
+ bw_VANILLA.csv \
+ | tee ./summary/bw.txt
diff --git a/decompress/summary/bw.txt b/decompress/summary/bw.txt
new file mode 100644
index 0000000..f1b25a2
--- /dev/null
+++ b/decompress/summary/bw.txt
@@ -0,0 +1,12 @@
+Bandwidth summary
+=================
+input_files: 1
+input_unit: KiB/s
+output_unit: MiB/s
+
+ file_label bytes size n min avg std p1 p5 p10 p50 p90 p99 max
+ VANILLA 268435456 268M 250 3344.548982 3371.312850 6.685594 3347.701525 3361.129544 3364.969564 3371.066053 3379.927964 3383.944785 3384.814959
+ VANILLA 536870912 537M 250 3348.809017 3367.953428 4.529973 3354.894507 3361.489498 3363.155884 3367.992598 3373.710145 3379.271457 3380.398829
+ VANILLA 1073741824 1.00G 250 3355.466436 3365.289682 2.809557 3360.016221 3361.190035 3362.109871 3364.983041 3368.781319 3373.685582 3374.027910
+
+Wrote bar graph: bw
diff --git a/decompress/summary/times.txt b/decompress/summary/times.txt
new file mode 100644
index 0000000..bddaed3
--- /dev/null
+++ b/decompress/summary/times.txt
@@ -0,0 +1,14 @@
+Latency summary
+================
+input_files: 1
+input_unit: usec
+output_unit: msec
+
+ file_label bytes size n min avg std p50 p90 p99 max
+ VANILLA 268435456 268M 250 75.631904 75.935109 0.150845 75.940369 76.077954 76.470390 76.542458
+ VANILLA 536870912 537M 250 151.461418 152.021380 0.204555 152.019337 152.237963 152.612848 152.890176
+ VANILLA 1073741824 1.00G 250 303.494822 304.283081 0.253941 304.310597 304.570653 304.760434 305.173668
+
+Wrote CDF graph: time_268M.png
+Wrote CDF graph: time_537M.png
+Wrote CDF graph: time_1.00G.png
diff --git a/decompress/time_1.00G.png b/decompress/time_1.00G.png
new file mode 100644
index 0000000..48ea6be
--- /dev/null
+++ b/decompress/time_1.00G.png
Binary files differ
diff --git a/decompress/time_268M.png b/decompress/time_268M.png
new file mode 100644
index 0000000..9f6c7f5
--- /dev/null
+++ b/decompress/time_268M.png
Binary files differ
diff --git a/decompress/time_537M.png b/decompress/time_537M.png
new file mode 100644
index 0000000..baed4d3
--- /dev/null
+++ b/decompress/time_537M.png
Binary files differ
diff --git a/decompress/times_VANILLA.csv b/decompress/times_VANILLA.csv
new file mode 100644
index 0000000..94b7098
--- /dev/null
+++ b/decompress/times_VANILLA.csv
@@ -0,0 +1,751 @@
+bytes,time_usec
+1073741824,304040.947
+1073741824,304068.011
+1073741824,304315.259
+1073741824,304599.477
+1073741824,304013.091
+1073741824,304408.292
+1073741824,304411.479
+1073741824,304186.071
+1073741824,304231.022
+1073741824,304166.145
+1073741824,304423.955
+1073741824,304654.159
+1073741824,303818.866
+1073741824,304493.128
+1073741824,304226.232
+1073741824,304205.835
+1073741824,304287.552
+1073741824,304274.106
+1073741824,304413.966
+1073741824,304116.462
+1073741824,304241.275
+1073741824,304259.633
+1073741824,304381.313
+1073741824,304379.358
+1073741824,304394.578
+1073741824,304311.802
+1073741824,304126.416
+1073741824,304587.135
+1073741824,303667.026
+1073741824,304213.074
+1073741824,304310.980
+1073741824,304337.081
+1073741824,304148.301
+1073741824,304453.208
+1073741824,304250.061
+1073741824,304662.704
+1073741824,303991.757
+1073741824,304611.290
+1073741824,303791.737
+1073741824,304104.426
+1073741824,303913.502
+1073741824,304244.543
+1073741824,303910.950
+1073741824,304079.644
+1073741824,304364.420
+1073741824,304685.333
+1073741824,304337.858
+1073741824,304081.016
+1073741824,304300.637
+1073741824,304260.647
+1073741824,304221.758
+1073741824,304414.116
+1073741824,304493.209
+1073741824,304577.650
+1073741824,303878.260
+1073741824,304430.056
+1073741824,304140.806
+1073741824,304212.335
+1073741824,304150.057
+1073741824,304407.502
+1073741824,303897.844
+1073741824,303881.210
+1073741824,303691.039
+1073741824,304049.238
+1073741824,303920.357
+1073741824,304377.245
+1073741824,304487.556
+1073741824,304338.052
+1073741824,303971.904
+1073741824,304269.327
+1073741824,304157.334
+1073741824,304126.230
+1073741824,304462.642
+1073741824,304316.574
+1073741824,304243.311
+1073741824,304231.453
+1073741824,304285.651
+1073741824,304186.805
+1073741824,304577.465
+1073741824,304400.076
+1073741824,304264.022
+1073741824,304075.094
+1073741824,303642.096
+1073741824,304415.230
+1073741824,304280.059
+1073741824,303822.131
+1073741824,304200.595
+1073741824,304242.881
+1073741824,304429.378
+1073741824,304441.907
+1073741824,304141.209
+1073741824,304382.950
+1073741824,304210.390
+1073741824,304299.223
+1073741824,304462.360
+1073741824,304678.993
+1073741824,304546.400
+1073741824,304545.976
+1073741824,303494.822
+1073741824,304168.338
+1073741824,304568.427
+1073741824,304026.469
+1073741824,303892.315
+1073741824,304371.789
+1073741824,304450.509
+1073741824,304463.275
+1073741824,304358.405
+1073741824,304458.799
+1073741824,304429.960
+1073741824,304332.812
+1073741824,304261.167
+1073741824,304160.478
+1073741824,304434.992
+1073741824,303804.097
+1073741824,304489.179
+1073741824,304459.350
+1073741824,304254.084
+1073741824,304603.672
+1073741824,304467.706
+1073741824,304443.787
+1073741824,303892.456
+1073741824,304371.161
+1073741824,304297.726
+1073741824,304674.118
+1073741824,304634.746
+1073741824,304395.387
+1073741824,304281.947
+1073741824,303998.665
+1073741824,304435.541
+1073741824,303967.665
+1073741824,304327.976
+1073741824,304193.402
+1073741824,304406.085
+1073741824,303748.416
+1073741824,304776.277
+1073741824,304201.725
+1073741824,304448.468
+1073741824,303667.061
+1073741824,305132.888
+1073741824,304214.965
+1073741824,304454.732
+1073741824,304429.213
+1073741824,305173.668
+1073741824,303845.298
+1073741824,304478.559
+1073741824,304177.352
+1073741824,304149.479
+1073741824,303518.270
+1073741824,304716.076
+1073741824,304106.350
+1073741824,304348.650
+1073741824,304167.507
+1073741824,304195.355
+1073741824,304127.512
+1073741824,304510.132
+1073741824,304209.069
+1073741824,304397.552
+1073741824,304165.681
+1073741824,304495.556
+1073741824,304224.169
+1073741824,304080.550
+1073741824,304276.786
+1073741824,304529.635
+1073741824,304653.813
+1073741824,304545.700
+1073741824,304351.642
+1073741824,304570.129
+1073741824,304449.877
+1073741824,304539.442
+1073741824,304575.372
+1073741824,304542.426
+1073741824,304292.706
+1073741824,304470.856
+1073741824,304470.683
+1073741824,304127.426
+1073741824,304519.814
+1073741824,304089.104
+1073741824,304394.299
+1073741824,304383.123
+1073741824,304326.965
+1073741824,304323.866
+1073741824,304334.088
+1073741824,303970.933
+1073741824,304317.226
+1073741824,304470.620
+1073741824,304460.232
+1073741824,304416.386
+1073741824,304342.942
+1073741824,304331.279
+1073741824,304301.684
+1073741824,304375.171
+1073741824,304368.843
+1073741824,304487.554
+1073741824,304240.816
+1073741824,304158.985
+1073741824,304009.636
+1073741824,304670.180
+1073741824,303949.881
+1073741824,304020.842
+1073741824,304108.343
+1073741824,304302.638
+1073741824,304410.107
+1073741824,304385.431
+1073741824,304505.412
+1073741824,304288.334
+1073741824,304208.825
+1073741824,304207.424
+1073741824,303519.727
+1073741824,304366.573
+1073741824,304107.245
+1073741824,304631.545
+1073741824,303965.909
+1073741824,304402.517
+1073741824,304310.215
+1073741824,304456.816
+1073741824,304252.160
+1073741824,304620.853
+1073741824,304525.813
+1073741824,304238.681
+1073741824,304077.773
+1073741824,304484.177
+1073741824,304060.010
+1073741824,303572.902
+1073741824,304372.266
+1073741824,304372.855
+1073741824,304422.818
+1073741824,304112.682
+1073741824,304325.136
+1073741824,304214.669
+1073741824,303531.749
+1073741824,304371.543
+1073741824,304180.764
+1073741824,304211.598
+1073741824,304371.991
+1073741824,304198.997
+1073741824,304197.283
+1073741824,304374.567
+1073741824,303971.712
+1073741824,304311.110
+1073741824,304275.377
+1073741824,304204.159
+1073741824,304743.945
+1073741824,304654.532
+1073741824,304679.231
+1073741824,304136.731
+1073741824,304468.931
+1073741824,304631.014
+1073741824,304411.683
+1073741824,304235.616
+1073741824,304051.388
+536870912,151996.736
+536870912,152056.294
+536870912,152238.140
+536870912,152061.232
+536870912,152072.505
+536870912,152085.524
+536870912,152179.383
+536870912,152172.141
+536870912,151748.460
+536870912,152076.449
+536870912,152087.801
+536870912,152192.370
+536870912,151730.783
+536870912,152173.773
+536870912,151750.796
+536870912,152048.473
+536870912,151951.733
+536870912,152596.268
+536870912,152061.946
+536870912,152328.334
+536870912,152164.139
+536870912,152124.496
+536870912,151904.871
+536870912,151619.298
+536870912,151862.982
+536870912,151973.784
+536870912,152112.431
+536870912,151985.497
+536870912,152014.566
+536870912,151732.209
+536870912,152093.440
+536870912,152152.287
+536870912,151891.764
+536870912,152147.627
+536870912,151998.980
+536870912,151987.343
+536870912,151907.617
+536870912,152275.324
+536870912,151812.490
+536870912,152001.163
+536870912,151793.903
+536870912,151851.951
+536870912,152128.833
+536870912,151689.672
+536870912,152098.393
+536870912,151944.149
+536870912,152144.452
+536870912,152117.687
+536870912,151585.246
+536870912,152134.651
+536870912,152086.365
+536870912,152100.342
+536870912,152008.954
+536870912,152198.869
+536870912,152554.971
+536870912,151886.746
+536870912,152216.502
+536870912,152002.701
+536870912,151738.827
+536870912,152394.197
+536870912,151946.195
+536870912,151984.935
+536870912,152006.018
+536870912,152165.427
+536870912,151482.343
+536870912,151680.429
+536870912,152149.999
+536870912,151874.660
+536870912,151975.324
+536870912,152021.569
+536870912,152080.008
+536870912,152176.356
+536870912,152150.466
+536870912,151930.858
+536870912,151944.780
+536870912,152033.896
+536870912,151974.030
+536870912,152044.326
+536870912,151687.191
+536870912,151994.020
+536870912,152162.654
+536870912,151508.455
+536870912,151932.362
+536870912,152257.373
+536870912,152234.001
+536870912,151973.116
+536870912,151925.585
+536870912,151927.175
+536870912,152065.138
+536870912,152130.282
+536870912,152045.562
+536870912,151878.428
+536870912,151877.926
+536870912,151980.956
+536870912,152000.034
+536870912,151864.138
+536870912,151923.296
+536870912,152088.811
+536870912,151804.126
+536870912,152476.231
+536870912,151820.139
+536870912,152059.386
+536870912,152241.111
+536870912,151862.094
+536870912,151956.004
+536870912,151949.954
+536870912,152079.929
+536870912,152628.778
+536870912,151789.160
+536870912,151912.127
+536870912,151984.099
+536870912,151775.341
+536870912,152103.928
+536870912,151877.445
+536870912,152174.356
+536870912,152011.069
+536870912,151888.235
+536870912,152121.930
+536870912,151907.566
+536870912,151997.514
+536870912,152286.065
+536870912,151986.687
+536870912,151989.431
+536870912,152467.993
+536870912,152131.799
+536870912,152252.548
+536870912,151941.896
+536870912,152245.439
+536870912,151785.160
+536870912,151965.022
+536870912,152090.964
+536870912,151984.214
+536870912,151461.418
+536870912,152035.869
+536870912,152061.772
+536870912,152131.946
+536870912,152122.596
+536870912,151952.332
+536870912,152040.590
+536870912,152000.930
+536870912,152161.986
+536870912,151783.765
+536870912,152230.277
+536870912,152025.735
+536870912,151865.671
+536870912,152195.695
+536870912,152078.143
+536870912,152259.017
+536870912,152137.183
+536870912,151600.119
+536870912,152040.699
+536870912,151954.134
+536870912,151958.682
+536870912,152044.377
+536870912,152371.670
+536870912,151902.732
+536870912,152219.691
+536870912,152003.100
+536870912,152536.005
+536870912,152537.084
+536870912,152890.176
+536870912,152045.137
+536870912,151754.629
+536870912,152242.185
+536870912,152148.704
+536870912,152003.078
+536870912,151997.900
+536870912,151941.408
+536870912,152019.426
+536870912,151762.490
+536870912,152181.276
+536870912,152052.957
+536870912,152002.940
+536870912,151729.637
+536870912,151920.341
+536870912,151959.446
+536870912,152175.012
+536870912,152137.172
+536870912,151746.833
+536870912,151638.768
+536870912,151966.985
+536870912,151991.452
+536870912,151973.312
+536870912,152237.943
+536870912,151556.464
+536870912,152127.151
+536870912,152054.675
+536870912,151936.625
+536870912,152082.684
+536870912,152197.716
+536870912,151798.384
+536870912,151825.749
+536870912,151793.648
+536870912,152122.342
+536870912,151994.694
+536870912,152132.468
+536870912,151515.583
+536870912,152112.153
+536870912,151894.583
+536870912,151982.608
+536870912,152051.871
+536870912,151632.119
+536870912,151647.442
+536870912,152216.925
+536870912,151899.552
+536870912,151662.576
+536870912,152099.328
+536870912,151680.850
+536870912,151950.758
+536870912,152234.099
+536870912,152180.292
+536870912,152172.485
+536870912,152295.221
+536870912,152019.247
+536870912,152105.646
+536870912,151959.088
+536870912,152181.012
+536870912,152125.268
+536870912,151764.448
+536870912,151997.090
+536870912,152128.250
+536870912,152646.935
+536870912,152076.619
+536870912,151667.385
+536870912,152016.888
+536870912,151978.152
+536870912,152024.043
+536870912,152112.257
+536870912,152104.255
+536870912,152018.687
+536870912,152063.127
+536870912,152079.866
+536870912,152166.860
+536870912,152239.226
+536870912,152040.636
+536870912,151921.286
+536870912,151943.781
+536870912,152061.167
+536870912,151900.969
+536870912,152079.568
+536870912,152255.310
+536870912,152092.559
+536870912,151908.540
+536870912,152368.227
+536870912,152114.022
+536870912,151891.919
+536870912,151774.617
+536870912,152049.742
+536870912,151941.673
+536870912,151768.354
+268435456,75782.479
+268435456,76409.073
+268435456,75956.483
+268435456,75741.576
+268435456,76046.155
+268435456,75708.821
+268435456,76042.892
+268435456,75747.451
+268435456,76008.535
+268435456,75982.565
+268435456,75720.029
+268435456,75983.059
+268435456,75775.878
+268435456,75965.481
+268435456,75851.669
+268435456,76185.055
+268435456,75856.615
+268435456,75921.932
+268435456,75942.449
+268435456,75720.035
+268435456,76071.374
+268435456,75950.735
+268435456,76037.162
+268435456,75996.089
+268435456,76016.216
+268435456,75796.947
+268435456,75855.460
+268435456,75997.054
+268435456,75993.523
+268435456,75978.345
+268435456,75702.378
+268435456,75915.819
+268435456,75984.633
+268435456,76439.632
+268435456,76542.458
+268435456,75973.111
+268435456,75898.085
+268435456,75786.940
+268435456,75863.633
+268435456,76031.856
+268435456,75931.465
+268435456,76092.040
+268435456,76164.365
+268435456,76003.951
+268435456,75824.876
+268435456,75994.009
+268435456,75778.918
+268435456,75997.860
+268435456,76037.687
+268435456,75835.147
+268435456,76025.911
+268435456,75851.232
+268435456,75904.594
+268435456,76002.620
+268435456,75995.017
+268435456,76002.165
+268435456,75846.111
+268435456,75947.628
+268435456,75882.198
+268435456,75992.049
+268435456,75944.317
+268435456,75706.876
+268435456,75850.848
+268435456,75897.546
+268435456,75973.426
+268435456,75709.933
+268435456,75991.308
+268435456,75707.978
+268435456,75934.780
+268435456,76273.814
+268435456,75913.120
+268435456,76076.120
+268435456,76165.286
+268435456,75903.141
+268435456,75648.983
+268435456,76069.161
+268435456,75822.347
+268435456,76021.417
+268435456,75957.563
+268435456,75700.072
+268435456,75983.095
+268435456,75894.916
+268435456,75817.428
+268435456,75875.721
+268435456,75989.084
+268435456,76057.676
+268435456,75950.618
+268435456,75980.256
+268435456,75757.259
+268435456,75897.529
+268435456,76499.941
+268435456,75915.660
+268435456,75835.287
+268435456,75924.717
+268435456,76029.556
+268435456,75910.579
+268435456,76191.642
+268435456,75952.069
+268435456,76086.843
+268435456,75771.017
+268435456,76004.664
+268435456,75838.827
+268435456,75759.958
+268435456,75981.774
+268435456,75664.744
+268435456,75971.848
+268435456,75830.879
+268435456,75995.292
+268435456,75939.848
+268435456,75631.904
+268435456,76047.651
+268435456,75821.235
+268435456,76402.889
+268435456,75895.422
+268435456,75894.258
+268435456,75968.637
+268435456,75771.753
+268435456,76001.579
+268435456,75647.285
+268435456,75967.561
+268435456,75952.945
+268435456,75758.948
+268435456,75733.227
+268435456,75708.857
+268435456,76152.128
+268435456,75777.239
+268435456,75886.303
+268435456,75809.294
+268435456,75988.601
+268435456,75877.485
+268435456,75940.256
+268435456,75920.757
+268435456,75924.536
+268435456,76071.932
+268435456,76089.063
+268435456,75933.023
+268435456,75998.400
+268435456,75826.613
+268435456,75951.191
+268435456,75886.377
+268435456,76049.702
+268435456,75785.715
+268435456,76038.361
+268435456,76064.119
+268435456,75730.537
+268435456,75794.788
+268435456,75803.253
+268435456,76032.574
+268435456,75905.383
+268435456,75966.788
+268435456,75775.002
+268435456,76175.882
+268435456,75884.129
+268435456,75912.943
+268435456,76082.383
+268435456,75653.819
+268435456,75951.947
+268435456,75835.404
+268435456,75912.889
+268435456,75727.009
+268435456,75995.532
+268435456,75922.080
+268435456,75889.853
+268435456,75996.185
+268435456,76174.402
+268435456,75893.386
+268435456,76036.695
+268435456,75924.008
+268435456,75983.431
+268435456,75793.865
+268435456,75883.759
+268435456,75941.982
+268435456,76082.779
+268435456,76049.011
+268435456,75840.701
+268435456,76074.732
+268435456,75726.336
+268435456,76073.912
+268435456,76143.618
+268435456,76148.593
+268435456,75805.777
+268435456,76031.758
+268435456,75955.626
+268435456,75812.619
+268435456,75932.318
+268435456,75741.366
+268435456,75876.610
+268435456,75787.543
+268435456,76030.169
+268435456,75913.821
+268435456,75940.482
+268435456,75940.232
+268435456,75706.080
+268435456,76011.860
+268435456,75985.405
+268435456,75745.189
+268435456,76041.268
+268435456,75908.410
+268435456,75980.145
+268435456,75973.806
+268435456,75886.459
+268435456,75873.405
+268435456,76058.683
+268435456,76010.914
+268435456,75716.654
+268435456,76028.649
+268435456,76065.526
+268435456,76014.370
+268435456,75731.947
+268435456,76008.331
+268435456,75798.190
+268435456,76100.015
+268435456,75794.296
+268435456,75698.609
+268435456,76233.302
+268435456,75999.001
+268435456,76057.441
+268435456,75843.562
+268435456,75783.190
+268435456,76023.083
+268435456,75881.041
+268435456,76053.718
+268435456,75781.596
+268435456,76027.671
+268435456,76029.471
+268435456,75803.180
+268435456,76528.376
+268435456,76025.913
+268435456,75851.583
+268435456,75740.298
+268435456,75984.338
+268435456,75951.125
+268435456,76150.701
+268435456,76136.260
+268435456,75689.664
+268435456,75970.980
+268435456,75833.949
+268435456,76077.462
+268435456,75854.383
+268435456,75971.815
+268435456,76001.728
+268435456,75949.866
+268435456,75925.891
+268435456,75742.265
+268435456,75850.599
+268435456,75716.714
+268435456,75833.973
+268435456,75933.086
+268435456,75812.485
+268435456,76059.867
diff --git a/decompress/times_all.CSV b/decompress/times_all.CSV
new file mode 100644
index 0000000..1c08448
--- /dev/null
+++ b/decompress/times_all.CSV
@@ -0,0 +1,751 @@
+bytes,VANILLA_time_usec,VANILLA_cdf,FALCO_time_usec,FALCO_cdf,TETRA_time_usec,TETRA_cdf,TRACE_time_usec,TRACE_cdf
+268435456,75.631904,0.004000000,,,,,,
+268435456,75.647285,0.008000000,,,,,,
+268435456,75.648983,0.012000000,,,,,,
+268435456,75.653819,0.016000000,,,,,,
+268435456,75.664744,0.020000000,,,,,,
+268435456,75.689664,0.024000000,,,,,,
+268435456,75.698609,0.028000000,,,,,,
+268435456,75.700072,0.032000000,,,,,,
+268435456,75.702378,0.036000000,,,,,,
+268435456,75.706080,0.040000000,,,,,,
+268435456,75.706876,0.044000000,,,,,,
+268435456,75.707978,0.048000000,,,,,,
+268435456,75.708821,0.052000000,,,,,,
+268435456,75.708857,0.056000000,,,,,,
+268435456,75.709933,0.060000000,,,,,,
+268435456,75.716654,0.064000000,,,,,,
+268435456,75.716714,0.068000000,,,,,,
+268435456,75.720029,0.072000000,,,,,,
+268435456,75.720035,0.076000000,,,,,,
+268435456,75.726336,0.080000000,,,,,,
+268435456,75.727009,0.084000000,,,,,,
+268435456,75.730537,0.088000000,,,,,,
+268435456,75.731947,0.092000000,,,,,,
+268435456,75.733227,0.096000000,,,,,,
+268435456,75.740298,0.100000000,,,,,,
+268435456,75.741366,0.104000000,,,,,,
+268435456,75.741576,0.108000000,,,,,,
+268435456,75.742265,0.112000000,,,,,,
+268435456,75.745189,0.116000000,,,,,,
+268435456,75.747451,0.120000000,,,,,,
+268435456,75.757259,0.124000000,,,,,,
+268435456,75.758948,0.128000000,,,,,,
+268435456,75.759958,0.132000000,,,,,,
+268435456,75.771017,0.136000000,,,,,,
+268435456,75.771753,0.140000000,,,,,,
+268435456,75.775002,0.144000000,,,,,,
+268435456,75.775878,0.148000000,,,,,,
+268435456,75.777239,0.152000000,,,,,,
+268435456,75.778918,0.156000000,,,,,,
+268435456,75.781596,0.160000000,,,,,,
+268435456,75.782479,0.164000000,,,,,,
+268435456,75.783190,0.168000000,,,,,,
+268435456,75.785715,0.172000000,,,,,,
+268435456,75.786940,0.176000000,,,,,,
+268435456,75.787543,0.180000000,,,,,,
+268435456,75.793865,0.184000000,,,,,,
+268435456,75.794296,0.188000000,,,,,,
+268435456,75.794788,0.192000000,,,,,,
+268435456,75.796947,0.196000000,,,,,,
+268435456,75.798190,0.200000000,,,,,,
+268435456,75.803180,0.204000000,,,,,,
+268435456,75.803253,0.208000000,,,,,,
+268435456,75.805777,0.212000000,,,,,,
+268435456,75.809294,0.216000000,,,,,,
+268435456,75.812485,0.220000000,,,,,,
+268435456,75.812619,0.224000000,,,,,,
+268435456,75.817428,0.228000000,,,,,,
+268435456,75.821235,0.232000000,,,,,,
+268435456,75.822347,0.236000000,,,,,,
+268435456,75.824876,0.240000000,,,,,,
+268435456,75.826613,0.244000000,,,,,,
+268435456,75.830879,0.248000000,,,,,,
+268435456,75.833949,0.252000000,,,,,,
+268435456,75.833973,0.256000000,,,,,,
+268435456,75.835147,0.260000000,,,,,,
+268435456,75.835287,0.264000000,,,,,,
+268435456,75.835404,0.268000000,,,,,,
+268435456,75.838827,0.272000000,,,,,,
+268435456,75.840701,0.276000000,,,,,,
+268435456,75.843562,0.280000000,,,,,,
+268435456,75.846111,0.284000000,,,,,,
+268435456,75.850599,0.288000000,,,,,,
+268435456,75.850848,0.292000000,,,,,,
+268435456,75.851232,0.296000000,,,,,,
+268435456,75.851583,0.300000000,,,,,,
+268435456,75.851669,0.304000000,,,,,,
+268435456,75.854383,0.308000000,,,,,,
+268435456,75.855460,0.312000000,,,,,,
+268435456,75.856615,0.316000000,,,,,,
+268435456,75.863633,0.320000000,,,,,,
+268435456,75.873405,0.324000000,,,,,,
+268435456,75.875721,0.328000000,,,,,,
+268435456,75.876610,0.332000000,,,,,,
+268435456,75.877485,0.336000000,,,,,,
+268435456,75.881041,0.340000000,,,,,,
+268435456,75.882198,0.344000000,,,,,,
+268435456,75.883759,0.348000000,,,,,,
+268435456,75.884129,0.352000000,,,,,,
+268435456,75.886303,0.356000000,,,,,,
+268435456,75.886377,0.360000000,,,,,,
+268435456,75.886459,0.364000000,,,,,,
+268435456,75.889853,0.368000000,,,,,,
+268435456,75.893386,0.372000000,,,,,,
+268435456,75.894258,0.376000000,,,,,,
+268435456,75.894916,0.380000000,,,,,,
+268435456,75.895422,0.384000000,,,,,,
+268435456,75.897529,0.388000000,,,,,,
+268435456,75.897546,0.392000000,,,,,,
+268435456,75.898085,0.396000000,,,,,,
+268435456,75.903141,0.400000000,,,,,,
+268435456,75.904594,0.404000000,,,,,,
+268435456,75.905383,0.408000000,,,,,,
+268435456,75.908410,0.412000000,,,,,,
+268435456,75.910579,0.416000000,,,,,,
+268435456,75.912889,0.420000000,,,,,,
+268435456,75.912943,0.424000000,,,,,,
+268435456,75.913120,0.428000000,,,,,,
+268435456,75.913821,0.432000000,,,,,,
+268435456,75.915660,0.436000000,,,,,,
+268435456,75.915819,0.440000000,,,,,,
+268435456,75.920757,0.444000000,,,,,,
+268435456,75.921932,0.448000000,,,,,,
+268435456,75.922080,0.452000000,,,,,,
+268435456,75.924008,0.456000000,,,,,,
+268435456,75.924536,0.460000000,,,,,,
+268435456,75.924717,0.464000000,,,,,,
+268435456,75.925891,0.468000000,,,,,,
+268435456,75.931465,0.472000000,,,,,,
+268435456,75.932318,0.476000000,,,,,,
+268435456,75.933023,0.480000000,,,,,,
+268435456,75.933086,0.484000000,,,,,,
+268435456,75.934780,0.488000000,,,,,,
+268435456,75.939848,0.492000000,,,,,,
+268435456,75.940232,0.496000000,,,,,,
+268435456,75.940256,0.500000000,,,,,,
+268435456,75.940482,0.504000000,,,,,,
+268435456,75.941982,0.508000000,,,,,,
+268435456,75.942449,0.512000000,,,,,,
+268435456,75.944317,0.516000000,,,,,,
+268435456,75.947628,0.520000000,,,,,,
+268435456,75.949866,0.524000000,,,,,,
+268435456,75.950618,0.528000000,,,,,,
+268435456,75.950735,0.532000000,,,,,,
+268435456,75.951125,0.536000000,,,,,,
+268435456,75.951191,0.540000000,,,,,,
+268435456,75.951947,0.544000000,,,,,,
+268435456,75.952069,0.548000000,,,,,,
+268435456,75.952945,0.552000000,,,,,,
+268435456,75.955626,0.556000000,,,,,,
+268435456,75.956483,0.560000000,,,,,,
+268435456,75.957563,0.564000000,,,,,,
+268435456,75.965481,0.568000000,,,,,,
+268435456,75.966788,0.572000000,,,,,,
+268435456,75.967561,0.576000000,,,,,,
+268435456,75.968637,0.580000000,,,,,,
+268435456,75.970980,0.584000000,,,,,,
+268435456,75.971815,0.588000000,,,,,,
+268435456,75.971848,0.592000000,,,,,,
+268435456,75.973111,0.596000000,,,,,,
+268435456,75.973426,0.600000000,,,,,,
+268435456,75.973806,0.604000000,,,,,,
+268435456,75.978345,0.608000000,,,,,,
+268435456,75.980145,0.612000000,,,,,,
+268435456,75.980256,0.616000000,,,,,,
+268435456,75.981774,0.620000000,,,,,,
+268435456,75.982565,0.624000000,,,,,,
+268435456,75.983059,0.628000000,,,,,,
+268435456,75.983095,0.632000000,,,,,,
+268435456,75.983431,0.636000000,,,,,,
+268435456,75.984338,0.640000000,,,,,,
+268435456,75.984633,0.644000000,,,,,,
+268435456,75.985405,0.648000000,,,,,,
+268435456,75.988601,0.652000000,,,,,,
+268435456,75.989084,0.656000000,,,,,,
+268435456,75.991308,0.660000000,,,,,,
+268435456,75.992049,0.664000000,,,,,,
+268435456,75.993523,0.668000000,,,,,,
+268435456,75.994009,0.672000000,,,,,,
+268435456,75.995017,0.676000000,,,,,,
+268435456,75.995292,0.680000000,,,,,,
+268435456,75.995532,0.684000000,,,,,,
+268435456,75.996089,0.688000000,,,,,,
+268435456,75.996185,0.692000000,,,,,,
+268435456,75.997054,0.696000000,,,,,,
+268435456,75.997860,0.700000000,,,,,,
+268435456,75.998400,0.704000000,,,,,,
+268435456,75.999001,0.708000000,,,,,,
+268435456,76.001579,0.712000000,,,,,,
+268435456,76.001728,0.716000000,,,,,,
+268435456,76.002165,0.720000000,,,,,,
+268435456,76.002620,0.724000000,,,,,,
+268435456,76.003951,0.728000000,,,,,,
+268435456,76.004664,0.732000000,,,,,,
+268435456,76.008331,0.736000000,,,,,,
+268435456,76.008535,0.740000000,,,,,,
+268435456,76.010914,0.744000000,,,,,,
+268435456,76.011860,0.748000000,,,,,,
+268435456,76.014370,0.752000000,,,,,,
+268435456,76.016216,0.756000000,,,,,,
+268435456,76.021417,0.760000000,,,,,,
+268435456,76.023083,0.764000000,,,,,,
+268435456,76.025911,0.768000000,,,,,,
+268435456,76.025913,0.772000000,,,,,,
+268435456,76.027671,0.776000000,,,,,,
+268435456,76.028649,0.780000000,,,,,,
+268435456,76.029471,0.784000000,,,,,,
+268435456,76.029556,0.788000000,,,,,,
+268435456,76.030169,0.792000000,,,,,,
+268435456,76.031758,0.796000000,,,,,,
+268435456,76.031856,0.800000000,,,,,,
+268435456,76.032574,0.804000000,,,,,,
+268435456,76.036695,0.808000000,,,,,,
+268435456,76.037162,0.812000000,,,,,,
+268435456,76.037687,0.816000000,,,,,,
+268435456,76.038361,0.820000000,,,,,,
+268435456,76.041268,0.824000000,,,,,,
+268435456,76.042892,0.828000000,,,,,,
+268435456,76.046155,0.832000000,,,,,,
+268435456,76.047651,0.836000000,,,,,,
+268435456,76.049011,0.840000000,,,,,,
+268435456,76.049702,0.844000000,,,,,,
+268435456,76.053718,0.848000000,,,,,,
+268435456,76.057441,0.852000000,,,,,,
+268435456,76.057676,0.856000000,,,,,,
+268435456,76.058683,0.860000000,,,,,,
+268435456,76.059867,0.864000000,,,,,,
+268435456,76.064119,0.868000000,,,,,,
+268435456,76.065526,0.872000000,,,,,,
+268435456,76.069161,0.876000000,,,,,,
+268435456,76.071374,0.880000000,,,,,,
+268435456,76.071932,0.884000000,,,,,,
+268435456,76.073912,0.888000000,,,,,,
+268435456,76.074732,0.892000000,,,,,,
+268435456,76.076120,0.896000000,,,,,,
+268435456,76.077462,0.900000000,,,,,,
+268435456,76.082383,0.904000000,,,,,,
+268435456,76.082779,0.908000000,,,,,,
+268435456,76.086843,0.912000000,,,,,,
+268435456,76.089063,0.916000000,,,,,,
+268435456,76.092040,0.920000000,,,,,,
+268435456,76.100015,0.924000000,,,,,,
+268435456,76.136260,0.928000000,,,,,,
+268435456,76.143618,0.932000000,,,,,,
+268435456,76.148593,0.936000000,,,,,,
+268435456,76.150701,0.940000000,,,,,,
+268435456,76.152128,0.944000000,,,,,,
+268435456,76.164365,0.948000000,,,,,,
+268435456,76.165286,0.952000000,,,,,,
+268435456,76.174402,0.956000000,,,,,,
+268435456,76.175882,0.960000000,,,,,,
+268435456,76.185055,0.964000000,,,,,,
+268435456,76.191642,0.968000000,,,,,,
+268435456,76.233302,0.972000000,,,,,,
+268435456,76.273814,0.976000000,,,,,,
+268435456,76.402889,0.980000000,,,,,,
+268435456,76.409073,0.984000000,,,,,,
+268435456,76.439632,0.988000000,,,,,,
+268435456,76.499941,0.992000000,,,,,,
+268435456,76.528376,0.996000000,,,,,,
+268435456,76.542458,1.000000000,,,,,,
+536870912,151.461418,0.004000000,,,,,,
+536870912,151.482343,0.008000000,,,,,,
+536870912,151.508455,0.012000000,,,,,,
+536870912,151.515583,0.016000000,,,,,,
+536870912,151.556464,0.020000000,,,,,,
+536870912,151.585246,0.024000000,,,,,,
+536870912,151.600119,0.028000000,,,,,,
+536870912,151.619298,0.032000000,,,,,,
+536870912,151.632119,0.036000000,,,,,,
+536870912,151.638768,0.040000000,,,,,,
+536870912,151.647442,0.044000000,,,,,,
+536870912,151.662576,0.048000000,,,,,,
+536870912,151.667385,0.052000000,,,,,,
+536870912,151.680429,0.056000000,,,,,,
+536870912,151.680850,0.060000000,,,,,,
+536870912,151.687191,0.064000000,,,,,,
+536870912,151.689672,0.068000000,,,,,,
+536870912,151.729637,0.072000000,,,,,,
+536870912,151.730783,0.076000000,,,,,,
+536870912,151.732209,0.080000000,,,,,,
+536870912,151.738827,0.084000000,,,,,,
+536870912,151.746833,0.088000000,,,,,,
+536870912,151.748460,0.092000000,,,,,,
+536870912,151.750796,0.096000000,,,,,,
+536870912,151.754629,0.100000000,,,,,,
+536870912,151.762490,0.104000000,,,,,,
+536870912,151.764448,0.108000000,,,,,,
+536870912,151.768354,0.112000000,,,,,,
+536870912,151.774617,0.116000000,,,,,,
+536870912,151.775341,0.120000000,,,,,,
+536870912,151.783765,0.124000000,,,,,,
+536870912,151.785160,0.128000000,,,,,,
+536870912,151.789160,0.132000000,,,,,,
+536870912,151.793648,0.136000000,,,,,,
+536870912,151.793903,0.140000000,,,,,,
+536870912,151.798384,0.144000000,,,,,,
+536870912,151.804126,0.148000000,,,,,,
+536870912,151.812490,0.152000000,,,,,,
+536870912,151.820139,0.156000000,,,,,,
+536870912,151.825749,0.160000000,,,,,,
+536870912,151.851951,0.164000000,,,,,,
+536870912,151.862094,0.168000000,,,,,,
+536870912,151.862982,0.172000000,,,,,,
+536870912,151.864138,0.176000000,,,,,,
+536870912,151.865671,0.180000000,,,,,,
+536870912,151.874660,0.184000000,,,,,,
+536870912,151.877445,0.188000000,,,,,,
+536870912,151.877926,0.192000000,,,,,,
+536870912,151.878428,0.196000000,,,,,,
+536870912,151.886746,0.200000000,,,,,,
+536870912,151.888235,0.204000000,,,,,,
+536870912,151.891764,0.208000000,,,,,,
+536870912,151.891919,0.212000000,,,,,,
+536870912,151.894583,0.216000000,,,,,,
+536870912,151.899552,0.220000000,,,,,,
+536870912,151.900969,0.224000000,,,,,,
+536870912,151.902732,0.228000000,,,,,,
+536870912,151.904871,0.232000000,,,,,,
+536870912,151.907566,0.236000000,,,,,,
+536870912,151.907617,0.240000000,,,,,,
+536870912,151.908540,0.244000000,,,,,,
+536870912,151.912127,0.248000000,,,,,,
+536870912,151.920341,0.252000000,,,,,,
+536870912,151.921286,0.256000000,,,,,,
+536870912,151.923296,0.260000000,,,,,,
+536870912,151.925585,0.264000000,,,,,,
+536870912,151.927175,0.268000000,,,,,,
+536870912,151.930858,0.272000000,,,,,,
+536870912,151.932362,0.276000000,,,,,,
+536870912,151.936625,0.280000000,,,,,,
+536870912,151.941408,0.284000000,,,,,,
+536870912,151.941673,0.288000000,,,,,,
+536870912,151.941896,0.292000000,,,,,,
+536870912,151.943781,0.296000000,,,,,,
+536870912,151.944149,0.300000000,,,,,,
+536870912,151.944780,0.304000000,,,,,,
+536870912,151.946195,0.308000000,,,,,,
+536870912,151.949954,0.312000000,,,,,,
+536870912,151.950758,0.316000000,,,,,,
+536870912,151.951733,0.320000000,,,,,,
+536870912,151.952332,0.324000000,,,,,,
+536870912,151.954134,0.328000000,,,,,,
+536870912,151.956004,0.332000000,,,,,,
+536870912,151.958682,0.336000000,,,,,,
+536870912,151.959088,0.340000000,,,,,,
+536870912,151.959446,0.344000000,,,,,,
+536870912,151.965022,0.348000000,,,,,,
+536870912,151.966985,0.352000000,,,,,,
+536870912,151.973116,0.356000000,,,,,,
+536870912,151.973312,0.360000000,,,,,,
+536870912,151.973784,0.364000000,,,,,,
+536870912,151.974030,0.368000000,,,,,,
+536870912,151.975324,0.372000000,,,,,,
+536870912,151.978152,0.376000000,,,,,,
+536870912,151.980956,0.380000000,,,,,,
+536870912,151.982608,0.384000000,,,,,,
+536870912,151.984099,0.388000000,,,,,,
+536870912,151.984214,0.392000000,,,,,,
+536870912,151.984935,0.396000000,,,,,,
+536870912,151.985497,0.400000000,,,,,,
+536870912,151.986687,0.404000000,,,,,,
+536870912,151.987343,0.408000000,,,,,,
+536870912,151.989431,0.412000000,,,,,,
+536870912,151.991452,0.416000000,,,,,,
+536870912,151.994020,0.420000000,,,,,,
+536870912,151.994694,0.424000000,,,,,,
+536870912,151.996736,0.428000000,,,,,,
+536870912,151.997090,0.432000000,,,,,,
+536870912,151.997514,0.436000000,,,,,,
+536870912,151.997900,0.440000000,,,,,,
+536870912,151.998980,0.444000000,,,,,,
+536870912,152.000034,0.448000000,,,,,,
+536870912,152.000930,0.452000000,,,,,,
+536870912,152.001163,0.456000000,,,,,,
+536870912,152.002701,0.460000000,,,,,,
+536870912,152.002940,0.464000000,,,,,,
+536870912,152.003078,0.468000000,,,,,,
+536870912,152.003100,0.472000000,,,,,,
+536870912,152.006018,0.476000000,,,,,,
+536870912,152.008954,0.480000000,,,,,,
+536870912,152.011069,0.484000000,,,,,,
+536870912,152.014566,0.488000000,,,,,,
+536870912,152.016888,0.492000000,,,,,,
+536870912,152.018687,0.496000000,,,,,,
+536870912,152.019247,0.500000000,,,,,,
+536870912,152.019426,0.504000000,,,,,,
+536870912,152.021569,0.508000000,,,,,,
+536870912,152.024043,0.512000000,,,,,,
+536870912,152.025735,0.516000000,,,,,,
+536870912,152.033896,0.520000000,,,,,,
+536870912,152.035869,0.524000000,,,,,,
+536870912,152.040590,0.528000000,,,,,,
+536870912,152.040636,0.532000000,,,,,,
+536870912,152.040699,0.536000000,,,,,,
+536870912,152.044326,0.540000000,,,,,,
+536870912,152.044377,0.544000000,,,,,,
+536870912,152.045137,0.548000000,,,,,,
+536870912,152.045562,0.552000000,,,,,,
+536870912,152.048473,0.556000000,,,,,,
+536870912,152.049742,0.560000000,,,,,,
+536870912,152.051871,0.564000000,,,,,,
+536870912,152.052957,0.568000000,,,,,,
+536870912,152.054675,0.572000000,,,,,,
+536870912,152.056294,0.576000000,,,,,,
+536870912,152.059386,0.580000000,,,,,,
+536870912,152.061167,0.584000000,,,,,,
+536870912,152.061232,0.588000000,,,,,,
+536870912,152.061772,0.592000000,,,,,,
+536870912,152.061946,0.596000000,,,,,,
+536870912,152.063127,0.600000000,,,,,,
+536870912,152.065138,0.604000000,,,,,,
+536870912,152.072505,0.608000000,,,,,,
+536870912,152.076449,0.612000000,,,,,,
+536870912,152.076619,0.616000000,,,,,,
+536870912,152.078143,0.620000000,,,,,,
+536870912,152.079568,0.624000000,,,,,,
+536870912,152.079866,0.628000000,,,,,,
+536870912,152.079929,0.632000000,,,,,,
+536870912,152.080008,0.636000000,,,,,,
+536870912,152.082684,0.640000000,,,,,,
+536870912,152.085524,0.644000000,,,,,,
+536870912,152.086365,0.648000000,,,,,,
+536870912,152.087801,0.652000000,,,,,,
+536870912,152.088811,0.656000000,,,,,,
+536870912,152.090964,0.660000000,,,,,,
+536870912,152.092559,0.664000000,,,,,,
+536870912,152.093440,0.668000000,,,,,,
+536870912,152.098393,0.672000000,,,,,,
+536870912,152.099328,0.676000000,,,,,,
+536870912,152.100342,0.680000000,,,,,,
+536870912,152.103928,0.684000000,,,,,,
+536870912,152.104255,0.688000000,,,,,,
+536870912,152.105646,0.692000000,,,,,,
+536870912,152.112153,0.696000000,,,,,,
+536870912,152.112257,0.700000000,,,,,,
+536870912,152.112431,0.704000000,,,,,,
+536870912,152.114022,0.708000000,,,,,,
+536870912,152.117687,0.712000000,,,,,,
+536870912,152.121930,0.716000000,,,,,,
+536870912,152.122342,0.720000000,,,,,,
+536870912,152.122596,0.724000000,,,,,,
+536870912,152.124496,0.728000000,,,,,,
+536870912,152.125268,0.732000000,,,,,,
+536870912,152.127151,0.736000000,,,,,,
+536870912,152.128250,0.740000000,,,,,,
+536870912,152.128833,0.744000000,,,,,,
+536870912,152.130282,0.748000000,,,,,,
+536870912,152.131799,0.752000000,,,,,,
+536870912,152.131946,0.756000000,,,,,,
+536870912,152.132468,0.760000000,,,,,,
+536870912,152.134651,0.764000000,,,,,,
+536870912,152.137172,0.768000000,,,,,,
+536870912,152.137183,0.772000000,,,,,,
+536870912,152.144452,0.776000000,,,,,,
+536870912,152.147627,0.780000000,,,,,,
+536870912,152.148704,0.784000000,,,,,,
+536870912,152.149999,0.788000000,,,,,,
+536870912,152.150466,0.792000000,,,,,,
+536870912,152.152287,0.796000000,,,,,,
+536870912,152.161986,0.800000000,,,,,,
+536870912,152.162654,0.804000000,,,,,,
+536870912,152.164139,0.808000000,,,,,,
+536870912,152.165427,0.812000000,,,,,,
+536870912,152.166860,0.816000000,,,,,,
+536870912,152.172141,0.820000000,,,,,,
+536870912,152.172485,0.824000000,,,,,,
+536870912,152.173773,0.828000000,,,,,,
+536870912,152.174356,0.832000000,,,,,,
+536870912,152.175012,0.836000000,,,,,,
+536870912,152.176356,0.840000000,,,,,,
+536870912,152.179383,0.844000000,,,,,,
+536870912,152.180292,0.848000000,,,,,,
+536870912,152.181012,0.852000000,,,,,,
+536870912,152.181276,0.856000000,,,,,,
+536870912,152.192370,0.860000000,,,,,,
+536870912,152.195695,0.864000000,,,,,,
+536870912,152.197716,0.868000000,,,,,,
+536870912,152.198869,0.872000000,,,,,,
+536870912,152.216502,0.876000000,,,,,,
+536870912,152.216925,0.880000000,,,,,,
+536870912,152.219691,0.884000000,,,,,,
+536870912,152.230277,0.888000000,,,,,,
+536870912,152.234001,0.892000000,,,,,,
+536870912,152.234099,0.896000000,,,,,,
+536870912,152.237943,0.900000000,,,,,,
+536870912,152.238140,0.904000000,,,,,,
+536870912,152.239226,0.908000000,,,,,,
+536870912,152.241111,0.912000000,,,,,,
+536870912,152.242185,0.916000000,,,,,,
+536870912,152.245439,0.920000000,,,,,,
+536870912,152.252548,0.924000000,,,,,,
+536870912,152.255310,0.928000000,,,,,,
+536870912,152.257373,0.932000000,,,,,,
+536870912,152.259017,0.936000000,,,,,,
+536870912,152.275324,0.940000000,,,,,,
+536870912,152.286065,0.944000000,,,,,,
+536870912,152.295221,0.948000000,,,,,,
+536870912,152.328334,0.952000000,,,,,,
+536870912,152.368227,0.956000000,,,,,,
+536870912,152.371670,0.960000000,,,,,,
+536870912,152.394197,0.964000000,,,,,,
+536870912,152.467993,0.968000000,,,,,,
+536870912,152.476231,0.972000000,,,,,,
+536870912,152.536005,0.976000000,,,,,,
+536870912,152.537084,0.980000000,,,,,,
+536870912,152.554971,0.984000000,,,,,,
+536870912,152.596268,0.988000000,,,,,,
+536870912,152.628778,0.992000000,,,,,,
+536870912,152.646935,0.996000000,,,,,,
+536870912,152.890176,1.000000000,,,,,,
+1073741824,303.494822,0.004000000,,,,,,
+1073741824,303.518270,0.008000000,,,,,,
+1073741824,303.519727,0.012000000,,,,,,
+1073741824,303.531749,0.016000000,,,,,,
+1073741824,303.572902,0.020000000,,,,,,
+1073741824,303.642096,0.024000000,,,,,,
+1073741824,303.667026,0.028000000,,,,,,
+1073741824,303.667061,0.032000000,,,,,,
+1073741824,303.691039,0.036000000,,,,,,
+1073741824,303.748416,0.040000000,,,,,,
+1073741824,303.791737,0.044000000,,,,,,
+1073741824,303.804097,0.048000000,,,,,,
+1073741824,303.818866,0.052000000,,,,,,
+1073741824,303.822131,0.056000000,,,,,,
+1073741824,303.845298,0.060000000,,,,,,
+1073741824,303.878260,0.064000000,,,,,,
+1073741824,303.881210,0.068000000,,,,,,
+1073741824,303.892315,0.072000000,,,,,,
+1073741824,303.892456,0.076000000,,,,,,
+1073741824,303.897844,0.080000000,,,,,,
+1073741824,303.910950,0.084000000,,,,,,
+1073741824,303.913502,0.088000000,,,,,,
+1073741824,303.920357,0.092000000,,,,,,
+1073741824,303.949881,0.096000000,,,,,,
+1073741824,303.965909,0.100000000,,,,,,
+1073741824,303.967665,0.104000000,,,,,,
+1073741824,303.970933,0.108000000,,,,,,
+1073741824,303.971712,0.112000000,,,,,,
+1073741824,303.971904,0.116000000,,,,,,
+1073741824,303.991757,0.120000000,,,,,,
+1073741824,303.998665,0.124000000,,,,,,
+1073741824,304.009636,0.128000000,,,,,,
+1073741824,304.013091,0.132000000,,,,,,
+1073741824,304.020842,0.136000000,,,,,,
+1073741824,304.026469,0.140000000,,,,,,
+1073741824,304.040947,0.144000000,,,,,,
+1073741824,304.049238,0.148000000,,,,,,
+1073741824,304.051388,0.152000000,,,,,,
+1073741824,304.060010,0.156000000,,,,,,
+1073741824,304.068011,0.160000000,,,,,,
+1073741824,304.075094,0.164000000,,,,,,
+1073741824,304.077773,0.168000000,,,,,,
+1073741824,304.079644,0.172000000,,,,,,
+1073741824,304.080550,0.176000000,,,,,,
+1073741824,304.081016,0.180000000,,,,,,
+1073741824,304.089104,0.184000000,,,,,,
+1073741824,304.104426,0.188000000,,,,,,
+1073741824,304.106350,0.192000000,,,,,,
+1073741824,304.107245,0.196000000,,,,,,
+1073741824,304.108343,0.200000000,,,,,,
+1073741824,304.112682,0.204000000,,,,,,
+1073741824,304.116462,0.208000000,,,,,,
+1073741824,304.126230,0.212000000,,,,,,
+1073741824,304.126416,0.216000000,,,,,,
+1073741824,304.127426,0.220000000,,,,,,
+1073741824,304.127512,0.224000000,,,,,,
+1073741824,304.136731,0.228000000,,,,,,
+1073741824,304.140806,0.232000000,,,,,,
+1073741824,304.141209,0.236000000,,,,,,
+1073741824,304.148301,0.240000000,,,,,,
+1073741824,304.149479,0.244000000,,,,,,
+1073741824,304.150057,0.248000000,,,,,,
+1073741824,304.157334,0.252000000,,,,,,
+1073741824,304.158985,0.256000000,,,,,,
+1073741824,304.160478,0.260000000,,,,,,
+1073741824,304.165681,0.264000000,,,,,,
+1073741824,304.166145,0.268000000,,,,,,
+1073741824,304.167507,0.272000000,,,,,,
+1073741824,304.168338,0.276000000,,,,,,
+1073741824,304.177352,0.280000000,,,,,,
+1073741824,304.180764,0.284000000,,,,,,
+1073741824,304.186071,0.288000000,,,,,,
+1073741824,304.186805,0.292000000,,,,,,
+1073741824,304.193402,0.296000000,,,,,,
+1073741824,304.195355,0.300000000,,,,,,
+1073741824,304.197283,0.304000000,,,,,,
+1073741824,304.198997,0.308000000,,,,,,
+1073741824,304.200595,0.312000000,,,,,,
+1073741824,304.201725,0.316000000,,,,,,
+1073741824,304.204159,0.320000000,,,,,,
+1073741824,304.205835,0.324000000,,,,,,
+1073741824,304.207424,0.328000000,,,,,,
+1073741824,304.208825,0.332000000,,,,,,
+1073741824,304.209069,0.336000000,,,,,,
+1073741824,304.210390,0.340000000,,,,,,
+1073741824,304.211598,0.344000000,,,,,,
+1073741824,304.212335,0.348000000,,,,,,
+1073741824,304.213074,0.352000000,,,,,,
+1073741824,304.214669,0.356000000,,,,,,
+1073741824,304.214965,0.360000000,,,,,,
+1073741824,304.221758,0.364000000,,,,,,
+1073741824,304.224169,0.368000000,,,,,,
+1073741824,304.226232,0.372000000,,,,,,
+1073741824,304.231022,0.376000000,,,,,,
+1073741824,304.231453,0.380000000,,,,,,
+1073741824,304.235616,0.384000000,,,,,,
+1073741824,304.238681,0.388000000,,,,,,
+1073741824,304.240816,0.392000000,,,,,,
+1073741824,304.241275,0.396000000,,,,,,
+1073741824,304.242881,0.400000000,,,,,,
+1073741824,304.243311,0.404000000,,,,,,
+1073741824,304.244543,0.408000000,,,,,,
+1073741824,304.250061,0.412000000,,,,,,
+1073741824,304.252160,0.416000000,,,,,,
+1073741824,304.254084,0.420000000,,,,,,
+1073741824,304.259633,0.424000000,,,,,,
+1073741824,304.260647,0.428000000,,,,,,
+1073741824,304.261167,0.432000000,,,,,,
+1073741824,304.264022,0.436000000,,,,,,
+1073741824,304.269327,0.440000000,,,,,,
+1073741824,304.274106,0.444000000,,,,,,
+1073741824,304.275377,0.448000000,,,,,,
+1073741824,304.276786,0.452000000,,,,,,
+1073741824,304.280059,0.456000000,,,,,,
+1073741824,304.281947,0.460000000,,,,,,
+1073741824,304.285651,0.464000000,,,,,,
+1073741824,304.287552,0.468000000,,,,,,
+1073741824,304.288334,0.472000000,,,,,,
+1073741824,304.292706,0.476000000,,,,,,
+1073741824,304.297726,0.480000000,,,,,,
+1073741824,304.299223,0.484000000,,,,,,
+1073741824,304.300637,0.488000000,,,,,,
+1073741824,304.301684,0.492000000,,,,,,
+1073741824,304.302638,0.496000000,,,,,,
+1073741824,304.310215,0.500000000,,,,,,
+1073741824,304.310980,0.504000000,,,,,,
+1073741824,304.311110,0.508000000,,,,,,
+1073741824,304.311802,0.512000000,,,,,,
+1073741824,304.315259,0.516000000,,,,,,
+1073741824,304.316574,0.520000000,,,,,,
+1073741824,304.317226,0.524000000,,,,,,
+1073741824,304.323866,0.528000000,,,,,,
+1073741824,304.325136,0.532000000,,,,,,
+1073741824,304.326965,0.536000000,,,,,,
+1073741824,304.327976,0.540000000,,,,,,
+1073741824,304.331279,0.544000000,,,,,,
+1073741824,304.332812,0.548000000,,,,,,
+1073741824,304.334088,0.552000000,,,,,,
+1073741824,304.337081,0.556000000,,,,,,
+1073741824,304.337858,0.560000000,,,,,,
+1073741824,304.338052,0.564000000,,,,,,
+1073741824,304.342942,0.568000000,,,,,,
+1073741824,304.348650,0.572000000,,,,,,
+1073741824,304.351642,0.576000000,,,,,,
+1073741824,304.358405,0.580000000,,,,,,
+1073741824,304.364420,0.584000000,,,,,,
+1073741824,304.366573,0.588000000,,,,,,
+1073741824,304.368843,0.592000000,,,,,,
+1073741824,304.371161,0.596000000,,,,,,
+1073741824,304.371543,0.600000000,,,,,,
+1073741824,304.371789,0.604000000,,,,,,
+1073741824,304.371991,0.608000000,,,,,,
+1073741824,304.372266,0.612000000,,,,,,
+1073741824,304.372855,0.616000000,,,,,,
+1073741824,304.374567,0.620000000,,,,,,
+1073741824,304.375171,0.624000000,,,,,,
+1073741824,304.377245,0.628000000,,,,,,
+1073741824,304.379358,0.632000000,,,,,,
+1073741824,304.381313,0.636000000,,,,,,
+1073741824,304.382950,0.640000000,,,,,,
+1073741824,304.383123,0.644000000,,,,,,
+1073741824,304.385431,0.648000000,,,,,,
+1073741824,304.394299,0.652000000,,,,,,
+1073741824,304.394578,0.656000000,,,,,,
+1073741824,304.395387,0.660000000,,,,,,
+1073741824,304.397552,0.664000000,,,,,,
+1073741824,304.400076,0.668000000,,,,,,
+1073741824,304.402517,0.672000000,,,,,,
+1073741824,304.406085,0.676000000,,,,,,
+1073741824,304.407502,0.680000000,,,,,,
+1073741824,304.408292,0.684000000,,,,,,
+1073741824,304.410107,0.688000000,,,,,,
+1073741824,304.411479,0.692000000,,,,,,
+1073741824,304.411683,0.696000000,,,,,,
+1073741824,304.413966,0.700000000,,,,,,
+1073741824,304.414116,0.704000000,,,,,,
+1073741824,304.415230,0.708000000,,,,,,
+1073741824,304.416386,0.712000000,,,,,,
+1073741824,304.422818,0.716000000,,,,,,
+1073741824,304.423955,0.720000000,,,,,,
+1073741824,304.429213,0.724000000,,,,,,
+1073741824,304.429378,0.728000000,,,,,,
+1073741824,304.429960,0.732000000,,,,,,
+1073741824,304.430056,0.736000000,,,,,,
+1073741824,304.434992,0.740000000,,,,,,
+1073741824,304.435541,0.744000000,,,,,,
+1073741824,304.441907,0.748000000,,,,,,
+1073741824,304.443787,0.752000000,,,,,,
+1073741824,304.448468,0.756000000,,,,,,
+1073741824,304.449877,0.760000000,,,,,,
+1073741824,304.450509,0.764000000,,,,,,
+1073741824,304.453208,0.768000000,,,,,,
+1073741824,304.454732,0.772000000,,,,,,
+1073741824,304.456816,0.776000000,,,,,,
+1073741824,304.458799,0.780000000,,,,,,
+1073741824,304.459350,0.784000000,,,,,,
+1073741824,304.460232,0.788000000,,,,,,
+1073741824,304.462360,0.792000000,,,,,,
+1073741824,304.462642,0.796000000,,,,,,
+1073741824,304.463275,0.800000000,,,,,,
+1073741824,304.467706,0.804000000,,,,,,
+1073741824,304.468931,0.808000000,,,,,,
+1073741824,304.470620,0.812000000,,,,,,
+1073741824,304.470683,0.816000000,,,,,,
+1073741824,304.470856,0.820000000,,,,,,
+1073741824,304.478559,0.824000000,,,,,,
+1073741824,304.484177,0.828000000,,,,,,
+1073741824,304.487554,0.832000000,,,,,,
+1073741824,304.487556,0.836000000,,,,,,
+1073741824,304.489179,0.840000000,,,,,,
+1073741824,304.493128,0.844000000,,,,,,
+1073741824,304.493209,0.848000000,,,,,,
+1073741824,304.495556,0.852000000,,,,,,
+1073741824,304.505412,0.856000000,,,,,,
+1073741824,304.510132,0.860000000,,,,,,
+1073741824,304.519814,0.864000000,,,,,,
+1073741824,304.525813,0.868000000,,,,,,
+1073741824,304.529635,0.872000000,,,,,,
+1073741824,304.539442,0.876000000,,,,,,
+1073741824,304.542426,0.880000000,,,,,,
+1073741824,304.545700,0.884000000,,,,,,
+1073741824,304.545976,0.888000000,,,,,,
+1073741824,304.546400,0.892000000,,,,,,
+1073741824,304.568427,0.896000000,,,,,,
+1073741824,304.570129,0.900000000,,,,,,
+1073741824,304.575372,0.904000000,,,,,,
+1073741824,304.577465,0.908000000,,,,,,
+1073741824,304.577650,0.912000000,,,,,,
+1073741824,304.587135,0.916000000,,,,,,
+1073741824,304.599477,0.920000000,,,,,,
+1073741824,304.603672,0.924000000,,,,,,
+1073741824,304.611290,0.928000000,,,,,,
+1073741824,304.620853,0.932000000,,,,,,
+1073741824,304.631014,0.936000000,,,,,,
+1073741824,304.631545,0.940000000,,,,,,
+1073741824,304.634746,0.944000000,,,,,,
+1073741824,304.653813,0.948000000,,,,,,
+1073741824,304.654159,0.952000000,,,,,,
+1073741824,304.654532,0.956000000,,,,,,
+1073741824,304.662704,0.960000000,,,,,,
+1073741824,304.670180,0.964000000,,,,,,
+1073741824,304.674118,0.968000000,,,,,,
+1073741824,304.678993,0.972000000,,,,,,
+1073741824,304.679231,0.976000000,,,,,,
+1073741824,304.685333,0.980000000,,,,,,
+1073741824,304.716076,0.984000000,,,,,,
+1073741824,304.743945,0.988000000,,,,,,
+1073741824,304.776277,0.992000000,,,,,,
+1073741824,305.132888,0.996000000,,,,,,
+1073741824,305.173668,1.000000000,,,,,,