summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSiho Shin <victory8500@naver.com>2026-06-27 08:59:14 +0900
committerSiho Shin <victory8500@naver.com>2026-06-27 08:59:14 +0900
commit5d2722de9290472bb8fbd120d1ec506f7765e209 (patch)
tree1254b5f3542f528871bcfdd0356f81095e66d480
-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
-rw-r--r--dma/.gitignore4
-rw-r--r--dma/Makefile38
-rwxr-xr-xdma/analyze_bw.py345
-rwxr-xr-xdma/analyze_time.py332
-rw-r--r--dma/bw_VANILLA.csv1348
-rw-r--r--dma/bw_all.CSV4
-rwxr-xr-xdma/combine.py169
-rwxr-xr-xdma/doca_dma_host_recvbin0 -> 30544 bytes
-rw-r--r--dma/host_recv.c251
-rwxr-xr-xdma/run.sh219
-rwxr-xr-xdma/sum.sh22
-rw-r--r--dma/times_VANILLA.csv1348
-rw-r--r--dma/times_all.CSV1348
28 files changed, 8728 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,,,,,,
diff --git a/dma/.gitignore b/dma/.gitignore
new file mode 100644
index 0000000..5d94054
--- /dev/null
+++ b/dma/.gitignore
@@ -0,0 +1,4 @@
+bins/
+logs/
+summary/
+*.png
diff --git a/dma/Makefile b/dma/Makefile
new file mode 100644
index 0000000..7400791
--- /dev/null
+++ b/dma/Makefile
@@ -0,0 +1,38 @@
+CC ?= gcc
+
+TARGET := doca_dma_host_recv
+SRCS := host_recv.c
+
+CFLAGS += -O2 -g -Wall -Wextra -std=gnu11
+CFLAGS += -Wno-deprecated-declarations
+CFLAGS += -DALLOW_EXPERIMENTAL_API
+
+# Prefer pkg-config from the upgraded DOCA installation.
+PKGCONFIG_PKGS := doca-common doca-dma
+
+PKG_CFLAGS := $(shell pkg-config --cflags $(PKGCONFIG_PKGS) 2>/dev/null)
+PKG_LIBS := $(shell pkg-config --libs $(PKGCONFIG_PKGS) 2>/dev/null)
+
+# Fallback for common DOCA 2.9 host install paths.
+ifeq ($(strip $(PKG_CFLAGS)),)
+CFLAGS += -I/opt/mellanox/doca/include
+else
+CFLAGS += $(PKG_CFLAGS)
+endif
+
+ifeq ($(strip $(PKG_LIBS)),)
+LDFLAGS += -L/opt/mellanox/doca/lib/x86_64-linux-gnu
+LDLIBS += -ldoca_dma -ldoca_common
+else
+LDLIBS += $(PKG_LIBS)
+endif
+
+LDLIBS += -lpthread -lrt
+
+all: $(TARGET)
+
+$(TARGET): $(SRCS)
+ $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS) $(LDLIBS)
+
+clean:
+ rm -f $(TARGET) descriptor.bin buffer.json
diff --git a/dma/analyze_bw.py b/dma/analyze_bw.py
new file mode 100755
index 0000000..e4fab84
--- /dev/null
+++ b/dma/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/dma/analyze_time.py b/dma/analyze_time.py
new file mode 100755
index 0000000..8f467e4
--- /dev/null
+++ b/dma/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/dma/bw_VANILLA.csv b/dma/bw_VANILLA.csv
new file mode 100644
index 0000000..f22505c
--- /dev/null
+++ b/dma/bw_VANILLA.csv
@@ -0,0 +1,1348 @@
+bytes,bw_KiBps
+536870912,8257831.042
+536870912,8324090.175
+536870912,8360060.467
+536870912,8314351.529
+536870912,8326655.816
+536870912,8341155.367
+536870912,8368521.941
+536870912,8312152.950
+536870912,8377241.223
+536870912,8304275.491
+536870912,8318322.698
+536870912,8364311.615
+536870912,8356575.042
+536870912,8347991.216
+536870912,8355967.319
+536870912,8255221.063
+536870912,8362123.349
+536870912,8379997.653
+536870912,8390937.190
+536870912,8370275.089
+536870912,8362438.651
+536870912,8418439.177
+536870912,8351669.834
+536870912,8348329.381
+536870912,8336122.704
+536870912,8376701.290
+536870912,8382815.273
+536870912,8400686.709
+536870912,8364877.312
+536870912,8394622.445
+536870912,8319344.862
+536870912,8346046.501
+536870912,8340120.541
+536870912,8376577.492
+536870912,8383012.038
+536870912,8354220.558
+536870912,8384682.359
+536870912,8428112.925
+536870912,8370655.288
+536870912,8352115.669
+536870912,8404573.462
+536870912,8355693.120
+536870912,8362073.202
+536870912,8314402.820
+536870912,8330648.016
+536870912,8369029.559
+536870912,8318552.082
+536870912,8364983.146
+536870912,8338038.530
+536870912,8324324.239
+536870912,8298267.352
+536870912,8355023.612
+536870912,8315627.789
+536870912,8352084.136
+536870912,8357312.339
+536870912,8378850.058
+536870912,8242566.989
+536870912,8379995.376
+536870912,8341113.433
+536870912,8327395.779
+536870912,8400024.238
+536870912,8414188.344
+536870912,8350410.284
+536870912,8363149.502
+536870912,8399987.362
+536870912,8396447.595
+536870912,8357981.947
+536870912,8391470.901
+536870912,8380716.851
+536870912,8364449.729
+536870912,8371968.545
+536870912,8379919.967
+536870912,8358402.605
+536870912,8412983.712
+536870912,8329295.288
+536870912,8350437.416
+536870912,8319960.340
+536870912,8358098.133
+536870912,8422333.043
+536870912,8422126.987
+536870912,8412045.844
+536870912,8397655.163
+536870912,8263298.841
+536870912,8374916.151
+536870912,8414252.217
+536870912,8310675.801
+536870912,8377365.174
+536870912,8350365.198
+536870912,8373457.267
+536870912,8382275.560
+536870912,8366550.159
+536870912,8347588.352
+536870912,8375883.090
+536870912,8374086.530
+536870912,8382372.856
+536870912,8361793.668
+536870912,8299831.935
+536870912,8348445.831
+536870912,8344539.618
+536870912,8354680.778
+536870912,8380529.840
+536870912,8404366.254
+536870912,8411030.596
+536870912,8367598.900
+536870912,8392297.523
+536870912,8378429.883
+536870912,8334894.208
+536870912,8396829.638
+536870912,8337279.837
+536870912,8360287.359
+536870912,8329722.327
+536870912,8418495.950
+536870912,8348249.756
+536870912,8369935.544
+536870912,8385466.201
+536870912,8391547.727
+536870912,8340218.055
+536870912,8373278.470
+536870912,8432395.473
+536870912,8379994.037
+536870912,8420860.164
+536870912,8319162.295
+536870912,8408295.115
+536870912,8323622.747
+536870912,8359972.619
+536870912,8338512.883
+536870912,8374087.065
+536870912,8382192.605
+536870912,8345185.928
+536870912,8317876.637
+536870912,8375973.146
+536870912,8397669.018
+536870912,8378831.178
+536870912,8334130.390
+536870912,8378805.870
+536870912,8374248.776
+536870912,8249858.189
+536870912,8354606.356
+536870912,8352538.797
+536870912,8394292.615
+536870912,8311283.541
+536870912,8378482.905
+536870912,8356724.888
+536870912,8386034.494
+536870912,8297776.555
+536870912,8386735.007
+536870912,8370139.455
+536870912,8369730.040
+536870912,8388756.984
+536870912,8344130.049
+536870912,8351192.254
+536870912,8388136.922
+536870912,8347594.199
+536870912,8356126.866
+536870912,8401569.538
+536870912,8362957.538
+536870912,8300171.860
+536870912,8411138.007
+536870912,8304405.185
+536870912,8381946.565
+536870912,8317394.073
+536870912,8384244.437
+536870912,8376253.763
+536870912,8349032.118
+536870912,8354956.241
+536870912,8380743.510
+536870912,8331140.062
+536870912,8350979.555
+536870912,8418193.438
+536870912,8382958.557
+536870912,8386416.931
+536870912,8395410.432
+536870912,8378136.134
+536870912,8318918.886
+536870912,8410978.376
+536870912,8333427.112
+536870912,8221319.409
+536870912,8364432.915
+536870912,8345958.417
+536870912,8363286.911
+536870912,8332156.506
+536870912,8382230.531
+536870912,8346052.613
+536870912,8410250.468
+536870912,8353757.727
+536870912,8404916.766
+536870912,8416947.661
+536870912,8376978.208
+536870912,8371691.424
+536870912,8396704.976
+536870912,8414777.959
+536870912,8353244.373
+536870912,8318754.025
+536870912,8331911.277
+536870912,8382953.195
+536870912,8338860.360
+536870912,8319379.185
+536870912,8398750.062
+536870912,8330268.928
+536870912,8370850.680
+536870912,8361069.313
+536870912,8365935.779
+536870912,8364960.057
+536870912,8377522.059
+536870912,8353447.870
+536870912,8375182.649
+536870912,8321782.093
+536870912,8350677.486
+536870912,8263340.387
+536870912,8332756.665
+536870912,8417697.272
+536870912,8393538.297
+536870912,8347900.432
+536870912,8363735.188
+536870912,8324503.463
+536870912,8304934.391
+536870912,8299269.616
+536870912,8402484.468
+536870912,8347844.208
+536870912,8296357.548
+536870912,8396377.672
+536870912,8377041.517
+536870912,8313785.527
+536870912,8371716.956
+536870912,8378795.157
+536870912,8340748.783
+536870912,8360697.317
+536870912,8364660.846
+536870912,8391967.338
+536870912,8350317.851
+536870912,8350243.774
+536870912,8439313.420
+536870912,8377839.059
+536870912,8399200.938
+536870912,8379663.882
+536870912,8379824.067
+536870912,8367443.188
+536870912,8392166.950
+536870912,8357897.607
+536870912,8324951.161
+536870912,8365745.555
+536870912,8357349.640
+536870912,8364057.284
+536870912,8398727.593
+536870912,8425546.675
+536870912,8382572.414
+536870912,8374361.937
+536870912,8348691.105
+536870912,8373834.011
+536870912,8391275.889
+536870912,8391399.718
+536870912,8392276.969
+536870912,8417686.190
+536870912,8352077.882
+1073741824,8138089.354
+1073741824,8177392.302
+1073741824,8169099.589
+1073741824,8105907.473
+1073741824,8194548.953
+1073741824,8139123.611
+1073741824,8126474.963
+1073741824,8162121.788
+1073741824,8163171.251
+1073741824,8171121.062
+1073741824,8186016.661
+1073741824,8165725.057
+1073741824,8063273.306
+1073741824,8178658.117
+1073741824,8202737.897
+1073741824,8148178.333
+1073741824,8162500.532
+1073741824,8193645.835
+1073741824,8167616.538
+1073741824,8186603.110
+1073741824,8169359.004
+1073741824,8186279.965
+1073741824,8155635.043
+1073741824,8140700.738
+1073741824,8165438.021
+1073741824,8176268.030
+1073741824,8181085.154
+1073741824,8180478.244
+1073741824,8165952.907
+1073741824,8168923.620
+1073741824,8192217.414
+1073741824,8132915.134
+1073741824,8173146.021
+1073741824,8164068.362
+1073741824,8134432.873
+1073741824,8171028.226
+1073741824,8152795.182
+1073741824,8193753.719
+1073741824,8163280.686
+1073741824,8194031.608
+1073741824,8144737.425
+1073741824,8145727.179
+1073741824,8144849.909
+1073741824,8165100.459
+1073741824,8094435.680
+1073741824,8089804.034
+1073741824,8168444.440
+1073741824,8192444.184
+1073741824,8130694.059
+1073741824,8160305.628
+1073741824,8136433.941
+1073741824,8186404.081
+1073741824,8184251.560
+1073741824,8130386.723
+1073741824,8210161.262
+1073741824,8185030.255
+1073741824,8141485.327
+1073741824,8178298.028
+1073741824,8174079.416
+1073741824,8167512.076
+1073741824,8074632.442
+1073741824,8148020.993
+1073741824,8163035.827
+1073741824,8169272.764
+1073741824,8171761.611
+1073741824,8159402.359
+1073741824,8173463.224
+1073741824,8169373.580
+1073741824,8140830.176
+1073741824,8183192.583
+1073741824,8170229.721
+1073741824,8154262.899
+1073741824,8170541.350
+1073741824,8168825.107
+1073741824,8173503.362
+1073741824,8157012.915
+1073741824,8172080.426
+1073741824,8153071.758
+1073741824,8223132.523
+1073741824,8136738.703
+1073741824,8162757.495
+1073741824,8163236.009
+1073741824,8184380.917
+1073741824,8142153.798
+1073741824,8166037.805
+1073741824,8160535.906
+1073741824,8079963.292
+1073741824,8143988.642
+1073741824,8166006.262
+1073741824,8164743.980
+1073741824,8192553.573
+1073741824,8156989.056
+1073741824,8179597.940
+1073741824,8163754.811
+1073741824,8146153.195
+1073741824,8146235.531
+1073741824,8186722.954
+1073741824,8197497.639
+1073741824,8160476.081
+1073741824,8176191.780
+1073741824,8144256.017
+1073741824,8138055.879
+1073741824,8146826.167
+1073741824,8165232.264
+1073741824,8162361.318
+1073741824,8186293.833
+1073741824,8173794.278
+1073741824,8194762.275
+1073741824,8152014.750
+1073741824,8166369.339
+1073741824,8176738.373
+1073741824,8160695.381
+1073741824,8152224.089
+1073741824,8196125.020
+1073741824,8180352.201
+1073741824,8194009.837
+1073741824,8170316.554
+1073741824,8139935.699
+1073741824,8112386.622
+1073741824,8185530.361
+1073741824,8159146.115
+1073741824,8155273.744
+1073741824,8188250.357
+1073741824,8210284.560
+1073741824,8134979.577
+1073741824,8157042.294
+1073741824,8184451.698
+1073741824,8154047.052
+1073741824,8167067.538
+1073741824,8149645.211
+1073741824,8150179.582
+1073741824,8190519.052
+1073741824,8168482.810
+1073741824,8147487.095
+1073741824,8184329.237
+1073741824,8172219.526
+1073741824,8156156.877
+1073741824,8154281.479
+1073741824,8180832.780
+1073741824,8175322.597
+1073741824,8193515.288
+1073741824,8177347.216
+1073741824,8151470.000
+1073741824,8090985.750
+1073741824,8170389.766
+1073741824,8192601.516
+1073741824,8159940.550
+1073741824,8171842.682
+1073741824,8150169.763
+1073741824,8195149.691
+1073741824,8187631.771
+1073741824,8165567.484
+1073741824,8068700.672
+1073741824,8162788.123
+1073741824,8172207.870
+1073741824,8153421.386
+1073741824,8175524.466
+1073741824,8119439.739
+1073741824,8186656.288
+1073741824,8188370.888
+1073741824,8161583.500
+1073741824,8203275.659
+1073741824,8173708.517
+1073741824,8164901.712
+1073741824,8167985.230
+1073741824,8172547.294
+1073741824,8158827.673
+1073741824,8171398.309
+1073741824,8161545.258
+1073741824,8164635.141
+1073741824,8161946.819
+1073741824,8121607.804
+1073741824,8186283.799
+1073741824,8199395.342
+1073741824,8191861.890
+1073741824,8150369.948
+1073741824,8160413.462
+1073741824,8155358.484
+1073741824,8189579.084
+1073741824,8205448.923
+1073741824,8169094.434
+1073741824,8082447.476
+1073741824,8170517.794
+1073741824,8161082.504
+1073741824,8159377.407
+1073741824,8156415.915
+1073741824,8181151.282
+1073741824,8136103.696
+1073741824,8170048.802
+1073741824,8184267.082
+1073741824,8061340.037
+1073741824,8146205.849
+1073741824,8151415.123
+1073741824,8175034.759
+1073741824,8196191.776
+1073741824,8174195.134
+1073741824,8178864.424
+1073741824,8159067.010
+1073741824,8146504.762
+1073741824,8187553.199
+1073741824,8162514.066
+2147479552,7947126.214
+2147479552,7830991.249
+2147479552,8008948.981
+2147479552,8000980.652
+2147479552,7896117.441
+2147479552,8009715.263
+2147479552,7992830.209
+2147479552,7946225.319
+2147479552,7865214.278
+2147479552,8007017.638
+2147479552,8016693.209
+2147479552,7938012.172
+2147479552,7980189.400
+2147479552,7974511.109
+2147479552,8012179.242
+2147479552,7868989.823
+2147479552,8000277.903
+2147479552,7989977.945
+2147479552,8007474.704
+2147479552,8027702.523
+2147479552,7973356.133
+2147479552,7934579.157
+2147479552,7991086.129
+2147479552,8018982.870
+2147479552,7974215.830
+2147479552,8018838.973
+2147479552,7926990.292
+2147479552,7987530.155
+2147479552,7884838.470
+2147479552,7979759.401
+2147479552,8003693.270
+2147479552,7977333.738
+2147479552,7927892.195
+2147479552,7998116.468
+2147479552,7993422.788
+2147479552,8008514.837
+2147479552,8006450.461
+2147479552,7945386.006
+2147479552,7995881.874
+2147479552,7996968.246
+2147479552,8016157.016
+2147479552,8020270.325
+2147479552,7932353.038
+2147479552,8026109.338
+2147479552,7974138.451
+2147479552,8011087.418
+2147479552,8018429.172
+2147479552,7980079.080
+2147479552,7975050.448
+2147479552,8020054.366
+2147479552,7988862.582
+2147479552,8010601.575
+2147479552,7984622.573
+2147479552,7937457.852
+2147479552,8013796.881
+2147479552,7872770.945
+2147479552,8006195.847
+2147479552,8008850.863
+2147479552,7998459.766
+2147479552,7936888.470
+2147479552,8005590.218
+2147479552,7996606.780
+2147479552,8018439.595
+2147479552,7892034.858
+2147479552,7999417.125
+2147479552,7979929.197
+2147479552,7999268.346
+2147479552,8015869.828
+2147479552,8007620.334
+2147479552,8005805.185
+2147479552,7920126.228
+2147479552,7995110.891
+2147479552,7981652.097
+2147479552,7998705.438
+2147479552,7970318.000
+2147479552,7882859.428
+2147479552,8014648.689
+2147479552,8003171.979
+2147479552,7988015.334
+2147479552,7833679.173
+2147479552,8008951.734
+2147479552,8006672.199
+2147479552,7991080.465
+2147479552,7970719.112
+2147479552,7924635.887
+2147479552,7994571.699
+2147479552,8006554.389
+2147479552,7985302.202
+2147479552,7971576.967
+2147479552,7923306.476
+2147479552,8003718.593
+2147479552,7905757.297
+2147479552,8013574.350
+2147479552,7939932.009
+2147479552,8000819.788
+2147479552,7974226.018
+2147479552,7967589.450
+2147479552,7970503.541
+2147479552,7975902.835
+2147479552,8012434.115
+2147479552,7984418.834
+2147479552,7976403.136
+2147479552,8007045.520
+2147479552,7935571.131
+2147479552,7975156.293
+2147479552,8000446.559
+2147479552,8003289.383
+2147479552,7959525.168
+2147479552,7967631.890
+2147479552,7986418.000
+2147479552,7983242.875
+2147479552,7996949.766
+2147479552,7945887.814
+2147479552,7996839.164
+2147479552,7883464.232
+2147479552,7917027.853
+2147479552,7942927.071
+2147479552,7897486.903
+2147479552,7995260.125
+2147479552,7990338.477
+2147479552,8004819.195
+2147479552,7880098.747
+2147479552,7990653.645
+2147479552,7982676.538
+2147479552,7984842.678
+2147479552,7902720.450
+2147479552,7937538.186
+2147479552,8018753.489
+2147479552,7900726.589
+2147479552,8011971.371
+2147479552,7980681.583
+2147479552,8001119.116
+2147479552,7942218.541
+2147479552,7978663.645
+2147479552,7899568.903
+2147479552,7861320.676
+2147479552,7996047.570
+2147479552,7947567.070
+2147479552,8000349.564
+2147479552,8001487.767
+2147479552,7995970.803
+2147479552,7827102.177
+2147479552,7896470.741
+2147479552,7984024.520
+2147479552,8006597.245
+2147479552,8009409.724
+2147479552,7933554.178
+2147479552,7950081.138
+2147479552,7986958.252
+2147479552,7984203.190
+2147479552,8002735.834
+2147479552,8006604.582
+2147479552,7997890.719
+2147479552,8000348.343
+2147479552,7946083.629
+2147479552,8000179.936
+2147479552,7988375.262
+2147479552,7980154.296
+2147479552,7908920.854
+2147479552,8001382.535
+2147479552,7991281.468
+2147479552,8003794.164
+2147479552,7861265.127
+2147479552,7990350.137
+2147479552,7973930.123
+2147479552,8014293.709
+2147479552,7991292.522
+2147479552,7994522.176
+2147479552,7933174.864
+2147479552,8013732.819
+2147479552,7994925.452
+2147479552,8031332.963
+2147479552,7910863.557
+2147479552,8002279.310
+2147479552,7972722.728
+2147479552,7965069.199
+2147479552,7967829.505
+2147479552,7966056.707
+2147479552,8019600.524
+2147479552,7982388.614
+2147479552,7908450.992
+2147479552,8018495.149
+2147479552,7982369.200
+2147479552,7976839.965
+2147479552,7933725.795
+2147479552,8010886.733
+2147479552,7912879.556
+2147479552,8000956.751
+2147479552,8013436.465
+2147479552,8009547.777
+2147479552,7931425.041
+2147479552,8000160.495
+2147479552,8011892.462
+2147479552,8007611.987
+2147479552,8002130.424
+2147479552,7915497.321
+2147479552,8008949.807
+2147479552,7995144.907
+536870912,8297726.257
+536870912,8329119.827
+536870912,8358219.253
+536870912,8414840.896
+536870912,8357399.731
+536870912,8336335.972
+536870912,8321540.247
+536870912,8286800.873
+536870912,8362168.162
+536870912,8376162.631
+536870912,8357669.112
+536870912,8369541.248
+536870912,8395280.569
+536870912,8360743.848
+536870912,8403614.705
+536870912,8414502.723
+536870912,8405916.252
+536870912,8355010.697
+536870912,8372292.612
+536870912,8379949.032
+536870912,8372315.340
+536870912,8364418.103
+536870912,8381942.545
+536870912,8389321.965
+536870912,8407988.750
+536870912,8338789.271
+536870912,8406029.867
+536870912,8379301.345
+536870912,8347195.360
+536870912,8398977.176
+536870912,8420189.909
+536870912,8353653.108
+536870912,8360287.759
+536870912,8356341.691
+536870912,8419746.378
+536870912,8368900.645
+536870912,8361595.631
+536870912,8345109.019
+536870912,8371805.986
+536870912,8386092.575
+536870912,8348197.515
+536870912,8336405.694
+536870912,8425796.364
+536870912,8389089.601
+536870912,8417867.565
+536870912,8349642.290
+536870912,8397103.719
+536870912,8395858.126
+536870912,8357745.720
+536870912,8378779.089
+536870912,8371087.916
+536870912,8337224.153
+536870912,8434736.833
+536870912,8400962.927
+536870912,8364051.546
+536870912,8359437.575
+536870912,8383428.651
+536870912,8433608.521
+536870912,8399843.227
+536870912,8358140.372
+536870912,8398175.605
+536870912,8368244.246
+536870912,8361196.786
+536870912,8380838.091
+536870912,8362211.242
+536870912,8364237.689
+536870912,8387494.812
+536870912,8335830.456
+536870912,8354360.203
+536870912,8363657.937
+536870912,8385410.006
+536870912,8374072.753
+536870912,8346840.411
+536870912,8312084.029
+536870912,8371472.065
+536870912,8363742.660
+536870912,8406858.955
+536870912,8408712.626
+536870912,8333298.365
+536870912,8435537.663
+536870912,8364845.281
+536870912,8376712.532
+536870912,8406175.697
+536870912,8364534.201
+536870912,8385997.070
+536870912,8400531.647
+536870912,8379733.125
+536870912,8431229.416
+536870912,8204954.212
+536870912,8370098.431
+536870912,8378620.684
+536870912,8387569.418
+536870912,8346932.899
+536870912,8384022.409
+536870912,8370418.879
+536870912,8368334.137
+536870912,8331419.537
+536870912,8347124.527
+536870912,8396763.609
+536870912,8370911.625
+536870912,8377613.354
+536870912,8378574.489
+536870912,8366011.737
+536870912,8334095.150
+536870912,8348366.602
+536870912,8353517.479
+536870912,8318633.518
+536870912,8357358.966
+536870912,8339111.703
+536870912,8431833.220
+536870912,8316449.692
+536870912,8382440.268
+536870912,8358427.923
+536870912,8370531.937
+536870912,8382461.711
+536870912,8351256.903
+536870912,8376703.967
+536870912,8376585.121
+536870912,8384669.084
+536870912,8387783.447
+536870912,8366347.492
+536870912,8411992.397
+536870912,8349625.934
+536870912,8392767.859
+536870912,8437106.920
+536870912,8391246.342
+536870912,8348152.320
+536870912,8403981.639
+536870912,8357803.010
+536870912,8366263.918
+536870912,8388316.087
+536870912,8374524.462
+536870912,8366404.900
+536870912,8394617.068
+536870912,8397475.465
+536870912,8383837.529
+536870912,8370766.481
+536870912,8352748.914
+536870912,8361183.985
+536870912,8347421.023
+536870912,8349302.556
+536870912,8368650.977
+536870912,8330391.889
+536870912,8382899.983
+536870912,8369513.724
+536870912,8386597.095
+536870912,8438134.585
+536870912,8350253.615
+536870912,8366252.303
+536870912,8380905.077
+536870912,8338769.907
+536870912,8263838.061
+536870912,8374662.111
+536870912,8401913.001
+536870912,8385186.173
+536870912,8377838.122
+536870912,8384051.905
+536870912,8386658.672
+536870912,8362595.511
+536870912,8357858.169
+536870912,8379260.633
+536870912,8389537.024
+536870912,8304545.274
+536870912,8389956.971
+536870912,8385054.883
+536870912,8416118.203
+536870912,8370145.602
+536870912,8334803.443
+536870912,8341427.684
+536870912,8337381.395
+536870912,8336307.209
+536870912,8350480.774
+536870912,8343804.042
+536870912,8377532.768
+536870912,8390205.629
+536870912,8325661.867
+536870912,8382035.947
+536870912,8326395.835
+536870912,8362346.219
+536870912,8286901.597
+536870912,8279314.165
+536870912,8374263.490
+536870912,8414728.529
+536870912,8390042.362
+536870912,8310930.322
+536870912,8390255.175
+536870912,8391144.274
+536870912,8393546.091
+536870912,8411403.577
+536870912,8383280.392
+536870912,8377631.694
+536870912,8395649.599
+536870912,8340726.624
+536870912,8363368.558
+536870912,8369033.968
+536870912,8418998.835
+536870912,8363262.764
+536870912,8358238.441
+536870912,8384050.564
+536870912,8410748.319
+536870912,8342035.550
+536870912,8353805.645
+536870912,8373079.889
+536870912,8341745.542
+536870912,8381808.677
+536870912,8381610.629
+536870912,8380764.543
+536870912,8322230.951
+536870912,8359038.536
+536870912,8400457.753
+536870912,8410784.345
+536870912,8363107.347
+536870912,8339816.471
+536870912,8435068.492
+536870912,8389056.445
+536870912,8383005.738
+536870912,8384873.176
+536870912,8397375.935
+536870912,8344473.612
+536870912,8353101.704
+536870912,8361585.363
+536870912,8323990.262
+536870912,8384113.981
+536870912,8423037.334
+536870912,8391526.237
+536870912,8400320.466
+536870912,8368454.352
+536870912,8395609.266
+536870912,8359098.510
+536870912,8333326.976
+536870912,8412438.352
+536870912,8349328.351
+536870912,8336571.653
+536870912,8367998.356
+536870912,8373028.273
+536870912,8365465.509
+536870912,8338848.556
+536870912,8364488.028
+536870912,8373630.857
+536870912,8375956.955
+536870912,8383128.519
+536870912,8370995.292
+536870912,8368521.941
+536870912,8404117.698
+536870912,8365619.679
+536870912,8396772.619
+1073741824,8106935.885
+1073741824,8163232.196
+1073741824,8186321.890
+1073741824,8140414.069
+1073741824,8133332.430
+1073741824,8146613.688
+1073741824,8166003.146
+1073741824,8171050.321
+1073741824,8174432.187
+1073741824,8174376.746
+1073741824,8187120.796
+1073741824,8179944.615
+1073741824,8198790.648
+1073741824,8088146.431
+1073741824,8212268.713
+1073741824,8146527.231
+1073741824,8140647.839
+1073741824,8165594.763
+1073741824,8163528.165
+1073741824,8150605.431
+1073741824,8192582.121
+1073741824,8103913.875
+1073741824,8181810.769
+1073741824,8133931.293
+1073741824,8141017.324
+1073741824,8151947.824
+1073741824,8178590.370
+1073741824,8163575.133
+1073741824,8187417.860
+1073741824,8165247.714
+1073741824,8192821.970
+1073741824,8177847.915
+1073741824,8200999.957
+1073741824,8113109.894
+1073741824,8134005.683
+1073741824,8157734.710
+1073741824,8094886.469
+1073741824,8172987.970
+1073741824,8152461.644
+1073741824,8099153.894
+1073741824,8199905.285
+1073741824,8162937.201
+1073741824,8188245.114
+1073741824,8168747.087
+1073741824,8134112.824
+1073741824,8156418.960
+1073741824,8174455.957
+1073741824,8200315.953
+1073741824,8168047.074
+1073741824,8161488.340
+1073741824,8182508.673
+1073741824,8164306.545
+1073741824,8172004.255
+1073741824,8189975.093
+1073741824,8173512.600
+1073741824,8179491.513
+1073741824,8178463.557
+1073741824,8151221.603
+1073741824,8163997.171
+1073741824,8176074.412
+1073741824,8181150.005
+1073741824,8166385.239
+1073741824,8179931.789
+1073741824,8217738.793
+1073741824,8175759.492
+1073741824,8161215.640
+1073741824,8169473.443
+1073741824,8157957.925
+1073741824,8195599.341
+1073741824,8200060.531
+1073741824,8113958.426
+1073741824,8169994.121
+1073741824,8076056.598
+1073741824,8176473.388
+1073741824,8079035.891
+1073741824,8181077.941
+1073741824,8077869.548
+1073741824,8148080.256
+1073741824,8175080.649
+1073741824,8185444.802
+1073741824,8164017.765
+1073741824,8163177.796
+1073741824,8188425.241
+1073741824,8227575.845
+1073741824,8198858.986
+1073741824,8146674.006
+1073741824,8217406.745
+1073741824,8174112.360
+1073741824,8157474.953
+1073741824,8189138.280
+1073741824,8191146.393
+1073741824,8073919.309
+1073741824,8170414.149
+1073741824,8155771.299
+1073741824,8149074.052
+1073741824,8127396.972
+1073741824,8168637.123
+1073741824,8172627.298
+1073741824,8180653.625
+1073741824,8164979.150
+1073741824,8151065.857
+1073741824,8159950.710
+1073741824,8183920.488
+1073741824,8183054.323
+1073741824,8179686.122
+1073741824,8157814.360
+1073741824,8156617.739
+1073741824,8118259.188
+1073741824,8145079.569
+1073741824,8140207.106
+1073741824,8165940.443
+1073741824,8188169.472
+1073741824,8175639.970
+1073741824,8180145.435
+1073741824,8147617.382
+1073741824,8176401.406
+1073741824,8183777.350
+1073741824,8148855.693
+1073741824,8144995.296
+1073741824,8129499.960
+1073741824,8164277.748
+1073741824,8187397.787
+1073741824,8187129.809
+1073741824,8171398.309
+1073741824,8159266.235
+1073741824,8164569.025
+1073741824,8195578.394
+1073741824,8147685.756
+1073741824,8082821.541
+1073741824,8168774.451
+1073741824,8189572.240
+1073741824,8164455.742
+1073741824,8138381.545
+1073741824,8184619.392
+1073741824,8157117.362
+1073741824,8157644.209
+1073741824,8206472.306
+1073741824,8151579.692
+1073741824,8164861.277
+1073741824,8176602.308
+1073741824,8150797.844
+1073741824,8160524.983
+1073741824,8156190.945
+1073741824,8075629.485
+1073741824,8119201.464
+1073741824,8162116.070
+1073741824,8169588.394
+1073741824,8154480.217
+1073741824,8156762.721
+1073741824,8174093.690
+1073741824,8165189.218
+1073741824,8184585.341
+1073741824,8194810.052
+1073741824,8168537.917
+1073741824,8130408.093
+1073741824,8157694.727
+1073741824,8123365.872
+1073741824,8185404.994
+1073741824,8174219.986
+1073741824,8132685.529
+1073741824,8173724.446
+1073741824,8167038.531
+1073741824,8172145.071
+1073741824,8169411.577
+1073741824,8171300.755
+1073741824,8181844.733
+1073741824,8161130.968
+1073741824,8143266.811
+1073741824,8163710.129
+1073741824,8187115.938
+1073741824,8131100.787
+1073741824,8142369.017
+1073741824,8171659.399
+1073741824,8178910.548
+1073741824,8168394.680
+1073741824,8183815.417
+1073741824,8187006.502
+1073741824,8095454.870
+1073741824,8188724.894
+1073741824,8091712.953
+1073741824,8194746.264
+1073741824,8104034.692
+1073741824,8168837.135
+1073741824,8156216.004
+1073741824,8172347.229
+1073741824,8182950.999
+1073741824,8163428.638
+1073741824,8182134.838
+1073741824,8193704.290
+1073741824,8158991.969
+1073741824,8152333.674
+1073741824,8164574.556
+1073741824,8163973.525
+1073741824,8153574.053
+1073741824,8178561.665
+1073741824,8150908.025
+1073741824,8184141.178
+1073741824,8183726.317
+1073741824,8163570.048
+1073741824,8136379.330
+1073741824,8182754.446
+1073741824,8173871.948
+1073741824,8118761.792
+1073741824,8164069.824
+1073741824,8166205.127
+1073741824,8182325.551
+1073741824,8087878.797
+1073741824,8152913.785
+1073741824,8168333.594
+1073741824,8172978.414
+1073741824,8183244.504
+1073741824,8182641.104
+1073741824,8214573.648
+1073741824,8170338.900
+1073741824,8143072.160
+1073741824,8171580.943
+1073741824,8163099.249
+1073741824,8160398.855
+1073741824,8161304.886
+1073741824,8145896.453
+1073741824,8182415.706
+1073741824,8131530.950
+1073741824,8178149.346
+1073741824,8136428.322
+1073741824,8193458.820
+1073741824,8156454.046
+1073741824,8178888.220
+1073741824,8143104.411
+1073741824,8135342.866
+1073741824,8169322.535
+1073741824,8181351.715
+1073741824,8166082.131
+1073741824,8177195.571
+1073741824,8181289.222
+1073741824,8195288.295
+1073741824,8199358.604
+1073741824,8186441.342
+1073741824,8142976.356
+1073741824,8174117.840
+1073741824,8156598.514
+1073741824,8136233.367
+1073741824,8168303.687
+1073741824,8144401.193
+1073741824,8110372.899
+1073741824,8152730.590
+1073741824,8154310.585
+2147479552,7950062.182
+2147479552,7990352.998
+2147479552,7855232.727
+2147479552,7993092.504
+2147479552,7997344.657
+2147479552,7953579.526
+2147479552,8007072.820
+2147479552,7934290.130
+2147479552,7980624.305
+2147479552,7845012.438
+2147479552,7993641.642
+2147479552,7964835.662
+2147479552,7967730.363
+2147479552,8031605.788
+2147479552,7985868.607
+2147479552,8006719.917
+2147479552,7882609.977
+2147479552,7930999.171
+2147479552,8017656.103
+2147479552,8013142.246
+2147479552,7995211.294
+2147479552,8029009.256
+2147479552,7938073.257
+2147479552,7881379.457
+2147479552,8017614.967
+2147479552,8001349.687
+2147479552,7930518.195
+2147479552,8007539.156
+2147479552,7984991.621
+2147479552,7993366.119
+2147479552,7994916.522
+2147479552,8005966.586
+2147479552,7869429.021
+2147479552,7973623.791
+2147479552,7990025.099
+2147479552,7988060.912
+2147479552,7913024.125
+2147479552,7921938.519
+2147479552,7997903.347
+2147479552,8019951.068
+2147479552,7987257.092
+2147479552,8005563.019
+2147479552,7939640.668
+2147479552,7986483.817
+2147479552,8028328.406
+2147479552,8007706.375
+2147479552,7955074.126
+2147479552,7998212.768
+2147479552,7992685.939
+2147479552,7991980.901
+2147479552,7998861.305
+2147479552,7981068.582
+2147479552,7988685.528
+2147479552,7991936.983
+2147479552,7941170.057
+2147479552,8005044.662
+2147479552,8008396.882
+2147479552,7945674.848
+2147479552,7962674.618
+2147479552,7842098.344
+2147479552,7997818.492
+2147479552,7960073.359
+2147479552,7998526.605
+2147479552,7991974.535
+2147479552,7971994.751
+2147479552,8000576.428
+2147479552,7977220.553
+2147479552,7953705.314
+2147479552,8003867.416
+2147479552,8019421.584
+2147479552,7988648.402
+2147479552,7986066.520
+2147479552,7915712.855
+2147479552,8006258.750
+2147479552,7988927.617
+2147479552,7988052.302
+2147479552,7989980.989
+2147479552,7935479.126
+2147479552,8001224.952
+2147479552,7978006.481
+2147479552,7986286.096
+2147479552,8009372.558
+2147479552,7935139.621
+2147479552,7975297.201
+2147479552,7996371.208
+2147479552,7998577.917
+2147479552,7890604.404
+2147479552,8002847.301
+2147479552,7893965.500
+2147479552,7986587.167
+2147479552,7928493.139
+2147479552,7968704.027
+2147479552,8000832.638
+2147479552,7933911.647
+2147479552,7970263.385
+2147479552,7994349.838
+2147479552,8016476.217
+2147479552,7939719.543
+2147479552,8011879.943
+2147479552,8001712.681
+2147479552,8005954.697
+2147479552,7995991.443
+2147479552,7944468.260
+2147479552,7986312.434
+2147479552,7984621.722
+2147479552,7995300.422
+2147479552,8002278.607
+2147479552,8000003.448
+2147479552,7939803.049
+2147479552,8003220.327
+2147479552,7997799.521
+2147479552,7986410.092
+2147479552,7944202.466
+2147479552,7985562.938
+2147479552,8005039.070
+2147479552,7997929.030
+2147479552,7917067.574
+2147479552,8003216.753
+2147479552,8002632.615
+2147479552,7978499.063
+2147479552,8002023.831
+2147479552,8010022.172
+2147479552,7918844.916
+2147479552,7998607.875
+2147479552,7997706.860
+2147479552,8010458.805
+2147479552,7996623.368
+2147479552,7922279.977
+2147479552,8004146.382
+2147479552,8002017.633
+2147479552,8003505.051
+2147479552,7939021.233
+2147479552,7877178.535
+2147479552,7978784.672
+2147479552,7987720.544
+2147479552,7981375.213
+2147479552,7891038.596
+2147479552,7938153.784
+2147479552,7994743.436
+2147479552,7969981.838
+2147479552,8011823.777
+2147479552,7996064.247
+2147479552,7947879.145
+2147479552,7985816.971
+2147479552,7995605.312
+2147479552,7983282.017
+2147479552,8005353.046
+2147479552,7914268.430
+2147479552,7999164.728
+2147479552,8005604.031
+2147479552,7991085.428
+2147479552,7972030.389
+2147479552,8021943.766
+2147479552,8004200.210
+2147479552,7981959.502
+2147479552,8015792.619
+2147479552,8025698.916
+2147479552,7920272.856
+2147479552,7987016.077
+2147479552,7993946.193
+2147479552,7976842.665
+2147479552,7932725.791
+2147479552,8001207.246
+2147479552,7992935.034
+2147479552,7994839.564
+2147479552,7953781.000
+2147479552,7995609.458
+2147479552,7991498.621
+2147479552,7981376.428
+2147479552,8019860.285
+2147479552,8010076.783
+2147479552,7947939.147
+2147479552,7991493.535
+2147479552,8007070.496
+2147479552,7995804.714
+2147479552,7988939.304
+2147479552,7975442.967
+2147479552,7930282.212
+2147479552,7975682.920
+2147479552,7989355.196
+2147479552,7970851.592
+2147479552,7940425.011
+2147479552,8035883.231
+2147479552,7987103.927
+2147479552,8010144.734
+2147479552,7832545.204
+2147479552,7943871.723
+2147479552,8001202.057
+2147479552,7991649.426
+2147479552,8006330.518
+2147479552,8009843.751
+2147479552,8002447.011
+2147479552,7875281.291
+2147479552,8008141.746
+2147479552,7972849.607
+2147479552,7987483.153
+2147479552,7971092.541
+2147479552,7940162.464
+2147479552,8009365.216
+2147479552,7854549.375
+2147479552,8006580.769
+2147479552,7948876.345
diff --git a/dma/bw_all.CSV b/dma/bw_all.CSV
new file mode 100644
index 0000000..98226cf
--- /dev/null
+++ b/dma/bw_all.CSV
@@ -0,0 +1,4 @@
+bytes,size,VANILLA,VANILLA_err,FALCO,FALCO_err,TETRA,TETRA_err,TRACE,TRACE_err
+536870912,512M,8170.113520,32.870435,,,,,,
+1073741824,1G,7971.435763,26.357252,,,,,,
+2147479552,2G,7788.278555,40.186783,,,,,,
diff --git a/dma/combine.py b/dma/combine.py
new file mode 100755
index 0000000..7397449
--- /dev/null
+++ b/dma/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/dma/doca_dma_host_recv b/dma/doca_dma_host_recv
new file mode 100755
index 0000000..b99bc37
--- /dev/null
+++ b/dma/doca_dma_host_recv
Binary files differ
diff --git a/dma/host_recv.c b/dma/host_recv.c
new file mode 100644
index 0000000..9fdffab
--- /dev/null
+++ b/dma/host_recv.c
@@ -0,0 +1,251 @@
+#define _GNU_SOURCE
+
+#include <doca_error.h>
+#include <doca_dev.h>
+#include <doca_mmap.h>
+
+#include <errno.h>
+#include <getopt.h>
+#include <inttypes.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdint.h>
+
+#define META_MAGIC 0x444f4341444d4131ULL /* "DOCADMA1" */
+#define DEFAULT_DESC_PATH "descriptor.bin"
+#define DEFAULT_BUF_PATH "buffer.json"
+
+static void die_errno(const char *what)
+{
+ fprintf(stderr, "%s: %s\n", what, strerror(errno));
+ exit(EXIT_FAILURE);
+}
+
+static void die_doca(const char *what, doca_error_t err)
+{
+ fprintf(stderr, "%s: DOCA error code %d\n", what, (int)err);
+ exit(EXIT_FAILURE);
+}
+
+static int write_file_all(const char *path, const void *data, size_t len)
+{
+ FILE *f = fopen(path, "wb");
+
+ if (f == NULL)
+ return -1;
+
+ if (len > 0 && fwrite(data, 1, len, f) != len) {
+ fclose(f);
+ return -1;
+ }
+
+ if (fclose(f) != 0)
+ return -1;
+
+ return 0;
+}
+
+static int write_remote_buffer_json(const char *path, uintptr_t addr, size_t len)
+{
+ FILE *f = fopen(path, "w");
+
+ if (f == NULL)
+ return -1;
+
+ fprintf(f,
+ "{\n"
+ " \"magic\": \"0x%016" PRIx64 "\",\n"
+ " \"addr\": \"0x%016" PRIxPTR "\",\n"
+ " \"len\": %" PRIu64 "\n"
+ "}\n",
+ (uint64_t)META_MAGIC,
+ addr,
+ (uint64_t)len);
+
+ if (fclose(f) != 0)
+ return -1;
+
+ return 0;
+}
+
+static doca_error_t open_doca_device_by_pci(const char *pci_addr,
+ struct doca_dev **dev)
+{
+ struct doca_devinfo **dev_list = NULL;
+ uint32_t nb_devs = 0;
+ doca_error_t result;
+ uint32_t i;
+
+ result = doca_devinfo_create_list(&dev_list, &nb_devs);
+ if (result != DOCA_SUCCESS)
+ return result;
+
+ for (i = 0; i < nb_devs; i++) {
+ uint8_t is_equal = 0;
+
+ if (pci_addr == NULL) {
+ result = doca_dev_open(dev_list[i], dev);
+ doca_devinfo_destroy_list(dev_list);
+ return result;
+ }
+
+ result = doca_devinfo_is_equal_pci_addr(dev_list[i],
+ pci_addr,
+ &is_equal);
+ if (result == DOCA_SUCCESS && is_equal) {
+ result = doca_dev_open(dev_list[i], dev);
+ doca_devinfo_destroy_list(dev_list);
+ return result;
+ }
+ }
+
+ doca_devinfo_destroy_list(dev_list);
+ return DOCA_ERROR_NOT_FOUND;
+}
+
+static doca_error_t create_started_host_mmap(struct doca_dev *dev,
+ void *addr,
+ size_t len,
+ struct doca_mmap **mmap)
+{
+ doca_error_t result;
+
+ /*
+ * DOCA 2.x commonly uses:
+ * doca_mmap_create(const union doca_data *user_data, struct doca_mmap **mmap)
+ */
+ result = doca_mmap_create(mmap);
+ if (result != DOCA_SUCCESS)
+ return result;
+
+ result = doca_mmap_set_memrange(*mmap, addr, len);
+ if (result != DOCA_SUCCESS)
+ goto destroy;
+
+ result = doca_mmap_set_permissions(*mmap, DOCA_ACCESS_FLAG_PCI_READ_WRITE);
+ if (result != DOCA_SUCCESS)
+ goto destroy;
+
+ result = doca_mmap_add_dev(*mmap, dev);
+ if (result != DOCA_SUCCESS)
+ goto destroy;
+
+ result = doca_mmap_start(*mmap);
+ if (result != DOCA_SUCCESS)
+ goto destroy;
+
+ return DOCA_SUCCESS;
+
+destroy:
+ doca_mmap_destroy(*mmap);
+ *mmap = NULL;
+ return result;
+}
+
+static void usage(const char *prog)
+{
+ fprintf(stderr,
+ "Usage: %s -p <host-pci-bdf> -s <bytes> -o <output-file> "
+ "[-d descriptor.bin] [-b buffer.json]\n\n"
+ "Example:\n"
+ " sudo %s -p 0000:3b:00.0 -s 268435456 -o received_256M.bin\n",
+ prog, prog);
+}
+
+int main(int argc, char **argv)
+{
+ const char *pci = NULL;
+ const char *out_path = NULL;
+ const char *desc_path = DEFAULT_DESC_PATH;
+ const char *buf_path = DEFAULT_BUF_PATH;
+ size_t size = 0;
+
+ struct doca_dev *dev = NULL;
+ struct doca_mmap *mmap = NULL;
+
+ void *host_buf = NULL;
+ const void *export_desc = NULL;
+ size_t export_desc_len = 0;
+
+ int opt;
+ doca_error_t result;
+
+ while ((opt = getopt(argc, argv, "p:s:o:d:b:h")) != -1) {
+ switch (opt) {
+ case 'p':
+ pci = optarg;
+ break;
+ case 's':
+ size = strtoull(optarg, NULL, 0);
+ break;
+ case 'o':
+ out_path = optarg;
+ break;
+ case 'd':
+ desc_path = optarg;
+ break;
+ case 'b':
+ buf_path = optarg;
+ break;
+ case 'h':
+ default:
+ usage(argv[0]);
+ return EXIT_FAILURE;
+ }
+ }
+
+ if (pci == NULL || out_path == NULL || size == 0) {
+ usage(argv[0]);
+ return EXIT_FAILURE;
+ }
+
+ result = open_doca_device_by_pci(pci, &dev);
+ if (result != DOCA_SUCCESS)
+ die_doca("open_doca_device_by_pci", result);
+
+ if (posix_memalign(&host_buf, 4096, size) != 0)
+ die_errno("posix_memalign");
+
+ memset(host_buf, 0, size);
+
+ result = create_started_host_mmap(dev, host_buf, size, &mmap);
+ if (result != DOCA_SUCCESS)
+ die_doca("create_started_host_mmap", result);
+
+ result = doca_mmap_export_pci(mmap, dev, &export_desc, &export_desc_len);
+ if (result != DOCA_SUCCESS)
+ die_doca("doca_mmap_export_pci", result);
+
+ if (export_desc == NULL || export_desc_len == 0) {
+ fprintf(stderr, "doca_mmap_export_pci returned empty descriptor\n");
+ exit(EXIT_FAILURE);
+ }
+
+ if (write_file_all(desc_path, export_desc, export_desc_len) != 0)
+ die_errno("write descriptor");
+
+ if (write_remote_buffer_json(buf_path, (uintptr_t)host_buf, size) != 0)
+ die_errno("write buffer metadata");
+
+ printf("Host receive buffer exported.\n");
+ printf(" descriptor: %s (%zu bytes)\n", desc_path, export_desc_len);
+ printf(" buffer: %s\n", buf_path);
+ printf(" addr: 0x%016" PRIxPTR "\n", (uintptr_t)host_buf);
+ printf(" len: %zu\n", size);
+ printf("\nCopy %s and %s to the DPU, run dpu sender, then press ENTER here.\n",
+ desc_path, buf_path);
+
+ (void)getchar();
+
+ if (write_file_all(out_path, host_buf, size) != 0)
+ die_errno("write output file");
+
+ printf("Wrote host buffer to %s\n", out_path);
+
+ doca_mmap_destroy(mmap);
+ doca_dev_close(dev);
+ free(host_buf);
+
+ return EXIT_SUCCESS;
+}
diff --git a/dma/run.sh b/dma/run.sh
new file mode 100755
index 0000000..f9daba2
--- /dev/null
+++ b/dma/run.sh
@@ -0,0 +1,219 @@
+#!/usr/bin/env bash
+
+set -euo pipefail
+
+parse_size() {
+ local input="$1"
+ local number suffix
+
+ if [[ "$input" =~ ^([0-9]+)([KkMmGg]?)$ ]]; then
+ number="${BASH_REMATCH[1]}"
+ suffix="${BASH_REMATCH[2]}"
+
+ case "$suffix" in
+ K|k) echo $((number * 1024)) ;;
+ M|m) echo $((number * 1024 * 1024)) ;;
+ G|g) echo $((number * 1024 * 1024 * 1024)) ;;
+ "") echo "$number" ;;
+ *) return 1 ;;
+ esac
+ else
+ echo "Invalid size: $input" >&2
+ return 1
+ fi
+}
+
+cleanup() {
+ rm -f buffer.json descriptor.bin host_recv.stdin
+}
+trap cleanup EXIT INT TERM
+
+if [[ $# -lt 4 || $# -gt 5 ]]; then
+ echo "Usage: $0 <tag> <runs> <bytes|size> <remote-input-file> [remote-log-prefix-base]"
+ echo "Example: $0 VANILLA 10 256M bins/256M.bin"
+ exit 1
+fi
+
+TAG="$1"
+RUNS="$2"
+DEBUG_BYTES="$(parse_size "$3")"
+REMOTE_INPUT="$4"
+REMOTE_PREFIX_BASE="${TAG}_$3"
+
+SSH_KEY="$HOME/.ssh/id_ed25519"
+REMOTE_HOST="ubuntu@143.248.53.46"
+REMOTE_DIR="/home/ubuntu/siho-benchmark/dma"
+
+DEBUG_OUT="./test.bin"
+
+# Host-side PCI BDF toward DPU.
+PCI_TO_DPU="0000:5e:00.0"
+
+# 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
+)
+
+SCP_OPTS=(
+-i "$SSH_KEY"
+-o BatchMode=yes
+-o StrictHostKeyChecking=accept-new
+)
+
+echo "====="
+echo "SIHO'S DMA BENCHMARKING"
+echo "SSH KEY LOCATION: $SSH_KEY"
+echo "REMOTE HOST: $REMOTE_HOST"
+echo "REMOTE DIR: $REMOTE_DIR"
+echo "TAG: $TAG"
+echo "HOST PCIE ADDRESS TO DPU: $PCI_TO_DPU"
+echo "DPU PCIE ADDRESS: $DPU_PCI"
+echo "RUNS: $RUNS"
+echo "BYTES: $DEBUG_BYTES"
+echo "REMOTE INPUT: $REMOTE_INPUT"
+echo "====="
+echo "PROCEED (y/N)?"
+
+read -r proceed
+
+if [[ "${proceed:-}" != "y" ]]; then
+ echo "TERMINATING..."
+ exit 0
+fi
+
+sudo -v
+
+for i in $(seq 1 "$RUNS"); do
+ echo "===== RUN $i/$RUNS ====="
+
+ rm -f descriptor.bin buffer.json host_recv.stdin "$DEBUG_OUT"
+ mkfifo host_recv.stdin
+
+ # Open FIFO read-write so the receiver does not get accidental EOF.
+ exec 3<>host_recv.stdin
+
+ sudo -n ./doca_dma_host_recv \
+ -p "$PCI_TO_DPU" \
+ -o "$DEBUG_OUT" \
+ -s "$DEBUG_BYTES" \
+ < host_recv.stdin &
+ host_pid=$!
+
+ ok=0
+ for _ in $(seq 1 100); do
+ if [[ -s descriptor.bin && -s buffer.json ]]; then
+ ok=1
+ break
+ fi
+
+ sleep 0.1
+ done
+
+ if [[ "$ok" != "1" ]]; then
+ echo "ERROR: descriptor.bin or buffer.json was not generated within timeout"
+ echo "host_pid=$host_pid"
+
+ if kill -0 "$host_pid" 2>/dev/null; then
+ echo "host receiver still appears to be running"
+ else
+ echo "host receiver process is not visible anymore"
+ fi
+
+ kill "$host_pid" 2>/dev/null || true
+ exec 3>&- 2>/dev/null || true
+ rm -f host_recv.stdin
+ exit 1
+ fi
+
+ echo "[host] Copying descriptor.bin and buffer.json to DPU..."
+ if ! scp "${SCP_OPTS[@]}" descriptor.bin buffer.json "$REMOTE_HOST:$REMOTE_DIR/"; then
+ echo "ERROR: scp failed"
+ kill "$host_pid" 2>/dev/null || true
+ exec 3>&-
+ exit 1
+ fi
+
+ echo "[dpu] Running DMA sender through wrapper..."
+ if ! dpu_out="$(
+ ssh "${SSH_OPTS[@]}" "$REMOTE_HOST" \
+ "cd '$REMOTE_DIR' && sudo -n '$DPU_SCRIPT' '$REMOTE_PREFIX_BASE' '$DPU_PCI' '$REMOTE_INPUT'" \
+ 2>&1
+ )"; then
+ echo "ERROR: DPU sender failed"
+ echo "$dpu_out"
+ kill "$host_pid" 2>/dev/null || true
+ exec 3>&-
+ exit 1
+ fi
+
+ bytes="$(awk '/bytes:/ {print $2}' <<< "$dpu_out" | tail -n1)"
+ time_val="$(awk '/time:/ {print $2}' <<< "$dpu_out" | tail -n1)"
+ time_unit="$(awk '/time:/ {print $3}' <<< "$dpu_out" | tail -n1)"
+ bw_val="$(awk '/BW:/ {print $2}' <<< "$dpu_out" | tail -n1)"
+ bw_unit="$(awk '/BW:/ {print $3}' <<< "$dpu_out" | tail -n1)"
+
+ if [[ -z "${bytes:-}" || -z "${time_val:-}" || -z "${bw_val:-}" ]]; then
+ echo "ERROR: failed to parse DPU output"
+ echo "$dpu_out"
+ kill "$host_pid" 2>/dev/null || true
+ exec 3>&-
+ 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 "[host] Releasing host receiver..."
+ printf '\n' >&3
+ exec 3>&-
+
+ if ! wait "$host_pid"; then
+ echo "ERROR: host receiver failed"
+ exit 1
+ fi
+
+ rm -f host_recv.stdin
+
+ echo "[result] 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/dma/sum.sh b/dma/sum.sh
new file mode 100755
index 0000000..feae470
--- /dev/null
+++ b/dma/sum.sh
@@ -0,0 +1,22 @@
+#!/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/dma/times_VANILLA.csv b/dma/times_VANILLA.csv
new file mode 100644
index 0000000..4269925
--- /dev/null
+++ b/dma/times_VANILLA.csv
@@ -0,0 +1,1348 @@
+bytes,time_usec
+536870912,63489.795000
+536870912,62984.421000
+536870912,62713.422000
+536870912,63058.195000
+536870912,62965.014000
+536870912,62855.561000
+536870912,62650.012000
+536870912,63074.874000
+536870912,62584.804000
+536870912,63134.707000
+536870912,63028.091000
+536870912,62681.548000
+536870912,62739.579000
+536870912,62804.091000
+536870912,62744.142000
+536870912,63509.868000
+536870912,62697.951000
+536870912,62564.218000
+536870912,62482.651000
+536870912,62636.890000
+536870912,62695.587000
+536870912,62278.528000
+536870912,62776.428000
+536870912,62801.547000
+536870912,62893.508000
+536870912,62588.838000
+536870912,62543.189000
+536870912,62410.136000
+536870912,62677.309000
+536870912,62455.221000
+536870912,63020.347000
+536870912,62818.725000
+536870912,62863.360000
+536870912,62589.763000
+536870912,62541.721000
+536870912,62757.261000
+536870912,62529.262000
+536870912,62207.045000
+536870912,62634.045000
+536870912,62773.077000
+536870912,62381.274000
+536870912,62746.201000
+536870912,62698.327000
+536870912,63057.806000
+536870912,62934.840000
+536870912,62646.212000
+536870912,63026.353000
+536870912,62676.516000
+536870912,62879.057000
+536870912,62982.650000
+536870912,63180.418000
+536870912,62751.229000
+536870912,63048.517000
+536870912,62773.314000
+536870912,62734.044000
+536870912,62572.787000
+536870912,63607.369000
+536870912,62564.235000
+536870912,62855.877000
+536870912,62959.419000
+536870912,62415.058000
+536870912,62309.991000
+536870912,62785.897000
+536870912,62690.258000
+536870912,62415.332000
+536870912,62441.645000
+536870912,62729.018000
+536870912,62478.677000
+536870912,62558.849000
+536870912,62680.513000
+536870912,62624.220000
+536870912,62564.798000
+536870912,62725.861000
+536870912,62318.913000
+536870912,62945.061000
+536870912,62785.693000
+536870912,63015.685000
+536870912,62728.146000
+536870912,62249.735000
+536870912,62251.258000
+536870912,62325.861000
+536870912,62432.666000
+536870912,63447.784000
+536870912,62602.179000
+536870912,62309.518000
+536870912,63086.085000
+536870912,62583.878000
+536870912,62786.236000
+536870912,62613.086000
+536870912,62547.216000
+536870912,62664.777000
+536870912,62807.122000
+536870912,62594.952000
+536870912,62608.381000
+536870912,62546.490000
+536870912,62700.423000
+536870912,63168.508000
+536870912,62800.671000
+536870912,62830.069000
+536870912,62753.804000
+536870912,62560.245000
+536870912,62382.812000
+536870912,62333.384000
+536870912,62656.923000
+536870912,62472.523000
+536870912,62575.925000
+536870912,62902.778000
+536870912,62438.804000
+536870912,62884.779000
+536870912,62711.720000
+536870912,62941.834000
+536870912,62278.108000
+536870912,62802.146000
+536870912,62639.431000
+536870912,62523.417000
+536870912,62478.105000
+536870912,62862.625000
+536870912,62614.423000
+536870912,62175.452000
+536870912,62564.245000
+536870912,62260.623000
+536870912,63021.730000
+536870912,62353.663000
+536870912,62987.958000
+536870912,62714.081000
+536870912,62875.480000
+536870912,62608.377000
+536870912,62547.835000
+536870912,62825.203000
+536870912,63031.471000
+536870912,62594.279000
+536870912,62432.563000
+536870912,62572.928000
+536870912,62908.543000
+536870912,62573.117000
+536870912,62607.168000
+536870912,63551.153000
+536870912,62754.363000
+536870912,62769.897000
+536870912,62457.675000
+536870912,63081.472000
+536870912,62575.529000
+536870912,62738.454000
+536870912,62519.180000
+536870912,63184.155000
+536870912,62513.958000
+536870912,62637.905000
+536870912,62640.969000
+536870912,62498.890000
+536870912,62833.153000
+536870912,62780.018000
+536870912,62503.510000
+536870912,62807.078000
+536870912,62742.944000
+536870912,62403.578000
+536870912,62691.697000
+536870912,63165.921000
+536870912,62332.588000
+536870912,63133.721000
+536870912,62549.671000
+536870912,63035.128000
+536870912,62532.528000
+536870912,62592.182000
+536870912,62796.261000
+536870912,62751.735000
+536870912,62558.650000
+536870912,62931.123000
+536870912,62781.617000
+536870912,62280.346000
+536870912,62542.120000
+536870912,62516.329000
+536870912,62449.359000
+536870912,62578.119000
+536870912,63023.574000
+536870912,62333.771000
+536870912,62913.852000
+536870912,63771.759000
+536870912,62680.639000
+536870912,62819.388000
+536870912,62689.228000
+536870912,62923.446000
+536870912,62547.552000
+536870912,62818.679000
+536870912,62339.166000
+536870912,62760.738000
+536870912,62378.726000
+536870912,62289.564000
+536870912,62586.769000
+536870912,62626.293000
+536870912,62439.731000
+536870912,62305.625000
+536870912,62764.595000
+536870912,63024.823000
+536870912,62925.298000
+536870912,62542.160000
+536870912,62872.860000
+536870912,63020.087000
+536870912,62424.527000
+536870912,62937.704000
+536870912,62632.583000
+536870912,62705.855000
+536870912,62669.379000
+536870912,62676.689000
+536870912,62582.706000
+536870912,62763.066000
+536870912,62600.187000
+536870912,63001.890000
+536870912,62783.888000
+536870912,63447.465000
+536870912,62918.914000
+536870912,62284.017000
+536870912,62463.288000
+536870912,62804.774000
+536870912,62685.868000
+536870912,62981.294000
+536870912,63129.698000
+536870912,63172.788000
+536870912,62396.783000
+536870912,62805.197000
+536870912,63194.962000
+536870912,62442.165000
+536870912,62586.296000
+536870912,63062.488000
+536870912,62626.102000
+536870912,62573.197000
+536870912,62858.625000
+536870912,62708.645000
+536870912,62678.931000
+536870912,62474.981000
+536870912,62786.592000
+536870912,62787.149000
+536870912,62124.485000
+536870912,62580.338000
+536870912,62421.176000
+536870912,62566.710000
+536870912,62565.514000
+536870912,62658.089000
+536870912,62473.495000
+536870912,62729.651000
+536870912,62977.907000
+536870912,62670.804000
+536870912,62733.764000
+536870912,62683.454000
+536870912,62424.694000
+536870912,62225.992000
+536870912,62545.001000
+536870912,62606.322000
+536870912,62798.826000
+536870912,62610.269000
+536870912,62480.129000
+536870912,62479.207000
+536870912,62472.676000
+536870912,62284.099000
+536870912,62773.361000
+1073741824,128847.934000
+1073741824,128228.653000
+1073741824,128358.822000
+1073741824,129359.483000
+1073741824,127960.185000
+1073741824,128831.561000
+1073741824,129032.084000
+1073741824,128468.556000
+1073741824,128452.040000
+1073741824,128327.067000
+1073741824,128093.558000
+1073741824,128411.867000
+1073741824,130043.465000
+1073741824,128208.807000
+1073741824,127832.440000
+1073741824,128688.396000
+1073741824,128462.595000
+1073741824,127974.289000
+1073741824,128382.129000
+1073741824,128084.382000
+1073741824,128354.746000
+1073741824,128089.438000
+1073741824,128570.736000
+1073741824,128806.602000
+1073741824,128416.381000
+1073741824,128246.285000
+1073741824,128170.772000
+1073741824,128180.281000
+1073741824,128408.284000
+1073741824,128361.587000
+1073741824,127996.603000
+1073741824,128929.908000
+1073741824,128295.273000
+1073741824,128437.925000
+1073741824,128905.852000
+1073741824,128328.525000
+1073741824,128615.521000
+1073741824,127972.604000
+1073741824,128450.318000
+1073741824,127968.264000
+1073741824,128742.763000
+1073741824,128727.120000
+1073741824,128740.985000
+1073741824,128421.690000
+1073741824,129542.817000
+1073741824,129616.984000
+1073741824,128369.117000
+1073741824,127993.060000
+1073741824,128965.128000
+1073741824,128497.148000
+1073741824,128874.149000
+1073741824,128087.496000
+1073741824,128121.184000
+1073741824,128970.003000
+1073741824,127716.858000
+1073741824,128108.995000
+1073741824,128794.189000
+1073741824,128214.452000
+1073741824,128280.623000
+1073741824,128383.771000
+1073741824,129860.524000
+1073741824,128690.881000
+1073741824,128454.171000
+1073741824,128356.101000
+1073741824,128317.008000
+1073741824,128511.373000
+1073741824,128290.294000
+1073741824,128354.517000
+1073741824,128804.554000
+1073741824,128137.764000
+1073741824,128341.067000
+1073741824,128592.371000
+1073741824,128336.172000
+1073741824,128363.135000
+1073741824,128289.664000
+1073741824,128549.018000
+1073741824,128312.002000
+1073741824,128611.158000
+1073741824,127515.396000
+1073741824,128869.322000
+1073741824,128458.551000
+1073741824,128451.021000
+1073741824,128119.159000
+1073741824,128783.615000
+1073741824,128406.949000
+1073741824,128493.522000
+1073741824,129774.847000
+1073741824,128754.600000
+1073741824,128407.445000
+1073741824,128427.297000
+1073741824,127991.351000
+1073741824,128549.394000
+1073741824,128194.076000
+1073741824,128442.858000
+1073741824,128720.388000
+1073741824,128719.087000
+1073741824,128082.507000
+1073741824,127914.157000
+1073741824,128494.464000
+1073741824,128247.481000
+1073741824,128750.373000
+1073741824,128848.464000
+1073741824,128709.755000
+1073741824,128419.617000
+1073741824,128464.786000
+1073741824,128089.221000
+1073741824,128285.098000
+1073741824,127956.854000
+1073741824,128627.834000
+1073741824,128401.736000
+1073741824,128238.908000
+1073741824,128491.011000
+1073741824,128624.531000
+1073741824,127935.579000
+1073741824,128182.256000
+1073741824,127968.604000
+1073741824,128339.703000
+1073741824,128818.708000
+1073741824,129256.167000
+1073741824,128101.168000
+1073741824,128515.409000
+1073741824,128576.432000
+1073741824,128058.615000
+1073741824,127714.940000
+1073741824,128897.189000
+1073741824,128548.555000
+1073741824,128118.051000
+1073741824,128595.775000
+1073741824,128390.759000
+1073741824,128665.233000
+1073741824,128656.797000
+1073741824,128023.144000
+1073741824,128368.514000
+1073741824,128699.314000
+1073741824,128119.968000
+1073741824,128309.818000
+1073741824,128562.510000
+1073741824,128592.078000
+1073741824,128174.726000
+1073741824,128261.116000
+1073741824,127976.328000
+1073741824,128229.360000
+1073741824,128636.430000
+1073741824,129598.053000
+1073741824,128338.553000
+1073741824,127990.602000
+1073741824,128502.897000
+1073741824,128315.735000
+1073741824,128656.952000
+1073741824,127950.805000
+1073741824,128068.290000
+1073741824,128414.345000
+1073741824,129955.992000
+1073741824,128458.069000
+1073741824,128310.001000
+1073741824,128605.643000
+1073741824,128257.949000
+1073741824,129143.886000
+1073741824,128083.550000
+1073741824,128056.730000
+1073741824,128477.029000
+1073741824,127824.060000
+1073741824,128286.444000
+1073741824,128424.816000
+1073741824,128376.334000
+1073741824,128304.672000
+1073741824,128520.425000
+1073741824,128322.713000
+1073741824,128477.631000
+1073741824,128429.009000
+1073741824,128471.310000
+1073741824,129109.411000
+1073741824,128089.378000
+1073741824,127884.552000
+1073741824,128002.158000
+1073741824,128653.792000
+1073741824,128495.450000
+1073741824,128575.096000
+1073741824,128037.838000
+1073741824,127790.205000
+1073741824,128358.903000
+1073741824,129734.960000
+1073741824,128336.542000
+1073741824,128484.916000
+1073741824,128511.766000
+1073741824,128558.427000
+1073741824,128169.736000
+1073741824,128879.380000
+1073741824,128343.909000
+1073741824,128120.941000
+1073741824,130074.652000
+1073741824,128719.556000
+1073741824,128637.296000
+1073741824,128265.632000
+1073741824,127934.537000
+1073741824,128278.807000
+1073741824,128205.573000
+1073741824,128516.655000
+1073741824,128714.833000
+1073741824,128069.519000
+1073741824,128462.382000
+2147479552,263887.592000
+2147479552,267801.091000
+2147479552,261850.588000
+2147479552,262111.370000
+2147479552,265592.301000
+2147479552,261825.537000
+2147479552,262378.650000
+2147479552,263917.510000
+2147479552,266635.838000
+2147479552,261913.748000
+2147479552,261597.637000
+2147479552,264190.575000
+2147479552,262794.264000
+2147479552,262981.388000
+2147479552,261745.018000
+2147479552,266507.906000
+2147479552,262134.394000
+2147479552,262472.314000
+2147479552,261898.798000
+2147479552,261238.878000
+2147479552,263019.482000
+2147479552,264304.881000
+2147479552,262435.915000
+2147479552,261522.943000
+2147479552,262991.126000
+2147479552,261527.636000
+2147479552,264557.912000
+2147479552,262552.749000
+2147479552,265972.221000
+2147479552,262808.425000
+2147479552,262022.535000
+2147479552,262888.337000
+2147479552,264527.815000
+2147479552,262205.234000
+2147479552,262359.199000
+2147479552,261864.783000
+2147479552,261932.302000
+2147479552,263945.389000
+2147479552,262278.512000
+2147479552,262242.882000
+2147479552,261615.135000
+2147479552,261480.962000
+2147479552,264379.055000
+2147479552,261290.734000
+2147479552,262993.678000
+2147479552,261780.691000
+2147479552,261541.002000
+2147479552,262797.897000
+2147479552,262963.603000
+2147479552,261488.003000
+2147479552,262508.959000
+2147479552,261796.568000
+2147479552,262648.357000
+2147479552,264209.025000
+2147479552,261692.183000
+2147479552,266379.908000
+2147479552,261940.632000
+2147479552,261853.796000
+2147479552,262193.980000
+2147479552,264227.979000
+2147479552,261960.448000
+2147479552,262254.736000
+2147479552,261540.662000
+2147479552,265729.693000
+2147479552,262162.601000
+2147479552,262802.833000
+2147479552,262167.477000
+2147479552,261624.508000
+2147479552,261894.035000
+2147479552,261953.414000
+2147479552,264787.194000
+2147479552,262303.804000
+2147479552,262746.105000
+2147479552,262185.927000
+2147479552,263119.740000
+2147479552,266038.995000
+2147479552,261664.370000
+2147479552,262039.602000
+2147479552,262536.802000
+2147479552,267709.202000
+2147479552,261850.498000
+2147479552,261925.048000
+2147479552,262436.101000
+2147479552,263106.499000
+2147479552,264636.512000
+2147479552,262321.495000
+2147479552,261928.902000
+2147479552,262626.003000
+2147479552,263078.185000
+2147479552,264680.914000
+2147479552,262021.706000
+2147479552,265268.452000
+2147479552,261699.450000
+2147479552,264126.695000
+2147479552,262116.640000
+2147479552,262990.790000
+2147479552,263209.847000
+2147479552,263113.615000
+2147479552,262935.500000
+2147479552,261736.692000
+2147479552,262655.059000
+2147479552,262919.008000
+2147479552,261912.836000
+2147479552,264271.842000
+2147479552,262960.113000
+2147479552,262128.868000
+2147479552,262035.758000
+2147479552,263476.521000
+2147479552,263208.445000
+2147479552,262589.311000
+2147479552,262693.749000
+2147479552,262243.488000
+2147479552,263928.720000
+2147479552,262247.115000
+2147479552,266018.585000
+2147479552,264890.820000
+2147479552,264027.100000
+2147479552,265546.246000
+2147479552,262298.908000
+2147479552,262460.471000
+2147479552,261985.680000
+2147479552,266132.198000
+2147479552,262450.119000
+2147479552,262712.386000
+2147479552,262641.117000
+2147479552,265370.389000
+2147479552,264206.351000
+2147479552,261530.424000
+2147479552,265437.359000
+2147479552,261751.809000
+2147479552,262778.057000
+2147479552,262106.834000
+2147479552,264050.654000
+2147479552,262844.518000
+2147479552,265476.259000
+2147479552,266767.899000
+2147479552,262273.077000
+2147479552,263872.954000
+2147479552,262132.046000
+2147479552,262094.758000
+2147479552,262275.595000
+2147479552,267934.154000
+2147479552,265580.418000
+2147479552,262668.031000
+2147479552,261927.500000
+2147479552,261835.525000
+2147479552,264339.028000
+2147479552,263789.509000
+2147479552,262571.549000
+2147479552,262662.153000
+2147479552,262053.883000
+2147479552,261927.260000
+2147479552,262212.635000
+2147479552,262132.086000
+2147479552,263922.216000
+2147479552,262137.604000
+2147479552,262524.973000
+2147479552,262795.420000
+2147479552,265162.345000
+2147479552,262098.205000
+2147479552,262429.500000
+2147479552,262019.232000
+2147479552,266769.784000
+2147479552,262460.088000
+2147479552,263000.549000
+2147479552,261675.960000
+2147479552,262429.137000
+2147479552,262323.120000
+2147479552,264351.667000
+2147479552,261694.275000
+2147479552,262309.888000
+2147479552,261120.789000
+2147479552,265097.228000
+2147479552,262068.833000
+2147479552,263040.378000
+2147479552,263293.130000
+2147479552,263201.917000
+2147479552,263260.491000
+2147479552,261502.801000
+2147479552,262721.862000
+2147479552,265178.099000
+2147479552,261538.850000
+2147479552,262722.501000
+2147479552,262904.610000
+2147479552,264333.310000
+2147479552,261787.249000
+2147479552,265029.688000
+2147479552,262112.153000
+2147479552,261703.953000
+2147479552,261831.012000
+2147479552,264409.988000
+2147479552,262138.241000
+2147479552,261754.387000
+2147479552,261894.308000
+2147479552,262073.709000
+2147479552,264942.039000
+2147479552,261850.561000
+2147479552,262302.688000
+536870912,63184.538000
+536870912,62946.387000
+536870912,62727.237000
+536870912,62305.159000
+536870912,62733.388000
+536870912,62891.899000
+536870912,63003.721000
+536870912,63267.841000
+536870912,62697.615000
+536870912,62592.863000
+536870912,62731.366000
+536870912,62642.382000
+536870912,62450.325000
+536870912,62708.296000
+536870912,62388.391000
+536870912,62307.663000
+536870912,62371.309000
+536870912,62751.326000
+536870912,62621.796000
+536870912,62564.581000
+536870912,62621.626000
+536870912,62680.750000
+536870912,62549.701000
+536870912,62494.681000
+536870912,62355.935000
+536870912,62873.396000
+536870912,62370.466000
+536870912,62569.417000
+536870912,62810.079000
+536870912,62422.839000
+536870912,62265.579000
+536870912,62761.524000
+536870912,62711.717000
+536870912,62741.331000
+536870912,62268.859000
+536870912,62647.177000
+536870912,62701.908000
+536870912,62825.782000
+536870912,62625.436000
+536870912,62518.747000
+536870912,62802.539000
+536870912,62891.373000
+536870912,62224.148000
+536870912,62496.412000
+536870912,62282.757000
+536870912,62791.672000
+536870912,62436.766000
+536870912,62446.029000
+536870912,62730.791000
+536870912,62573.317000
+536870912,62630.808000
+536870912,62885.199000
+536870912,62158.193000
+536870912,62408.084000
+536870912,62683.497000
+536870912,62718.095000
+536870912,62538.613000
+536870912,62166.509000
+536870912,62416.403000
+536870912,62727.829000
+536870912,62428.797000
+536870912,62652.091000
+536870912,62704.899000
+536870912,62557.944000
+536870912,62697.292000
+536870912,62682.102000
+536870912,62508.295000
+536870912,62895.713000
+536870912,62756.212000
+536870912,62686.447000
+536870912,62523.836000
+536870912,62608.484000
+536870912,62812.750000
+536870912,63075.397000
+536870912,62627.934000
+536870912,62685.812000
+536870912,62364.315000
+536870912,62350.567000
+536870912,62914.824000
+536870912,62152.292000
+536870912,62677.549000
+536870912,62588.754000
+536870912,62369.384000
+536870912,62679.880000
+536870912,62519.459000
+536870912,62411.288000
+536870912,62566.193000
+536870912,62184.051000
+536870912,63898.955000
+536870912,62638.212000
+536870912,62574.500000
+536870912,62507.739000
+536870912,62812.054000
+536870912,62534.184000
+536870912,62635.814000
+536870912,62651.418000
+536870912,62929.012000
+536870912,62810.612000
+536870912,62439.295000
+536870912,62632.127000
+536870912,62582.024000
+536870912,62574.845000
+536870912,62668.810000
+536870912,62908.809000
+536870912,62801.267000
+536870912,62762.543000
+536870912,63025.736000
+536870912,62733.694000
+536870912,62870.965000
+536870912,62179.598000
+536870912,63042.286000
+536870912,62545.987000
+536870912,62725.671000
+536870912,62634.968000
+536870912,62545.827000
+536870912,62779.532000
+536870912,62588.818000
+536870912,62589.706000
+536870912,62529.361000
+536870912,62506.144000
+536870912,62666.295000
+536870912,62326.257000
+536870912,62791.795000
+536870912,62469.022000
+536870912,62140.732000
+536870912,62480.349000
+536870912,62802.879000
+536870912,62385.667000
+536870912,62730.361000
+536870912,62666.921000
+536870912,62502.175000
+536870912,62605.107000
+536870912,62665.865000
+536870912,62455.261000
+536870912,62434.002000
+536870912,62535.563000
+536870912,62633.213000
+536870912,62768.318000
+536870912,62704.995000
+536870912,62808.381000
+536870912,62794.227000
+536870912,62649.046000
+536870912,62936.775000
+536870912,62542.557000
+536870912,62642.588000
+536870912,62514.986000
+536870912,62133.164000
+536870912,62787.075000
+536870912,62667.008000
+536870912,62557.444000
+536870912,62873.542000
+536870912,63443.644000
+536870912,62604.078000
+536870912,62401.027000
+536870912,62525.505000
+536870912,62580.345000
+536870912,62533.964000
+536870912,62514.527000
+536870912,62694.411000
+536870912,62729.947000
+536870912,62569.721000
+536870912,62493.079000
+536870912,63132.656000
+536870912,62489.951000
+536870912,62526.484000
+536870912,62295.703000
+536870912,62637.859000
+536870912,62903.463000
+536870912,62853.509000
+536870912,62884.013000
+536870912,62892.116000
+536870912,62785.367000
+536870912,62835.608000
+536870912,62582.626000
+536870912,62488.099000
+536870912,62972.531000
+536870912,62549.004000
+536870912,62966.980000
+536870912,62696.280000
+536870912,63267.072000
+536870912,63325.052000
+536870912,62607.058000
+536870912,62305.991000
+536870912,62489.315000
+536870912,63084.153000
+536870912,62487.730000
+536870912,62481.109000
+536870912,62463.230000
+536870912,62330.620000
+536870912,62539.719000
+536870912,62581.887000
+536870912,62447.580000
+536870912,62858.792000
+536870912,62688.616000
+536870912,62646.179000
+536870912,62274.388000
+536870912,62689.409000
+536870912,62727.093000
+536870912,62533.974000
+536870912,62335.476000
+536870912,62848.929000
+536870912,62760.378000
+536870912,62615.908000
+536870912,62851.114000
+536870912,62550.700000
+536870912,62552.178000
+536870912,62558.493000
+536870912,62998.492000
+536870912,62721.089000
+536870912,62411.837000
+536870912,62335.209000
+536870912,62690.574000
+536870912,62865.652000
+536870912,62155.749000
+536870912,62496.659000
+536870912,62541.768000
+536870912,62527.839000
+536870912,62434.742000
+536870912,62830.566000
+536870912,62765.667000
+536870912,62701.985000
+536870912,62985.177000
+536870912,62533.501000
+536870912,62244.530000
+536870912,62478.265000
+536870912,62412.857000
+536870912,62650.518000
+536870912,62447.880000
+536870912,62720.639000
+536870912,62914.608000
+536870912,62322.953000
+536870912,62794.033000
+536870912,62890.121000
+536870912,62653.932000
+536870912,62616.294000
+536870912,62672.902000
+536870912,62872.949000
+536870912,62680.226000
+536870912,62611.788000
+536870912,62594.400000
+536870912,62540.852000
+536870912,62631.501000
+536870912,62650.012000
+536870912,62384.657000
+536870912,62671.747000
+536870912,62439.228000
+1073741824,129343.073000
+1073741824,128451.081000
+1073741824,128088.782000
+1073741824,128811.138000
+1073741824,128923.293000
+1073741824,128713.112000
+1073741824,128407.494000
+1073741824,128328.178000
+1073741824,128275.087000
+1073741824,128275.957000
+1073741824,128076.283000
+1073741824,128188.643000
+1073741824,127893.984000
+1073741824,129643.548000
+1073741824,127684.083000
+1073741824,128714.478000
+1073741824,128807.439000
+1073741824,128413.916000
+1073741824,128446.424000
+1073741824,128650.075000
+1073741824,127990.905000
+1073741824,129391.306000
+1073741824,128159.405000
+1073741824,128913.801000
+1073741824,128801.593000
+1073741824,128628.890000
+1073741824,128209.869000
+1073741824,128445.685000
+1073741824,128071.636000
+1073741824,128419.374000
+1073741824,127987.158000
+1073741824,128221.509000
+1073741824,127859.530000
+1073741824,129244.644000
+1073741824,128912.622000
+1073741824,128537.644000
+1073741824,129535.603000
+1073741824,128297.754000
+1073741824,128620.783000
+1073741824,129467.351000
+1073741824,127876.599000
+1073741824,128455.723000
+1073741824,128058.697000
+1073741824,128364.361000
+1073741824,128910.924000
+1073741824,128558.379000
+1073741824,128274.714000
+1073741824,127870.195000
+1073741824,128375.362000
+1073741824,128478.527000
+1073741824,128148.474000
+1073741824,128434.178000
+1073741824,128313.198000
+1073741824,128031.647000
+1073741824,128289.519000
+1073741824,128195.744000
+1073741824,128211.857000
+1073741824,128640.350000
+1073741824,128439.045000
+1073741824,128249.322000
+1073741824,128169.756000
+1073741824,128401.486000
+1073741824,128188.844000
+1073741824,127599.091000
+1073741824,128254.262000
+1073741824,128482.820000
+1073741824,128352.948000
+1073741824,128534.127000
+1073741824,127943.785000
+1073741824,127874.178000
+1073741824,129231.128000
+1073741824,128344.768000
+1073741824,129837.624000
+1073741824,128243.064000
+1073741824,129789.744000
+1073741824,128170.885000
+1073741824,129808.484000
+1073741824,128689.945000
+1073741824,128264.912000
+1073741824,128102.507000
+1073741824,128438.721000
+1073741824,128451.937000
+1073741824,128055.880000
+1073741824,127446.531000
+1073741824,127892.918000
+1073741824,128712.159000
+1073741824,127604.247000
+1073741824,128280.106000
+1073741824,128541.737000
+1073741824,128044.730000
+1073741824,128013.339000
+1073741824,129871.994000
+1073741824,128338.170000
+1073741824,128568.588000
+1073741824,128674.251000
+1073741824,129017.446000
+1073741824,128366.089000
+1073741824,128303.416000
+1073741824,128177.533000
+1073741824,128423.598000
+1073741824,128642.808000
+1073741824,128502.737000
+1073741824,128126.367000
+1073741824,128139.929000
+1073741824,128192.694000
+1073741824,128536.389000
+1073741824,128555.246000
+1073741824,129162.666000
+1073741824,128737.355000
+1073741824,128814.413000
+1073741824,128408.480000
+1073741824,128059.880000
+1073741824,128256.137000
+1073741824,128185.496000
+1073741824,128697.256000
+1073741824,128244.193000
+1073741824,128128.608000
+1073741824,128677.699000
+1073741824,128738.687000
+1073741824,128984.071000
+1073741824,128434.631000
+1073741824,128071.950000
+1073741824,128076.142000
+1073741824,128322.713000
+1073741824,128513.517000
+1073741824,128430.049000
+1073741824,127944.112000
+1073741824,128696.176000
+1073741824,129728.956000
+1073741824,128363.931000
+1073741824,128037.945000
+1073741824,128431.831000
+1073741824,128843.308000
+1073741824,128115.426000
+1073741824,128547.372000
+1073741824,128539.070000
+1073741824,127774.269000
+1073741824,128634.699000
+1073741824,128425.452000
+1073741824,128241.042000
+1073741824,128647.038000
+1073741824,128493.694000
+1073741824,128561.973000
+1073741824,129844.491000
+1073741824,129147.676000
+1073741824,128468.646000
+1073741824,128351.142000
+1073741824,128588.944000
+1073741824,128552.961000
+1073741824,128280.399000
+1073741824,128420.294000
+1073741824,128115.959000
+1073741824,127956.108000
+1073741824,128367.648000
+1073741824,128969.664000
+1073741824,128538.274000
+1073741824,129081.469000
+1073741824,128103.130000
+1073741824,128278.417000
+1073741824,128933.548000
+1073741824,128286.194000
+1073741824,128391.215000
+1073741824,128310.987000
+1073741824,128353.920000
+1073741824,128324.245000
+1073741824,128158.873000
+1073741824,128484.153000
+1073741824,128766.013000
+1073741824,128443.561000
+1073741824,128076.359000
+1073741824,128958.677000
+1073741824,128780.211000
+1073741824,128318.613000
+1073741824,128204.850000
+1073741824,128369.899000
+1073741824,128128.012000
+1073741824,128078.071000
+1073741824,129526.508000
+1073741824,128051.194000
+1073741824,129586.406000
+1073741824,127957.104000
+1073741824,129389.377000
+1073741824,128362.946000
+1073741824,128561.578000
+1073741824,128307.813000
+1073741824,128141.547000
+1073741824,128447.990000
+1073741824,128154.329000
+1073741824,127973.376000
+1073741824,128517.837000
+1073741824,128622.802000
+1073741824,128429.962000
+1073741824,128439.417000
+1073741824,128603.235000
+1073741824,128210.319000
+1073741824,128645.299000
+1073741824,128122.912000
+1073741824,128129.407000
+1073741824,128445.765000
+1073741824,128875.014000
+1073741824,128144.625000
+1073741824,128283.879000
+1073741824,129154.670000
+1073741824,128437.902000
+1073741824,128404.318000
+1073741824,128151.342000
+1073741824,129647.838000
+1073741824,128613.650000
+1073741824,128370.859000
+1073741824,128297.904000
+1073741824,128136.951000
+1073741824,128146.400000
+1073741824,127648.256000
+1073741824,128339.352000
+1073741824,128769.091000
+1073741824,128319.845000
+1073741824,128453.173000
+1073741824,128495.680000
+1073741824,128481.415000
+1073741824,128724.445000
+1073741824,128149.930000
+1073741824,128951.855000
+1073741824,128216.783000
+1073741824,128874.238000
+1073741824,127977.210000
+1073741824,128557.826000
+1073741824,128205.200000
+1073741824,128768.581000
+1073741824,128891.433000
+1073741824,128355.319000
+1073741824,128166.596000
+1073741824,128406.252000
+1073741824,128231.738000
+1073741824,128167.575000
+1073741824,127948.641000
+1073741824,127885.125000
+1073741824,128086.913000
+1073741824,128770.606000
+1073741824,128280.020000
+1073741824,128555.549000
+1073741824,128877.326000
+1073741824,128371.329000
+1073741824,128748.078000
+1073741824,129288.260000
+1073741824,128616.540000
+1073741824,128591.619000
+2147479552,263790.138000
+2147479552,262459.994000
+2147479552,266974.649000
+2147479552,262370.040000
+2147479552,262230.539000
+2147479552,263673.481000
+2147479552,261911.943000
+2147479552,264314.509000
+2147479552,262779.943000
+2147479552,267322.457000
+2147479552,262352.016000
+2147479552,263300.850000
+2147479552,263205.192000
+2147479552,261111.919000
+2147479552,262607.376000
+2147479552,261923.487000
+2147479552,266047.414000
+2147479552,264424.186000
+2147479552,261566.220000
+2147479552,261713.562000
+2147479552,262300.510000
+2147479552,261196.361000
+2147479552,264188.542000
+2147479552,266088.952000
+2147479552,261567.562000
+2147479552,262099.281000
+2147479552,264440.223000
+2147479552,261896.690000
+2147479552,262636.218000
+2147479552,262361.059000
+2147479552,262310.181000
+2147479552,261948.133000
+2147479552,266493.032000
+2147479552,263010.653000
+2147479552,262470.765000
+2147479552,262535.304000
+2147479552,265024.846000
+2147479552,264726.619000
+2147479552,262212.221000
+2147479552,261491.371000
+2147479552,262561.725000
+2147479552,261961.338000
+2147479552,264136.387000
+2147479552,262587.147000
+2147479552,261218.512000
+2147479552,261891.221000
+2147479552,263623.942000
+2147479552,262202.077000
+2147479552,262383.386000
+2147479552,262406.533000
+2147479552,262180.818000
+2147479552,262765.315000
+2147479552,262514.777000
+2147479552,262407.975000
+2147479552,264085.517000
+2147479552,261978.301000
+2147479552,261868.640000
+2147479552,263935.794000
+2147479552,263372.309000
+2147479552,267421.793000
+2147479552,262215.003000
+2147479552,263458.376000
+2147479552,262191.789000
+2147479552,262406.742000
+2147479552,263064.398000
+2147479552,262124.613000
+2147479552,262892.067000
+2147479552,263669.311000
+2147479552,262016.834000
+2147479552,261508.636000
+2147479552,262515.997000
+2147479552,262600.868000
+2147479552,264934.825000
+2147479552,261938.574000
+2147479552,262506.822000
+2147479552,262535.587000
+2147479552,262472.214000
+2147479552,264274.906000
+2147479552,262103.367000
+2147479552,262866.169000
+2147479552,262593.648000
+2147479552,261836.740000
+2147479552,264286.213000
+2147479552,262955.467000
+2147479552,262262.462000
+2147479552,262190.107000
+2147479552,265777.866000
+2147479552,262050.233000
+2147479552,265664.703000
+2147479552,262583.749000
+2147479552,264507.765000
+2147479552,263173.032000
+2147479552,262116.219000
+2147479552,264327.118000
+2147479552,263121.543000
+2147479552,262328.775000
+2147479552,261604.718000
+2147479552,264133.763000
+2147479552,261754.796000
+2147479552,262087.391000
+2147479552,261948.522000
+2147479552,262274.918000
+2147479552,263975.880000
+2147479552,262592.782000
+2147479552,262648.385000
+2147479552,262297.586000
+2147479552,262068.856000
+2147479552,262143.387000
+2147479552,264130.985000
+2147479552,262038.019000
+2147479552,262215.625000
+2147479552,262589.571000
+2147479552,263984.712000
+2147479552,262617.428000
+2147479552,261978.484000
+2147479552,262211.379000
+2147479552,264889.491000
+2147479552,262038.136000
+2147479552,262057.263000
+2147479552,262849.940000
+2147479552,262077.200000
+2147479552,261815.505000
+2147479552,264830.038000
+2147479552,262189.125000
+2147479552,262218.663000
+2147479552,261801.234000
+2147479552,262254.192000
+2147479552,264715.209000
+2147479552,262007.702000
+2147479552,262077.403000
+2147479552,262028.697000
+2147479552,264156.996000
+2147479552,266230.858000
+2147479552,262840.531000
+2147479552,262546.491000
+2147479552,262755.220000
+2147479552,265763.242000
+2147479552,264185.862000
+2147479552,262315.860000
+2147479552,263130.838000
+2147479552,261756.631000
+2147479552,262272.530000
+2147479552,263862.593000
+2147479552,262609.074000
+2147479552,262287.584000
+2147479552,262692.461000
+2147479552,261968.209000
+2147479552,264983.178000
+2147479552,262170.873000
+2147479552,261959.996000
+2147479552,262435.938000
+2147479552,263063.222000
+2147479552,261426.415000
+2147479552,262005.940000
+2147479552,262735.986000
+2147479552,261627.028000
+2147479552,261304.096000
+2147479552,264782.292000
+2147479552,262569.648000
+2147479552,262342.021000
+2147479552,262904.521000
+2147479552,264366.632000
+2147479552,262103.947000
+2147479552,262375.209000
+2147479552,262312.706000
+2147479552,263666.802000
+2147479552,262287.448000
+2147479552,262422.369000
+2147479552,262755.180000
+2147479552,261494.331000
+2147479552,261813.720000
+2147479552,263860.601000
+2147479552,262422.536000
+2147479552,261912.019000
+2147479552,262281.043000
+2147479552,262506.438000
+2147479552,262950.661000
+2147479552,264448.092000
+2147479552,262942.750000
+2147479552,262492.773000
+2147479552,263102.126000
+2147479552,264110.296000
+2147479552,260972.931000
+2147479552,262566.760000
+2147479552,261811.499000
+2147479552,267747.960000
+2147479552,263995.703000
+2147479552,262104.117000
+2147479552,262417.417000
+2147479552,261936.226000
+2147479552,261821.337000
+2147479552,262063.341000
+2147479552,266294.996000
+2147479552,261876.983000
+2147479552,263036.192000
+2147479552,262554.294000
+2147479552,263094.173000
+2147479552,264119.029000
+2147479552,261836.980000
+2147479552,266997.876000
+2147479552,261928.039000
+2147479552,263829.491000
diff --git a/dma/times_all.CSV b/dma/times_all.CSV
new file mode 100644
index 0000000..9a57783
--- /dev/null
+++ b/dma/times_all.CSV
@@ -0,0 +1,1348 @@
+bytes,VANILLA_time_usec,VANILLA_cdf,FALCO_time_usec,FALCO_cdf,TETRA_time_usec,TETRA_cdf,TRACE_time_usec,TRACE_cdf
+536870912,62.124485,0.002000000,,,,,,
+536870912,62.133164,0.004000000,,,,,,
+536870912,62.140732,0.006000000,,,,,,
+536870912,62.152292,0.008000000,,,,,,
+536870912,62.155749,0.010000000,,,,,,
+536870912,62.158193,0.012000000,,,,,,
+536870912,62.166509,0.014000000,,,,,,
+536870912,62.175452,0.016000000,,,,,,
+536870912,62.179598,0.018000000,,,,,,
+536870912,62.184051,0.020000000,,,,,,
+536870912,62.207045,0.022000000,,,,,,
+536870912,62.224148,0.024000000,,,,,,
+536870912,62.225992,0.026000000,,,,,,
+536870912,62.244530,0.028000000,,,,,,
+536870912,62.249735,0.030000000,,,,,,
+536870912,62.251258,0.032000000,,,,,,
+536870912,62.260623,0.034000000,,,,,,
+536870912,62.265579,0.036000000,,,,,,
+536870912,62.268859,0.038000000,,,,,,
+536870912,62.274388,0.040000000,,,,,,
+536870912,62.278108,0.042000000,,,,,,
+536870912,62.278528,0.044000000,,,,,,
+536870912,62.280346,0.046000000,,,,,,
+536870912,62.282757,0.048000000,,,,,,
+536870912,62.284017,0.050000000,,,,,,
+536870912,62.284099,0.052000000,,,,,,
+536870912,62.289564,0.054000000,,,,,,
+536870912,62.295703,0.056000000,,,,,,
+536870912,62.305159,0.058000000,,,,,,
+536870912,62.305625,0.060000000,,,,,,
+536870912,62.305991,0.062000000,,,,,,
+536870912,62.307663,0.064000000,,,,,,
+536870912,62.309518,0.066000000,,,,,,
+536870912,62.309991,0.068000000,,,,,,
+536870912,62.318913,0.070000000,,,,,,
+536870912,62.322953,0.072000000,,,,,,
+536870912,62.325861,0.074000000,,,,,,
+536870912,62.326257,0.076000000,,,,,,
+536870912,62.330620,0.078000000,,,,,,
+536870912,62.332588,0.080000000,,,,,,
+536870912,62.333384,0.082000000,,,,,,
+536870912,62.333771,0.084000000,,,,,,
+536870912,62.335209,0.086000000,,,,,,
+536870912,62.335476,0.088000000,,,,,,
+536870912,62.339166,0.090000000,,,,,,
+536870912,62.350567,0.092000000,,,,,,
+536870912,62.353663,0.094000000,,,,,,
+536870912,62.355935,0.096000000,,,,,,
+536870912,62.364315,0.098000000,,,,,,
+536870912,62.369384,0.100000000,,,,,,
+536870912,62.370466,0.102000000,,,,,,
+536870912,62.371309,0.104000000,,,,,,
+536870912,62.378726,0.106000000,,,,,,
+536870912,62.381274,0.108000000,,,,,,
+536870912,62.382812,0.110000000,,,,,,
+536870912,62.384657,0.112000000,,,,,,
+536870912,62.385667,0.114000000,,,,,,
+536870912,62.388391,0.116000000,,,,,,
+536870912,62.396783,0.118000000,,,,,,
+536870912,62.401027,0.120000000,,,,,,
+536870912,62.403578,0.122000000,,,,,,
+536870912,62.408084,0.124000000,,,,,,
+536870912,62.410136,0.126000000,,,,,,
+536870912,62.411288,0.128000000,,,,,,
+536870912,62.411837,0.130000000,,,,,,
+536870912,62.412857,0.132000000,,,,,,
+536870912,62.415058,0.134000000,,,,,,
+536870912,62.415332,0.136000000,,,,,,
+536870912,62.416403,0.138000000,,,,,,
+536870912,62.421176,0.140000000,,,,,,
+536870912,62.422839,0.142000000,,,,,,
+536870912,62.424527,0.144000000,,,,,,
+536870912,62.424694,0.146000000,,,,,,
+536870912,62.428797,0.148000000,,,,,,
+536870912,62.432563,0.150000000,,,,,,
+536870912,62.432666,0.152000000,,,,,,
+536870912,62.434002,0.154000000,,,,,,
+536870912,62.434742,0.156000000,,,,,,
+536870912,62.436766,0.158000000,,,,,,
+536870912,62.438804,0.160000000,,,,,,
+536870912,62.439228,0.162000000,,,,,,
+536870912,62.439295,0.164000000,,,,,,
+536870912,62.439731,0.166000000,,,,,,
+536870912,62.441645,0.168000000,,,,,,
+536870912,62.442165,0.170000000,,,,,,
+536870912,62.446029,0.172000000,,,,,,
+536870912,62.447580,0.174000000,,,,,,
+536870912,62.447880,0.176000000,,,,,,
+536870912,62.449359,0.178000000,,,,,,
+536870912,62.450325,0.180000000,,,,,,
+536870912,62.455221,0.182000000,,,,,,
+536870912,62.455261,0.184000000,,,,,,
+536870912,62.457675,0.186000000,,,,,,
+536870912,62.463230,0.188000000,,,,,,
+536870912,62.463288,0.190000000,,,,,,
+536870912,62.469022,0.192000000,,,,,,
+536870912,62.472523,0.194000000,,,,,,
+536870912,62.472676,0.196000000,,,,,,
+536870912,62.473495,0.198000000,,,,,,
+536870912,62.474981,0.200000000,,,,,,
+536870912,62.478105,0.202000000,,,,,,
+536870912,62.478265,0.204000000,,,,,,
+536870912,62.478677,0.206000000,,,,,,
+536870912,62.479207,0.208000000,,,,,,
+536870912,62.480129,0.210000000,,,,,,
+536870912,62.480349,0.212000000,,,,,,
+536870912,62.481109,0.214000000,,,,,,
+536870912,62.482651,0.216000000,,,,,,
+536870912,62.487730,0.218000000,,,,,,
+536870912,62.488099,0.220000000,,,,,,
+536870912,62.489315,0.222000000,,,,,,
+536870912,62.489951,0.224000000,,,,,,
+536870912,62.493079,0.226000000,,,,,,
+536870912,62.494681,0.228000000,,,,,,
+536870912,62.496412,0.230000000,,,,,,
+536870912,62.496659,0.232000000,,,,,,
+536870912,62.498890,0.234000000,,,,,,
+536870912,62.502175,0.236000000,,,,,,
+536870912,62.503510,0.238000000,,,,,,
+536870912,62.506144,0.240000000,,,,,,
+536870912,62.507739,0.242000000,,,,,,
+536870912,62.508295,0.244000000,,,,,,
+536870912,62.513958,0.246000000,,,,,,
+536870912,62.514527,0.248000000,,,,,,
+536870912,62.514986,0.250000000,,,,,,
+536870912,62.516329,0.252000000,,,,,,
+536870912,62.518747,0.254000000,,,,,,
+536870912,62.519180,0.256000000,,,,,,
+536870912,62.519459,0.258000000,,,,,,
+536870912,62.523417,0.260000000,,,,,,
+536870912,62.523836,0.262000000,,,,,,
+536870912,62.525505,0.264000000,,,,,,
+536870912,62.526484,0.266000000,,,,,,
+536870912,62.527839,0.268000000,,,,,,
+536870912,62.529262,0.270000000,,,,,,
+536870912,62.529361,0.272000000,,,,,,
+536870912,62.532528,0.274000000,,,,,,
+536870912,62.533501,0.276000000,,,,,,
+536870912,62.533964,0.278000000,,,,,,
+536870912,62.533974,0.280000000,,,,,,
+536870912,62.534184,0.282000000,,,,,,
+536870912,62.535563,0.284000000,,,,,,
+536870912,62.538613,0.286000000,,,,,,
+536870912,62.539719,0.288000000,,,,,,
+536870912,62.540852,0.290000000,,,,,,
+536870912,62.541721,0.292000000,,,,,,
+536870912,62.541768,0.294000000,,,,,,
+536870912,62.542120,0.296000000,,,,,,
+536870912,62.542160,0.298000000,,,,,,
+536870912,62.542557,0.300000000,,,,,,
+536870912,62.543189,0.302000000,,,,,,
+536870912,62.545001,0.304000000,,,,,,
+536870912,62.545827,0.306000000,,,,,,
+536870912,62.545987,0.308000000,,,,,,
+536870912,62.546490,0.310000000,,,,,,
+536870912,62.547216,0.312000000,,,,,,
+536870912,62.547552,0.314000000,,,,,,
+536870912,62.547835,0.316000000,,,,,,
+536870912,62.549004,0.318000000,,,,,,
+536870912,62.549671,0.320000000,,,,,,
+536870912,62.549701,0.322000000,,,,,,
+536870912,62.550700,0.324000000,,,,,,
+536870912,62.552178,0.326000000,,,,,,
+536870912,62.557444,0.328000000,,,,,,
+536870912,62.557944,0.330000000,,,,,,
+536870912,62.558493,0.332000000,,,,,,
+536870912,62.558650,0.334000000,,,,,,
+536870912,62.558849,0.336000000,,,,,,
+536870912,62.560245,0.338000000,,,,,,
+536870912,62.564218,0.340000000,,,,,,
+536870912,62.564235,0.342000000,,,,,,
+536870912,62.564245,0.344000000,,,,,,
+536870912,62.564581,0.346000000,,,,,,
+536870912,62.564798,0.348000000,,,,,,
+536870912,62.565514,0.350000000,,,,,,
+536870912,62.566193,0.352000000,,,,,,
+536870912,62.566710,0.354000000,,,,,,
+536870912,62.569417,0.356000000,,,,,,
+536870912,62.569721,0.358000000,,,,,,
+536870912,62.572787,0.360000000,,,,,,
+536870912,62.572928,0.362000000,,,,,,
+536870912,62.573117,0.364000000,,,,,,
+536870912,62.573197,0.366000000,,,,,,
+536870912,62.573317,0.368000000,,,,,,
+536870912,62.574500,0.370000000,,,,,,
+536870912,62.574845,0.372000000,,,,,,
+536870912,62.575529,0.374000000,,,,,,
+536870912,62.575925,0.376000000,,,,,,
+536870912,62.578119,0.378000000,,,,,,
+536870912,62.580338,0.380000000,,,,,,
+536870912,62.580345,0.382000000,,,,,,
+536870912,62.581887,0.384000000,,,,,,
+536870912,62.582024,0.386000000,,,,,,
+536870912,62.582626,0.388000000,,,,,,
+536870912,62.582706,0.390000000,,,,,,
+536870912,62.583878,0.392000000,,,,,,
+536870912,62.584804,0.394000000,,,,,,
+536870912,62.586296,0.396000000,,,,,,
+536870912,62.586769,0.398000000,,,,,,
+536870912,62.588754,0.400000000,,,,,,
+536870912,62.588818,0.402000000,,,,,,
+536870912,62.588838,0.404000000,,,,,,
+536870912,62.589706,0.406000000,,,,,,
+536870912,62.589763,0.408000000,,,,,,
+536870912,62.592182,0.410000000,,,,,,
+536870912,62.592863,0.412000000,,,,,,
+536870912,62.594279,0.414000000,,,,,,
+536870912,62.594400,0.416000000,,,,,,
+536870912,62.594952,0.418000000,,,,,,
+536870912,62.600187,0.420000000,,,,,,
+536870912,62.602179,0.422000000,,,,,,
+536870912,62.604078,0.424000000,,,,,,
+536870912,62.605107,0.426000000,,,,,,
+536870912,62.606322,0.428000000,,,,,,
+536870912,62.607058,0.430000000,,,,,,
+536870912,62.607168,0.432000000,,,,,,
+536870912,62.608377,0.434000000,,,,,,
+536870912,62.608381,0.436000000,,,,,,
+536870912,62.608484,0.438000000,,,,,,
+536870912,62.610269,0.440000000,,,,,,
+536870912,62.611788,0.442000000,,,,,,
+536870912,62.613086,0.444000000,,,,,,
+536870912,62.614423,0.446000000,,,,,,
+536870912,62.615908,0.448000000,,,,,,
+536870912,62.616294,0.450000000,,,,,,
+536870912,62.621626,0.452000000,,,,,,
+536870912,62.621796,0.454000000,,,,,,
+536870912,62.624220,0.456000000,,,,,,
+536870912,62.625436,0.458000000,,,,,,
+536870912,62.626102,0.460000000,,,,,,
+536870912,62.626293,0.462000000,,,,,,
+536870912,62.627934,0.464000000,,,,,,
+536870912,62.630808,0.466000000,,,,,,
+536870912,62.631501,0.468000000,,,,,,
+536870912,62.632127,0.470000000,,,,,,
+536870912,62.632583,0.472000000,,,,,,
+536870912,62.633213,0.474000000,,,,,,
+536870912,62.634045,0.476000000,,,,,,
+536870912,62.634968,0.478000000,,,,,,
+536870912,62.635814,0.480000000,,,,,,
+536870912,62.636890,0.482000000,,,,,,
+536870912,62.637859,0.484000000,,,,,,
+536870912,62.637905,0.486000000,,,,,,
+536870912,62.638212,0.488000000,,,,,,
+536870912,62.639431,0.490000000,,,,,,
+536870912,62.640969,0.492000000,,,,,,
+536870912,62.642382,0.494000000,,,,,,
+536870912,62.642588,0.496000000,,,,,,
+536870912,62.646179,0.498000000,,,,,,
+536870912,62.646212,0.500000000,,,,,,
+536870912,62.647177,0.502000000,,,,,,
+536870912,62.649046,0.504000000,,,,,,
+536870912,62.650012,0.506000000,,,,,,
+536870912,62.650012,0.508000000,,,,,,
+536870912,62.650518,0.510000000,,,,,,
+536870912,62.651418,0.512000000,,,,,,
+536870912,62.652091,0.514000000,,,,,,
+536870912,62.653932,0.516000000,,,,,,
+536870912,62.656923,0.518000000,,,,,,
+536870912,62.658089,0.520000000,,,,,,
+536870912,62.664777,0.522000000,,,,,,
+536870912,62.665865,0.524000000,,,,,,
+536870912,62.666295,0.526000000,,,,,,
+536870912,62.666921,0.528000000,,,,,,
+536870912,62.667008,0.530000000,,,,,,
+536870912,62.668810,0.532000000,,,,,,
+536870912,62.669379,0.534000000,,,,,,
+536870912,62.670804,0.536000000,,,,,,
+536870912,62.671747,0.538000000,,,,,,
+536870912,62.672902,0.540000000,,,,,,
+536870912,62.676516,0.542000000,,,,,,
+536870912,62.676689,0.544000000,,,,,,
+536870912,62.677309,0.546000000,,,,,,
+536870912,62.677549,0.548000000,,,,,,
+536870912,62.678931,0.550000000,,,,,,
+536870912,62.679880,0.552000000,,,,,,
+536870912,62.680226,0.554000000,,,,,,
+536870912,62.680513,0.556000000,,,,,,
+536870912,62.680639,0.558000000,,,,,,
+536870912,62.680750,0.560000000,,,,,,
+536870912,62.681548,0.562000000,,,,,,
+536870912,62.682102,0.564000000,,,,,,
+536870912,62.683454,0.566000000,,,,,,
+536870912,62.683497,0.568000000,,,,,,
+536870912,62.685812,0.570000000,,,,,,
+536870912,62.685868,0.572000000,,,,,,
+536870912,62.686447,0.574000000,,,,,,
+536870912,62.688616,0.576000000,,,,,,
+536870912,62.689228,0.578000000,,,,,,
+536870912,62.689409,0.580000000,,,,,,
+536870912,62.690258,0.582000000,,,,,,
+536870912,62.690574,0.584000000,,,,,,
+536870912,62.691697,0.586000000,,,,,,
+536870912,62.694411,0.588000000,,,,,,
+536870912,62.695587,0.590000000,,,,,,
+536870912,62.696280,0.592000000,,,,,,
+536870912,62.697292,0.594000000,,,,,,
+536870912,62.697615,0.596000000,,,,,,
+536870912,62.697951,0.598000000,,,,,,
+536870912,62.698327,0.600000000,,,,,,
+536870912,62.700423,0.602000000,,,,,,
+536870912,62.701908,0.604000000,,,,,,
+536870912,62.701985,0.606000000,,,,,,
+536870912,62.704899,0.608000000,,,,,,
+536870912,62.704995,0.610000000,,,,,,
+536870912,62.705855,0.612000000,,,,,,
+536870912,62.708296,0.614000000,,,,,,
+536870912,62.708645,0.616000000,,,,,,
+536870912,62.711717,0.618000000,,,,,,
+536870912,62.711720,0.620000000,,,,,,
+536870912,62.713422,0.622000000,,,,,,
+536870912,62.714081,0.624000000,,,,,,
+536870912,62.718095,0.626000000,,,,,,
+536870912,62.720639,0.628000000,,,,,,
+536870912,62.721089,0.630000000,,,,,,
+536870912,62.725671,0.632000000,,,,,,
+536870912,62.725861,0.634000000,,,,,,
+536870912,62.727093,0.636000000,,,,,,
+536870912,62.727237,0.638000000,,,,,,
+536870912,62.727829,0.640000000,,,,,,
+536870912,62.728146,0.642000000,,,,,,
+536870912,62.729018,0.644000000,,,,,,
+536870912,62.729651,0.646000000,,,,,,
+536870912,62.729947,0.648000000,,,,,,
+536870912,62.730361,0.650000000,,,,,,
+536870912,62.730791,0.652000000,,,,,,
+536870912,62.731366,0.654000000,,,,,,
+536870912,62.733388,0.656000000,,,,,,
+536870912,62.733694,0.658000000,,,,,,
+536870912,62.733764,0.660000000,,,,,,
+536870912,62.734044,0.662000000,,,,,,
+536870912,62.738454,0.664000000,,,,,,
+536870912,62.739579,0.666000000,,,,,,
+536870912,62.741331,0.668000000,,,,,,
+536870912,62.742944,0.670000000,,,,,,
+536870912,62.744142,0.672000000,,,,,,
+536870912,62.746201,0.674000000,,,,,,
+536870912,62.751229,0.676000000,,,,,,
+536870912,62.751326,0.678000000,,,,,,
+536870912,62.751735,0.680000000,,,,,,
+536870912,62.753804,0.682000000,,,,,,
+536870912,62.754363,0.684000000,,,,,,
+536870912,62.756212,0.686000000,,,,,,
+536870912,62.757261,0.688000000,,,,,,
+536870912,62.760378,0.690000000,,,,,,
+536870912,62.760738,0.692000000,,,,,,
+536870912,62.761524,0.694000000,,,,,,
+536870912,62.762543,0.696000000,,,,,,
+536870912,62.763066,0.698000000,,,,,,
+536870912,62.764595,0.700000000,,,,,,
+536870912,62.765667,0.702000000,,,,,,
+536870912,62.768318,0.704000000,,,,,,
+536870912,62.769897,0.706000000,,,,,,
+536870912,62.773077,0.708000000,,,,,,
+536870912,62.773314,0.710000000,,,,,,
+536870912,62.773361,0.712000000,,,,,,
+536870912,62.776428,0.714000000,,,,,,
+536870912,62.779532,0.716000000,,,,,,
+536870912,62.780018,0.718000000,,,,,,
+536870912,62.781617,0.720000000,,,,,,
+536870912,62.783888,0.722000000,,,,,,
+536870912,62.785367,0.724000000,,,,,,
+536870912,62.785693,0.726000000,,,,,,
+536870912,62.785897,0.728000000,,,,,,
+536870912,62.786236,0.730000000,,,,,,
+536870912,62.786592,0.732000000,,,,,,
+536870912,62.787075,0.734000000,,,,,,
+536870912,62.787149,0.736000000,,,,,,
+536870912,62.791672,0.738000000,,,,,,
+536870912,62.791795,0.740000000,,,,,,
+536870912,62.794033,0.742000000,,,,,,
+536870912,62.794227,0.744000000,,,,,,
+536870912,62.796261,0.746000000,,,,,,
+536870912,62.798826,0.748000000,,,,,,
+536870912,62.800671,0.750000000,,,,,,
+536870912,62.801267,0.752000000,,,,,,
+536870912,62.801547,0.754000000,,,,,,
+536870912,62.802146,0.756000000,,,,,,
+536870912,62.802539,0.758000000,,,,,,
+536870912,62.802879,0.760000000,,,,,,
+536870912,62.804091,0.762000000,,,,,,
+536870912,62.804774,0.764000000,,,,,,
+536870912,62.805197,0.766000000,,,,,,
+536870912,62.807078,0.768000000,,,,,,
+536870912,62.807122,0.770000000,,,,,,
+536870912,62.808381,0.772000000,,,,,,
+536870912,62.810079,0.774000000,,,,,,
+536870912,62.810612,0.776000000,,,,,,
+536870912,62.812054,0.778000000,,,,,,
+536870912,62.812750,0.780000000,,,,,,
+536870912,62.818679,0.782000000,,,,,,
+536870912,62.818725,0.784000000,,,,,,
+536870912,62.819388,0.786000000,,,,,,
+536870912,62.825203,0.788000000,,,,,,
+536870912,62.825782,0.790000000,,,,,,
+536870912,62.830069,0.792000000,,,,,,
+536870912,62.830566,0.794000000,,,,,,
+536870912,62.833153,0.796000000,,,,,,
+536870912,62.835608,0.798000000,,,,,,
+536870912,62.848929,0.800000000,,,,,,
+536870912,62.851114,0.802000000,,,,,,
+536870912,62.853509,0.804000000,,,,,,
+536870912,62.855561,0.806000000,,,,,,
+536870912,62.855877,0.808000000,,,,,,
+536870912,62.858625,0.810000000,,,,,,
+536870912,62.858792,0.812000000,,,,,,
+536870912,62.862625,0.814000000,,,,,,
+536870912,62.863360,0.816000000,,,,,,
+536870912,62.865652,0.818000000,,,,,,
+536870912,62.870965,0.820000000,,,,,,
+536870912,62.872860,0.822000000,,,,,,
+536870912,62.872949,0.824000000,,,,,,
+536870912,62.873396,0.826000000,,,,,,
+536870912,62.873542,0.828000000,,,,,,
+536870912,62.875480,0.830000000,,,,,,
+536870912,62.879057,0.832000000,,,,,,
+536870912,62.884013,0.834000000,,,,,,
+536870912,62.884779,0.836000000,,,,,,
+536870912,62.885199,0.838000000,,,,,,
+536870912,62.890121,0.840000000,,,,,,
+536870912,62.891373,0.842000000,,,,,,
+536870912,62.891899,0.844000000,,,,,,
+536870912,62.892116,0.846000000,,,,,,
+536870912,62.893508,0.848000000,,,,,,
+536870912,62.895713,0.850000000,,,,,,
+536870912,62.902778,0.852000000,,,,,,
+536870912,62.903463,0.854000000,,,,,,
+536870912,62.908543,0.856000000,,,,,,
+536870912,62.908809,0.858000000,,,,,,
+536870912,62.913852,0.860000000,,,,,,
+536870912,62.914608,0.862000000,,,,,,
+536870912,62.914824,0.864000000,,,,,,
+536870912,62.918914,0.866000000,,,,,,
+536870912,62.923446,0.868000000,,,,,,
+536870912,62.925298,0.870000000,,,,,,
+536870912,62.929012,0.872000000,,,,,,
+536870912,62.931123,0.874000000,,,,,,
+536870912,62.934840,0.876000000,,,,,,
+536870912,62.936775,0.878000000,,,,,,
+536870912,62.937704,0.880000000,,,,,,
+536870912,62.941834,0.882000000,,,,,,
+536870912,62.945061,0.884000000,,,,,,
+536870912,62.946387,0.886000000,,,,,,
+536870912,62.959419,0.888000000,,,,,,
+536870912,62.965014,0.890000000,,,,,,
+536870912,62.966980,0.892000000,,,,,,
+536870912,62.972531,0.894000000,,,,,,
+536870912,62.977907,0.896000000,,,,,,
+536870912,62.981294,0.898000000,,,,,,
+536870912,62.982650,0.900000000,,,,,,
+536870912,62.984421,0.902000000,,,,,,
+536870912,62.985177,0.904000000,,,,,,
+536870912,62.987958,0.906000000,,,,,,
+536870912,62.998492,0.908000000,,,,,,
+536870912,63.001890,0.910000000,,,,,,
+536870912,63.003721,0.912000000,,,,,,
+536870912,63.015685,0.914000000,,,,,,
+536870912,63.020087,0.916000000,,,,,,
+536870912,63.020347,0.918000000,,,,,,
+536870912,63.021730,0.920000000,,,,,,
+536870912,63.023574,0.922000000,,,,,,
+536870912,63.024823,0.924000000,,,,,,
+536870912,63.025736,0.926000000,,,,,,
+536870912,63.026353,0.928000000,,,,,,
+536870912,63.028091,0.930000000,,,,,,
+536870912,63.031471,0.932000000,,,,,,
+536870912,63.035128,0.934000000,,,,,,
+536870912,63.042286,0.936000000,,,,,,
+536870912,63.048517,0.938000000,,,,,,
+536870912,63.057806,0.940000000,,,,,,
+536870912,63.058195,0.942000000,,,,,,
+536870912,63.062488,0.944000000,,,,,,
+536870912,63.074874,0.946000000,,,,,,
+536870912,63.075397,0.948000000,,,,,,
+536870912,63.081472,0.950000000,,,,,,
+536870912,63.084153,0.952000000,,,,,,
+536870912,63.086085,0.954000000,,,,,,
+536870912,63.129698,0.956000000,,,,,,
+536870912,63.132656,0.958000000,,,,,,
+536870912,63.133721,0.960000000,,,,,,
+536870912,63.134707,0.962000000,,,,,,
+536870912,63.165921,0.964000000,,,,,,
+536870912,63.168508,0.966000000,,,,,,
+536870912,63.172788,0.968000000,,,,,,
+536870912,63.180418,0.970000000,,,,,,
+536870912,63.184155,0.972000000,,,,,,
+536870912,63.184538,0.974000000,,,,,,
+536870912,63.194962,0.976000000,,,,,,
+536870912,63.267072,0.978000000,,,,,,
+536870912,63.267841,0.980000000,,,,,,
+536870912,63.325052,0.982000000,,,,,,
+536870912,63.443644,0.984000000,,,,,,
+536870912,63.447465,0.986000000,,,,,,
+536870912,63.447784,0.988000000,,,,,,
+536870912,63.489795,0.990000000,,,,,,
+536870912,63.509868,0.992000000,,,,,,
+536870912,63.551153,0.994000000,,,,,,
+536870912,63.607369,0.996000000,,,,,,
+536870912,63.771759,0.998000000,,,,,,
+536870912,63.898955,1.000000000,,,,,,
+1073741824,127.446531,0.002237136,,,,,,
+1073741824,127.515396,0.004474273,,,,,,
+1073741824,127.599091,0.006711409,,,,,,
+1073741824,127.604247,0.008948546,,,,,,
+1073741824,127.648256,0.011185682,,,,,,
+1073741824,127.684083,0.013422819,,,,,,
+1073741824,127.714940,0.015659955,,,,,,
+1073741824,127.716858,0.017897092,,,,,,
+1073741824,127.774269,0.020134228,,,,,,
+1073741824,127.790205,0.022371365,,,,,,
+1073741824,127.824060,0.024608501,,,,,,
+1073741824,127.832440,0.026845638,,,,,,
+1073741824,127.859530,0.029082774,,,,,,
+1073741824,127.870195,0.031319911,,,,,,
+1073741824,127.874178,0.033557047,,,,,,
+1073741824,127.876599,0.035794183,,,,,,
+1073741824,127.884552,0.038031320,,,,,,
+1073741824,127.885125,0.040268456,,,,,,
+1073741824,127.892918,0.042505593,,,,,,
+1073741824,127.893984,0.044742729,,,,,,
+1073741824,127.914157,0.046979866,,,,,,
+1073741824,127.934537,0.049217002,,,,,,
+1073741824,127.935579,0.051454139,,,,,,
+1073741824,127.943785,0.053691275,,,,,,
+1073741824,127.944112,0.055928412,,,,,,
+1073741824,127.948641,0.058165548,,,,,,
+1073741824,127.950805,0.060402685,,,,,,
+1073741824,127.956108,0.062639821,,,,,,
+1073741824,127.956854,0.064876957,,,,,,
+1073741824,127.957104,0.067114094,,,,,,
+1073741824,127.960185,0.069351230,,,,,,
+1073741824,127.968264,0.071588367,,,,,,
+1073741824,127.968604,0.073825503,,,,,,
+1073741824,127.972604,0.076062640,,,,,,
+1073741824,127.973376,0.078299776,,,,,,
+1073741824,127.974289,0.080536913,,,,,,
+1073741824,127.976328,0.082774049,,,,,,
+1073741824,127.977210,0.085011186,,,,,,
+1073741824,127.987158,0.087248322,,,,,,
+1073741824,127.990602,0.089485459,,,,,,
+1073741824,127.990905,0.091722595,,,,,,
+1073741824,127.991351,0.093959732,,,,,,
+1073741824,127.993060,0.096196868,,,,,,
+1073741824,127.996603,0.098434004,,,,,,
+1073741824,128.002158,0.100671141,,,,,,
+1073741824,128.013339,0.102908277,,,,,,
+1073741824,128.023144,0.105145414,,,,,,
+1073741824,128.031647,0.107382550,,,,,,
+1073741824,128.037838,0.109619687,,,,,,
+1073741824,128.037945,0.111856823,,,,,,
+1073741824,128.044730,0.114093960,,,,,,
+1073741824,128.051194,0.116331096,,,,,,
+1073741824,128.055880,0.118568233,,,,,,
+1073741824,128.056730,0.120805369,,,,,,
+1073741824,128.058615,0.123042506,,,,,,
+1073741824,128.058697,0.125279642,,,,,,
+1073741824,128.059880,0.127516779,,,,,,
+1073741824,128.068290,0.129753915,,,,,,
+1073741824,128.069519,0.131991051,,,,,,
+1073741824,128.071636,0.134228188,,,,,,
+1073741824,128.071950,0.136465324,,,,,,
+1073741824,128.076142,0.138702461,,,,,,
+1073741824,128.076283,0.140939597,,,,,,
+1073741824,128.076359,0.143176734,,,,,,
+1073741824,128.078071,0.145413870,,,,,,
+1073741824,128.082507,0.147651007,,,,,,
+1073741824,128.083550,0.149888143,,,,,,
+1073741824,128.084382,0.152125280,,,,,,
+1073741824,128.086913,0.154362416,,,,,,
+1073741824,128.087496,0.156599553,,,,,,
+1073741824,128.088782,0.158836689,,,,,,
+1073741824,128.089221,0.161073826,,,,,,
+1073741824,128.089378,0.163310962,,,,,,
+1073741824,128.089438,0.165548098,,,,,,
+1073741824,128.093558,0.167785235,,,,,,
+1073741824,128.101168,0.170022371,,,,,,
+1073741824,128.102507,0.172259508,,,,,,
+1073741824,128.103130,0.174496644,,,,,,
+1073741824,128.108995,0.176733781,,,,,,
+1073741824,128.115426,0.178970917,,,,,,
+1073741824,128.115959,0.181208054,,,,,,
+1073741824,128.118051,0.183445190,,,,,,
+1073741824,128.119159,0.185682327,,,,,,
+1073741824,128.119968,0.187919463,,,,,,
+1073741824,128.120941,0.190156600,,,,,,
+1073741824,128.121184,0.192393736,,,,,,
+1073741824,128.122912,0.194630872,,,,,,
+1073741824,128.126367,0.196868009,,,,,,
+1073741824,128.128012,0.199105145,,,,,,
+1073741824,128.128608,0.201342282,,,,,,
+1073741824,128.129407,0.203579418,,,,,,
+1073741824,128.136951,0.205816555,,,,,,
+1073741824,128.137764,0.208053691,,,,,,
+1073741824,128.139929,0.210290828,,,,,,
+1073741824,128.141547,0.212527964,,,,,,
+1073741824,128.144625,0.214765101,,,,,,
+1073741824,128.146400,0.217002237,,,,,,
+1073741824,128.148474,0.219239374,,,,,,
+1073741824,128.149930,0.221476510,,,,,,
+1073741824,128.151342,0.223713647,,,,,,
+1073741824,128.154329,0.225950783,,,,,,
+1073741824,128.158873,0.228187919,,,,,,
+1073741824,128.159405,0.230425056,,,,,,
+1073741824,128.166596,0.232662192,,,,,,
+1073741824,128.167575,0.234899329,,,,,,
+1073741824,128.169736,0.237136465,,,,,,
+1073741824,128.169756,0.239373602,,,,,,
+1073741824,128.170772,0.241610738,,,,,,
+1073741824,128.170885,0.243847875,,,,,,
+1073741824,128.174726,0.246085011,,,,,,
+1073741824,128.177533,0.248322148,,,,,,
+1073741824,128.180281,0.250559284,,,,,,
+1073741824,128.182256,0.252796421,,,,,,
+1073741824,128.185496,0.255033557,,,,,,
+1073741824,128.188643,0.257270694,,,,,,
+1073741824,128.188844,0.259507830,,,,,,
+1073741824,128.192694,0.261744966,,,,,,
+1073741824,128.194076,0.263982103,,,,,,
+1073741824,128.195744,0.266219239,,,,,,
+1073741824,128.204850,0.268456376,,,,,,
+1073741824,128.205200,0.270693512,,,,,,
+1073741824,128.205573,0.272930649,,,,,,
+1073741824,128.208807,0.275167785,,,,,,
+1073741824,128.209869,0.277404922,,,,,,
+1073741824,128.210319,0.279642058,,,,,,
+1073741824,128.211857,0.281879195,,,,,,
+1073741824,128.214452,0.284116331,,,,,,
+1073741824,128.216783,0.286353468,,,,,,
+1073741824,128.221509,0.288590604,,,,,,
+1073741824,128.228653,0.290827740,,,,,,
+1073741824,128.229360,0.293064877,,,,,,
+1073741824,128.231738,0.295302013,,,,,,
+1073741824,128.238908,0.297539150,,,,,,
+1073741824,128.241042,0.299776286,,,,,,
+1073741824,128.243064,0.302013423,,,,,,
+1073741824,128.244193,0.304250559,,,,,,
+1073741824,128.246285,0.306487696,,,,,,
+1073741824,128.247481,0.308724832,,,,,,
+1073741824,128.249322,0.310961969,,,,,,
+1073741824,128.254262,0.313199105,,,,,,
+1073741824,128.256137,0.315436242,,,,,,
+1073741824,128.257949,0.317673378,,,,,,
+1073741824,128.261116,0.319910515,,,,,,
+1073741824,128.264912,0.322147651,,,,,,
+1073741824,128.265632,0.324384787,,,,,,
+1073741824,128.274714,0.326621924,,,,,,
+1073741824,128.275087,0.328859060,,,,,,
+1073741824,128.275957,0.331096197,,,,,,
+1073741824,128.278417,0.333333333,,,,,,
+1073741824,128.278807,0.335570470,,,,,,
+1073741824,128.280020,0.337807606,,,,,,
+1073741824,128.280106,0.340044743,,,,,,
+1073741824,128.280399,0.342281879,,,,,,
+1073741824,128.280623,0.344519016,,,,,,
+1073741824,128.283879,0.346756152,,,,,,
+1073741824,128.285098,0.348993289,,,,,,
+1073741824,128.286194,0.351230425,,,,,,
+1073741824,128.286444,0.353467562,,,,,,
+1073741824,128.289519,0.355704698,,,,,,
+1073741824,128.289664,0.357941834,,,,,,
+1073741824,128.290294,0.360178971,,,,,,
+1073741824,128.295273,0.362416107,,,,,,
+1073741824,128.297754,0.364653244,,,,,,
+1073741824,128.297904,0.366890380,,,,,,
+1073741824,128.303416,0.369127517,,,,,,
+1073741824,128.304672,0.371364653,,,,,,
+1073741824,128.307813,0.373601790,,,,,,
+1073741824,128.309818,0.375838926,,,,,,
+1073741824,128.310001,0.378076063,,,,,,
+1073741824,128.310987,0.380313199,,,,,,
+1073741824,128.312002,0.382550336,,,,,,
+1073741824,128.313198,0.384787472,,,,,,
+1073741824,128.315735,0.387024609,,,,,,
+1073741824,128.317008,0.389261745,,,,,,
+1073741824,128.318613,0.391498881,,,,,,
+1073741824,128.319845,0.393736018,,,,,,
+1073741824,128.322713,0.395973154,,,,,,
+1073741824,128.322713,0.398210291,,,,,,
+1073741824,128.324245,0.400447427,,,,,,
+1073741824,128.327067,0.402684564,,,,,,
+1073741824,128.328178,0.404921700,,,,,,
+1073741824,128.328525,0.407158837,,,,,,
+1073741824,128.336172,0.409395973,,,,,,
+1073741824,128.336542,0.411633110,,,,,,
+1073741824,128.338170,0.413870246,,,,,,
+1073741824,128.338553,0.416107383,,,,,,
+1073741824,128.339352,0.418344519,,,,,,
+1073741824,128.339703,0.420581655,,,,,,
+1073741824,128.341067,0.422818792,,,,,,
+1073741824,128.343909,0.425055928,,,,,,
+1073741824,128.344768,0.427293065,,,,,,
+1073741824,128.351142,0.429530201,,,,,,
+1073741824,128.352948,0.431767338,,,,,,
+1073741824,128.353920,0.434004474,,,,,,
+1073741824,128.354517,0.436241611,,,,,,
+1073741824,128.354746,0.438478747,,,,,,
+1073741824,128.355319,0.440715884,,,,,,
+1073741824,128.356101,0.442953020,,,,,,
+1073741824,128.358822,0.445190157,,,,,,
+1073741824,128.358903,0.447427293,,,,,,
+1073741824,128.361587,0.449664430,,,,,,
+1073741824,128.362946,0.451901566,,,,,,
+1073741824,128.363135,0.454138702,,,,,,
+1073741824,128.363931,0.456375839,,,,,,
+1073741824,128.364361,0.458612975,,,,,,
+1073741824,128.366089,0.460850112,,,,,,
+1073741824,128.367648,0.463087248,,,,,,
+1073741824,128.368514,0.465324385,,,,,,
+1073741824,128.369117,0.467561521,,,,,,
+1073741824,128.369899,0.469798658,,,,,,
+1073741824,128.370859,0.472035794,,,,,,
+1073741824,128.371329,0.474272931,,,,,,
+1073741824,128.375362,0.476510067,,,,,,
+1073741824,128.376334,0.478747204,,,,,,
+1073741824,128.382129,0.480984340,,,,,,
+1073741824,128.383771,0.483221477,,,,,,
+1073741824,128.390759,0.485458613,,,,,,
+1073741824,128.391215,0.487695749,,,,,,
+1073741824,128.401486,0.489932886,,,,,,
+1073741824,128.401736,0.492170022,,,,,,
+1073741824,128.404318,0.494407159,,,,,,
+1073741824,128.406252,0.496644295,,,,,,
+1073741824,128.406949,0.498881432,,,,,,
+1073741824,128.407445,0.501118568,,,,,,
+1073741824,128.407494,0.503355705,,,,,,
+1073741824,128.408284,0.505592841,,,,,,
+1073741824,128.408480,0.507829978,,,,,,
+1073741824,128.411867,0.510067114,,,,,,
+1073741824,128.413916,0.512304251,,,,,,
+1073741824,128.414345,0.514541387,,,,,,
+1073741824,128.416381,0.516778523,,,,,,
+1073741824,128.419374,0.519015660,,,,,,
+1073741824,128.419617,0.521252796,,,,,,
+1073741824,128.420294,0.523489933,,,,,,
+1073741824,128.421690,0.525727069,,,,,,
+1073741824,128.423598,0.527964206,,,,,,
+1073741824,128.424816,0.530201342,,,,,,
+1073741824,128.425452,0.532438479,,,,,,
+1073741824,128.427297,0.534675615,,,,,,
+1073741824,128.429009,0.536912752,,,,,,
+1073741824,128.429962,0.539149888,,,,,,
+1073741824,128.430049,0.541387025,,,,,,
+1073741824,128.431831,0.543624161,,,,,,
+1073741824,128.434178,0.545861298,,,,,,
+1073741824,128.434631,0.548098434,,,,,,
+1073741824,128.437902,0.550335570,,,,,,
+1073741824,128.437925,0.552572707,,,,,,
+1073741824,128.438721,0.554809843,,,,,,
+1073741824,128.439045,0.557046980,,,,,,
+1073741824,128.439417,0.559284116,,,,,,
+1073741824,128.442858,0.561521253,,,,,,
+1073741824,128.443561,0.563758389,,,,,,
+1073741824,128.445685,0.565995526,,,,,,
+1073741824,128.445765,0.568232662,,,,,,
+1073741824,128.446424,0.570469799,,,,,,
+1073741824,128.447990,0.572706935,,,,,,
+1073741824,128.450318,0.574944072,,,,,,
+1073741824,128.451021,0.577181208,,,,,,
+1073741824,128.451081,0.579418345,,,,,,
+1073741824,128.451937,0.581655481,,,,,,
+1073741824,128.452040,0.583892617,,,,,,
+1073741824,128.453173,0.586129754,,,,,,
+1073741824,128.454171,0.588366890,,,,,,
+1073741824,128.455723,0.590604027,,,,,,
+1073741824,128.458069,0.592841163,,,,,,
+1073741824,128.458551,0.595078300,,,,,,
+1073741824,128.462382,0.597315436,,,,,,
+1073741824,128.462595,0.599552573,,,,,,
+1073741824,128.464786,0.601789709,,,,,,
+1073741824,128.468556,0.604026846,,,,,,
+1073741824,128.468646,0.606263982,,,,,,
+1073741824,128.471310,0.608501119,,,,,,
+1073741824,128.477029,0.610738255,,,,,,
+1073741824,128.477631,0.612975391,,,,,,
+1073741824,128.478527,0.615212528,,,,,,
+1073741824,128.481415,0.617449664,,,,,,
+1073741824,128.482820,0.619686801,,,,,,
+1073741824,128.484153,0.621923937,,,,,,
+1073741824,128.484916,0.624161074,,,,,,
+1073741824,128.491011,0.626398210,,,,,,
+1073741824,128.493522,0.628635347,,,,,,
+1073741824,128.493694,0.630872483,,,,,,
+1073741824,128.494464,0.633109620,,,,,,
+1073741824,128.495450,0.635346756,,,,,,
+1073741824,128.495680,0.637583893,,,,,,
+1073741824,128.497148,0.639821029,,,,,,
+1073741824,128.502737,0.642058166,,,,,,
+1073741824,128.502897,0.644295302,,,,,,
+1073741824,128.511373,0.646532438,,,,,,
+1073741824,128.511766,0.648769575,,,,,,
+1073741824,128.513517,0.651006711,,,,,,
+1073741824,128.515409,0.653243848,,,,,,
+1073741824,128.516655,0.655480984,,,,,,
+1073741824,128.517837,0.657718121,,,,,,
+1073741824,128.520425,0.659955257,,,,,,
+1073741824,128.534127,0.662192394,,,,,,
+1073741824,128.536389,0.664429530,,,,,,
+1073741824,128.537644,0.666666667,,,,,,
+1073741824,128.538274,0.668903803,,,,,,
+1073741824,128.539070,0.671140940,,,,,,
+1073741824,128.541737,0.673378076,,,,,,
+1073741824,128.547372,0.675615213,,,,,,
+1073741824,128.548555,0.677852349,,,,,,
+1073741824,128.549018,0.680089485,,,,,,
+1073741824,128.549394,0.682326622,,,,,,
+1073741824,128.552961,0.684563758,,,,,,
+1073741824,128.555246,0.686800895,,,,,,
+1073741824,128.555549,0.689038031,,,,,,
+1073741824,128.557826,0.691275168,,,,,,
+1073741824,128.558379,0.693512304,,,,,,
+1073741824,128.558427,0.695749441,,,,,,
+1073741824,128.561578,0.697986577,,,,,,
+1073741824,128.561973,0.700223714,,,,,,
+1073741824,128.562510,0.702460850,,,,,,
+1073741824,128.568588,0.704697987,,,,,,
+1073741824,128.570736,0.706935123,,,,,,
+1073741824,128.575096,0.709172260,,,,,,
+1073741824,128.576432,0.711409396,,,,,,
+1073741824,128.588944,0.713646532,,,,,,
+1073741824,128.591619,0.715883669,,,,,,
+1073741824,128.592078,0.718120805,,,,,,
+1073741824,128.592371,0.720357942,,,,,,
+1073741824,128.595775,0.722595078,,,,,,
+1073741824,128.603235,0.724832215,,,,,,
+1073741824,128.605643,0.727069351,,,,,,
+1073741824,128.611158,0.729306488,,,,,,
+1073741824,128.613650,0.731543624,,,,,,
+1073741824,128.615521,0.733780761,,,,,,
+1073741824,128.616540,0.736017897,,,,,,
+1073741824,128.620783,0.738255034,,,,,,
+1073741824,128.622802,0.740492170,,,,,,
+1073741824,128.624531,0.742729306,,,,,,
+1073741824,128.627834,0.744966443,,,,,,
+1073741824,128.628890,0.747203579,,,,,,
+1073741824,128.634699,0.749440716,,,,,,
+1073741824,128.636430,0.751677852,,,,,,
+1073741824,128.637296,0.753914989,,,,,,
+1073741824,128.640350,0.756152125,,,,,,
+1073741824,128.642808,0.758389262,,,,,,
+1073741824,128.645299,0.760626398,,,,,,
+1073741824,128.647038,0.762863535,,,,,,
+1073741824,128.650075,0.765100671,,,,,,
+1073741824,128.653792,0.767337808,,,,,,
+1073741824,128.656797,0.769574944,,,,,,
+1073741824,128.656952,0.771812081,,,,,,
+1073741824,128.665233,0.774049217,,,,,,
+1073741824,128.674251,0.776286353,,,,,,
+1073741824,128.677699,0.778523490,,,,,,
+1073741824,128.688396,0.780760626,,,,,,
+1073741824,128.689945,0.782997763,,,,,,
+1073741824,128.690881,0.785234899,,,,,,
+1073741824,128.696176,0.787472036,,,,,,
+1073741824,128.697256,0.789709172,,,,,,
+1073741824,128.699314,0.791946309,,,,,,
+1073741824,128.709755,0.794183445,,,,,,
+1073741824,128.712159,0.796420582,,,,,,
+1073741824,128.713112,0.798657718,,,,,,
+1073741824,128.714478,0.800894855,,,,,,
+1073741824,128.714833,0.803131991,,,,,,
+1073741824,128.719087,0.805369128,,,,,,
+1073741824,128.719556,0.807606264,,,,,,
+1073741824,128.720388,0.809843400,,,,,,
+1073741824,128.724445,0.812080537,,,,,,
+1073741824,128.727120,0.814317673,,,,,,
+1073741824,128.737355,0.816554810,,,,,,
+1073741824,128.738687,0.818791946,,,,,,
+1073741824,128.740985,0.821029083,,,,,,
+1073741824,128.742763,0.823266219,,,,,,
+1073741824,128.748078,0.825503356,,,,,,
+1073741824,128.750373,0.827740492,,,,,,
+1073741824,128.754600,0.829977629,,,,,,
+1073741824,128.766013,0.832214765,,,,,,
+1073741824,128.768581,0.834451902,,,,,,
+1073741824,128.769091,0.836689038,,,,,,
+1073741824,128.770606,0.838926174,,,,,,
+1073741824,128.780211,0.841163311,,,,,,
+1073741824,128.783615,0.843400447,,,,,,
+1073741824,128.794189,0.845637584,,,,,,
+1073741824,128.801593,0.847874720,,,,,,
+1073741824,128.804554,0.850111857,,,,,,
+1073741824,128.806602,0.852348993,,,,,,
+1073741824,128.807439,0.854586130,,,,,,
+1073741824,128.811138,0.856823266,,,,,,
+1073741824,128.814413,0.859060403,,,,,,
+1073741824,128.818708,0.861297539,,,,,,
+1073741824,128.831561,0.863534676,,,,,,
+1073741824,128.843308,0.865771812,,,,,,
+1073741824,128.847934,0.868008949,,,,,,
+1073741824,128.848464,0.870246085,,,,,,
+1073741824,128.869322,0.872483221,,,,,,
+1073741824,128.874149,0.874720358,,,,,,
+1073741824,128.874238,0.876957494,,,,,,
+1073741824,128.875014,0.879194631,,,,,,
+1073741824,128.877326,0.881431767,,,,,,
+1073741824,128.879380,0.883668904,,,,,,
+1073741824,128.891433,0.885906040,,,,,,
+1073741824,128.897189,0.888143177,,,,,,
+1073741824,128.905852,0.890380313,,,,,,
+1073741824,128.910924,0.892617450,,,,,,
+1073741824,128.912622,0.894854586,,,,,,
+1073741824,128.913801,0.897091723,,,,,,
+1073741824,128.923293,0.899328859,,,,,,
+1073741824,128.929908,0.901565996,,,,,,
+1073741824,128.933548,0.903803132,,,,,,
+1073741824,128.951855,0.906040268,,,,,,
+1073741824,128.958677,0.908277405,,,,,,
+1073741824,128.965128,0.910514541,,,,,,
+1073741824,128.969664,0.912751678,,,,,,
+1073741824,128.970003,0.914988814,,,,,,
+1073741824,128.984071,0.917225951,,,,,,
+1073741824,129.017446,0.919463087,,,,,,
+1073741824,129.032084,0.921700224,,,,,,
+1073741824,129.081469,0.923937360,,,,,,
+1073741824,129.109411,0.926174497,,,,,,
+1073741824,129.143886,0.928411633,,,,,,
+1073741824,129.147676,0.930648770,,,,,,
+1073741824,129.154670,0.932885906,,,,,,
+1073741824,129.162666,0.935123043,,,,,,
+1073741824,129.231128,0.937360179,,,,,,
+1073741824,129.244644,0.939597315,,,,,,
+1073741824,129.256167,0.941834452,,,,,,
+1073741824,129.288260,0.944071588,,,,,,
+1073741824,129.343073,0.946308725,,,,,,
+1073741824,129.359483,0.948545861,,,,,,
+1073741824,129.389377,0.950782998,,,,,,
+1073741824,129.391306,0.953020134,,,,,,
+1073741824,129.467351,0.955257271,,,,,,
+1073741824,129.526508,0.957494407,,,,,,
+1073741824,129.535603,0.959731544,,,,,,
+1073741824,129.542817,0.961968680,,,,,,
+1073741824,129.586406,0.964205817,,,,,,
+1073741824,129.598053,0.966442953,,,,,,
+1073741824,129.616984,0.968680089,,,,,,
+1073741824,129.643548,0.970917226,,,,,,
+1073741824,129.647838,0.973154362,,,,,,
+1073741824,129.728956,0.975391499,,,,,,
+1073741824,129.734960,0.977628635,,,,,,
+1073741824,129.774847,0.979865772,,,,,,
+1073741824,129.789744,0.982102908,,,,,,
+1073741824,129.808484,0.984340045,,,,,,
+1073741824,129.837624,0.986577181,,,,,,
+1073741824,129.844491,0.988814318,,,,,,
+1073741824,129.860524,0.991051454,,,,,,
+1073741824,129.871994,0.993288591,,,,,,
+1073741824,129.955992,0.995525727,,,,,,
+1073741824,130.043465,0.997762864,,,,,,
+1073741824,130.074652,1.000000000,,,,,,
+2147479552,260.972931,0.002500000,,,,,,
+2147479552,261.111919,0.005000000,,,,,,
+2147479552,261.120789,0.007500000,,,,,,
+2147479552,261.196361,0.010000000,,,,,,
+2147479552,261.218512,0.012500000,,,,,,
+2147479552,261.238878,0.015000000,,,,,,
+2147479552,261.290734,0.017500000,,,,,,
+2147479552,261.304096,0.020000000,,,,,,
+2147479552,261.426415,0.022500000,,,,,,
+2147479552,261.480962,0.025000000,,,,,,
+2147479552,261.488003,0.027500000,,,,,,
+2147479552,261.491371,0.030000000,,,,,,
+2147479552,261.494331,0.032500000,,,,,,
+2147479552,261.502801,0.035000000,,,,,,
+2147479552,261.508636,0.037500000,,,,,,
+2147479552,261.522943,0.040000000,,,,,,
+2147479552,261.527636,0.042500000,,,,,,
+2147479552,261.530424,0.045000000,,,,,,
+2147479552,261.538850,0.047500000,,,,,,
+2147479552,261.540662,0.050000000,,,,,,
+2147479552,261.541002,0.052500000,,,,,,
+2147479552,261.566220,0.055000000,,,,,,
+2147479552,261.567562,0.057500000,,,,,,
+2147479552,261.597637,0.060000000,,,,,,
+2147479552,261.604718,0.062500000,,,,,,
+2147479552,261.615135,0.065000000,,,,,,
+2147479552,261.624508,0.067500000,,,,,,
+2147479552,261.627028,0.070000000,,,,,,
+2147479552,261.664370,0.072500000,,,,,,
+2147479552,261.675960,0.075000000,,,,,,
+2147479552,261.692183,0.077500000,,,,,,
+2147479552,261.694275,0.080000000,,,,,,
+2147479552,261.699450,0.082500000,,,,,,
+2147479552,261.703953,0.085000000,,,,,,
+2147479552,261.713562,0.087500000,,,,,,
+2147479552,261.736692,0.090000000,,,,,,
+2147479552,261.745018,0.092500000,,,,,,
+2147479552,261.751809,0.095000000,,,,,,
+2147479552,261.754387,0.097500000,,,,,,
+2147479552,261.754796,0.100000000,,,,,,
+2147479552,261.756631,0.102500000,,,,,,
+2147479552,261.780691,0.105000000,,,,,,
+2147479552,261.787249,0.107500000,,,,,,
+2147479552,261.796568,0.110000000,,,,,,
+2147479552,261.801234,0.112500000,,,,,,
+2147479552,261.811499,0.115000000,,,,,,
+2147479552,261.813720,0.117500000,,,,,,
+2147479552,261.815505,0.120000000,,,,,,
+2147479552,261.821337,0.122500000,,,,,,
+2147479552,261.825537,0.125000000,,,,,,
+2147479552,261.831012,0.127500000,,,,,,
+2147479552,261.835525,0.130000000,,,,,,
+2147479552,261.836740,0.132500000,,,,,,
+2147479552,261.836980,0.135000000,,,,,,
+2147479552,261.850498,0.137500000,,,,,,
+2147479552,261.850561,0.140000000,,,,,,
+2147479552,261.850588,0.142500000,,,,,,
+2147479552,261.853796,0.145000000,,,,,,
+2147479552,261.864783,0.147500000,,,,,,
+2147479552,261.868640,0.150000000,,,,,,
+2147479552,261.876983,0.152500000,,,,,,
+2147479552,261.891221,0.155000000,,,,,,
+2147479552,261.894035,0.157500000,,,,,,
+2147479552,261.894308,0.160000000,,,,,,
+2147479552,261.896690,0.162500000,,,,,,
+2147479552,261.898798,0.165000000,,,,,,
+2147479552,261.911943,0.167500000,,,,,,
+2147479552,261.912019,0.170000000,,,,,,
+2147479552,261.912836,0.172500000,,,,,,
+2147479552,261.913748,0.175000000,,,,,,
+2147479552,261.923487,0.177500000,,,,,,
+2147479552,261.925048,0.180000000,,,,,,
+2147479552,261.927260,0.182500000,,,,,,
+2147479552,261.927500,0.185000000,,,,,,
+2147479552,261.928039,0.187500000,,,,,,
+2147479552,261.928902,0.190000000,,,,,,
+2147479552,261.932302,0.192500000,,,,,,
+2147479552,261.936226,0.195000000,,,,,,
+2147479552,261.938574,0.197500000,,,,,,
+2147479552,261.940632,0.200000000,,,,,,
+2147479552,261.948133,0.202500000,,,,,,
+2147479552,261.948522,0.205000000,,,,,,
+2147479552,261.953414,0.207500000,,,,,,
+2147479552,261.959996,0.210000000,,,,,,
+2147479552,261.960448,0.212500000,,,,,,
+2147479552,261.961338,0.215000000,,,,,,
+2147479552,261.968209,0.217500000,,,,,,
+2147479552,261.978301,0.220000000,,,,,,
+2147479552,261.978484,0.222500000,,,,,,
+2147479552,261.985680,0.225000000,,,,,,
+2147479552,262.005940,0.227500000,,,,,,
+2147479552,262.007702,0.230000000,,,,,,
+2147479552,262.016834,0.232500000,,,,,,
+2147479552,262.019232,0.235000000,,,,,,
+2147479552,262.021706,0.237500000,,,,,,
+2147479552,262.022535,0.240000000,,,,,,
+2147479552,262.028697,0.242500000,,,,,,
+2147479552,262.035758,0.245000000,,,,,,
+2147479552,262.038019,0.247500000,,,,,,
+2147479552,262.038136,0.250000000,,,,,,
+2147479552,262.039602,0.252500000,,,,,,
+2147479552,262.050233,0.255000000,,,,,,
+2147479552,262.053883,0.257500000,,,,,,
+2147479552,262.057263,0.260000000,,,,,,
+2147479552,262.063341,0.262500000,,,,,,
+2147479552,262.068833,0.265000000,,,,,,
+2147479552,262.068856,0.267500000,,,,,,
+2147479552,262.073709,0.270000000,,,,,,
+2147479552,262.077200,0.272500000,,,,,,
+2147479552,262.077403,0.275000000,,,,,,
+2147479552,262.087391,0.277500000,,,,,,
+2147479552,262.094758,0.280000000,,,,,,
+2147479552,262.098205,0.282500000,,,,,,
+2147479552,262.099281,0.285000000,,,,,,
+2147479552,262.103367,0.287500000,,,,,,
+2147479552,262.103947,0.290000000,,,,,,
+2147479552,262.104117,0.292500000,,,,,,
+2147479552,262.106834,0.295000000,,,,,,
+2147479552,262.111370,0.297500000,,,,,,
+2147479552,262.112153,0.300000000,,,,,,
+2147479552,262.116219,0.302500000,,,,,,
+2147479552,262.116640,0.305000000,,,,,,
+2147479552,262.124613,0.307500000,,,,,,
+2147479552,262.128868,0.310000000,,,,,,
+2147479552,262.132046,0.312500000,,,,,,
+2147479552,262.132086,0.315000000,,,,,,
+2147479552,262.134394,0.317500000,,,,,,
+2147479552,262.137604,0.320000000,,,,,,
+2147479552,262.138241,0.322500000,,,,,,
+2147479552,262.143387,0.325000000,,,,,,
+2147479552,262.162601,0.327500000,,,,,,
+2147479552,262.167477,0.330000000,,,,,,
+2147479552,262.170873,0.332500000,,,,,,
+2147479552,262.180818,0.335000000,,,,,,
+2147479552,262.185927,0.337500000,,,,,,
+2147479552,262.189125,0.340000000,,,,,,
+2147479552,262.190107,0.342500000,,,,,,
+2147479552,262.191789,0.345000000,,,,,,
+2147479552,262.193980,0.347500000,,,,,,
+2147479552,262.202077,0.350000000,,,,,,
+2147479552,262.205234,0.352500000,,,,,,
+2147479552,262.211379,0.355000000,,,,,,
+2147479552,262.212221,0.357500000,,,,,,
+2147479552,262.212635,0.360000000,,,,,,
+2147479552,262.215003,0.362500000,,,,,,
+2147479552,262.215625,0.365000000,,,,,,
+2147479552,262.218663,0.367500000,,,,,,
+2147479552,262.230539,0.370000000,,,,,,
+2147479552,262.242882,0.372500000,,,,,,
+2147479552,262.243488,0.375000000,,,,,,
+2147479552,262.247115,0.377500000,,,,,,
+2147479552,262.254192,0.380000000,,,,,,
+2147479552,262.254736,0.382500000,,,,,,
+2147479552,262.262462,0.385000000,,,,,,
+2147479552,262.272530,0.387500000,,,,,,
+2147479552,262.273077,0.390000000,,,,,,
+2147479552,262.274918,0.392500000,,,,,,
+2147479552,262.275595,0.395000000,,,,,,
+2147479552,262.278512,0.397500000,,,,,,
+2147479552,262.281043,0.400000000,,,,,,
+2147479552,262.287448,0.402500000,,,,,,
+2147479552,262.287584,0.405000000,,,,,,
+2147479552,262.297586,0.407500000,,,,,,
+2147479552,262.298908,0.410000000,,,,,,
+2147479552,262.300510,0.412500000,,,,,,
+2147479552,262.302688,0.415000000,,,,,,
+2147479552,262.303804,0.417500000,,,,,,
+2147479552,262.309888,0.420000000,,,,,,
+2147479552,262.310181,0.422500000,,,,,,
+2147479552,262.312706,0.425000000,,,,,,
+2147479552,262.315860,0.427500000,,,,,,
+2147479552,262.321495,0.430000000,,,,,,
+2147479552,262.323120,0.432500000,,,,,,
+2147479552,262.328775,0.435000000,,,,,,
+2147479552,262.342021,0.437500000,,,,,,
+2147479552,262.352016,0.440000000,,,,,,
+2147479552,262.359199,0.442500000,,,,,,
+2147479552,262.361059,0.445000000,,,,,,
+2147479552,262.370040,0.447500000,,,,,,
+2147479552,262.375209,0.450000000,,,,,,
+2147479552,262.378650,0.452500000,,,,,,
+2147479552,262.383386,0.455000000,,,,,,
+2147479552,262.406533,0.457500000,,,,,,
+2147479552,262.406742,0.460000000,,,,,,
+2147479552,262.407975,0.462500000,,,,,,
+2147479552,262.417417,0.465000000,,,,,,
+2147479552,262.422369,0.467500000,,,,,,
+2147479552,262.422536,0.470000000,,,,,,
+2147479552,262.429137,0.472500000,,,,,,
+2147479552,262.429500,0.475000000,,,,,,
+2147479552,262.435915,0.477500000,,,,,,
+2147479552,262.435938,0.480000000,,,,,,
+2147479552,262.436101,0.482500000,,,,,,
+2147479552,262.450119,0.485000000,,,,,,
+2147479552,262.459994,0.487500000,,,,,,
+2147479552,262.460088,0.490000000,,,,,,
+2147479552,262.460471,0.492500000,,,,,,
+2147479552,262.470765,0.495000000,,,,,,
+2147479552,262.472214,0.497500000,,,,,,
+2147479552,262.472314,0.500000000,,,,,,
+2147479552,262.492773,0.502500000,,,,,,
+2147479552,262.506438,0.505000000,,,,,,
+2147479552,262.506822,0.507500000,,,,,,
+2147479552,262.508959,0.510000000,,,,,,
+2147479552,262.514777,0.512500000,,,,,,
+2147479552,262.515997,0.515000000,,,,,,
+2147479552,262.524973,0.517500000,,,,,,
+2147479552,262.535304,0.520000000,,,,,,
+2147479552,262.535587,0.522500000,,,,,,
+2147479552,262.536802,0.525000000,,,,,,
+2147479552,262.546491,0.527500000,,,,,,
+2147479552,262.552749,0.530000000,,,,,,
+2147479552,262.554294,0.532500000,,,,,,
+2147479552,262.561725,0.535000000,,,,,,
+2147479552,262.566760,0.537500000,,,,,,
+2147479552,262.569648,0.540000000,,,,,,
+2147479552,262.571549,0.542500000,,,,,,
+2147479552,262.583749,0.545000000,,,,,,
+2147479552,262.587147,0.547500000,,,,,,
+2147479552,262.589311,0.550000000,,,,,,
+2147479552,262.589571,0.552500000,,,,,,
+2147479552,262.592782,0.555000000,,,,,,
+2147479552,262.593648,0.557500000,,,,,,
+2147479552,262.600868,0.560000000,,,,,,
+2147479552,262.607376,0.562500000,,,,,,
+2147479552,262.609074,0.565000000,,,,,,
+2147479552,262.617428,0.567500000,,,,,,
+2147479552,262.626003,0.570000000,,,,,,
+2147479552,262.636218,0.572500000,,,,,,
+2147479552,262.641117,0.575000000,,,,,,
+2147479552,262.648357,0.577500000,,,,,,
+2147479552,262.648385,0.580000000,,,,,,
+2147479552,262.655059,0.582500000,,,,,,
+2147479552,262.662153,0.585000000,,,,,,
+2147479552,262.668031,0.587500000,,,,,,
+2147479552,262.692461,0.590000000,,,,,,
+2147479552,262.693749,0.592500000,,,,,,
+2147479552,262.712386,0.595000000,,,,,,
+2147479552,262.721862,0.597500000,,,,,,
+2147479552,262.722501,0.600000000,,,,,,
+2147479552,262.735986,0.602500000,,,,,,
+2147479552,262.746105,0.605000000,,,,,,
+2147479552,262.755180,0.607500000,,,,,,
+2147479552,262.755220,0.610000000,,,,,,
+2147479552,262.765315,0.612500000,,,,,,
+2147479552,262.778057,0.615000000,,,,,,
+2147479552,262.779943,0.617500000,,,,,,
+2147479552,262.794264,0.620000000,,,,,,
+2147479552,262.795420,0.622500000,,,,,,
+2147479552,262.797897,0.625000000,,,,,,
+2147479552,262.802833,0.627500000,,,,,,
+2147479552,262.808425,0.630000000,,,,,,
+2147479552,262.840531,0.632500000,,,,,,
+2147479552,262.844518,0.635000000,,,,,,
+2147479552,262.849940,0.637500000,,,,,,
+2147479552,262.866169,0.640000000,,,,,,
+2147479552,262.888337,0.642500000,,,,,,
+2147479552,262.892067,0.645000000,,,,,,
+2147479552,262.904521,0.647500000,,,,,,
+2147479552,262.904610,0.650000000,,,,,,
+2147479552,262.919008,0.652500000,,,,,,
+2147479552,262.935500,0.655000000,,,,,,
+2147479552,262.942750,0.657500000,,,,,,
+2147479552,262.950661,0.660000000,,,,,,
+2147479552,262.955467,0.662500000,,,,,,
+2147479552,262.960113,0.665000000,,,,,,
+2147479552,262.963603,0.667500000,,,,,,
+2147479552,262.981388,0.670000000,,,,,,
+2147479552,262.990790,0.672500000,,,,,,
+2147479552,262.991126,0.675000000,,,,,,
+2147479552,262.993678,0.677500000,,,,,,
+2147479552,263.000549,0.680000000,,,,,,
+2147479552,263.010653,0.682500000,,,,,,
+2147479552,263.019482,0.685000000,,,,,,
+2147479552,263.036192,0.687500000,,,,,,
+2147479552,263.040378,0.690000000,,,,,,
+2147479552,263.063222,0.692500000,,,,,,
+2147479552,263.064398,0.695000000,,,,,,
+2147479552,263.078185,0.697500000,,,,,,
+2147479552,263.094173,0.700000000,,,,,,
+2147479552,263.102126,0.702500000,,,,,,
+2147479552,263.106499,0.705000000,,,,,,
+2147479552,263.113615,0.707500000,,,,,,
+2147479552,263.119740,0.710000000,,,,,,
+2147479552,263.121543,0.712500000,,,,,,
+2147479552,263.130838,0.715000000,,,,,,
+2147479552,263.173032,0.717500000,,,,,,
+2147479552,263.201917,0.720000000,,,,,,
+2147479552,263.205192,0.722500000,,,,,,
+2147479552,263.208445,0.725000000,,,,,,
+2147479552,263.209847,0.727500000,,,,,,
+2147479552,263.260491,0.730000000,,,,,,
+2147479552,263.293130,0.732500000,,,,,,
+2147479552,263.300850,0.735000000,,,,,,
+2147479552,263.372309,0.737500000,,,,,,
+2147479552,263.458376,0.740000000,,,,,,
+2147479552,263.476521,0.742500000,,,,,,
+2147479552,263.623942,0.745000000,,,,,,
+2147479552,263.666802,0.747500000,,,,,,
+2147479552,263.669311,0.750000000,,,,,,
+2147479552,263.673481,0.752500000,,,,,,
+2147479552,263.789509,0.755000000,,,,,,
+2147479552,263.790138,0.757500000,,,,,,
+2147479552,263.829491,0.760000000,,,,,,
+2147479552,263.860601,0.762500000,,,,,,
+2147479552,263.862593,0.765000000,,,,,,
+2147479552,263.872954,0.767500000,,,,,,
+2147479552,263.887592,0.770000000,,,,,,
+2147479552,263.917510,0.772500000,,,,,,
+2147479552,263.922216,0.775000000,,,,,,
+2147479552,263.928720,0.777500000,,,,,,
+2147479552,263.935794,0.780000000,,,,,,
+2147479552,263.945389,0.782500000,,,,,,
+2147479552,263.975880,0.785000000,,,,,,
+2147479552,263.984712,0.787500000,,,,,,
+2147479552,263.995703,0.790000000,,,,,,
+2147479552,264.027100,0.792500000,,,,,,
+2147479552,264.050654,0.795000000,,,,,,
+2147479552,264.085517,0.797500000,,,,,,
+2147479552,264.110296,0.800000000,,,,,,
+2147479552,264.119029,0.802500000,,,,,,
+2147479552,264.126695,0.805000000,,,,,,
+2147479552,264.130985,0.807500000,,,,,,
+2147479552,264.133763,0.810000000,,,,,,
+2147479552,264.136387,0.812500000,,,,,,
+2147479552,264.156996,0.815000000,,,,,,
+2147479552,264.185862,0.817500000,,,,,,
+2147479552,264.188542,0.820000000,,,,,,
+2147479552,264.190575,0.822500000,,,,,,
+2147479552,264.206351,0.825000000,,,,,,
+2147479552,264.209025,0.827500000,,,,,,
+2147479552,264.227979,0.830000000,,,,,,
+2147479552,264.271842,0.832500000,,,,,,
+2147479552,264.274906,0.835000000,,,,,,
+2147479552,264.286213,0.837500000,,,,,,
+2147479552,264.304881,0.840000000,,,,,,
+2147479552,264.314509,0.842500000,,,,,,
+2147479552,264.327118,0.845000000,,,,,,
+2147479552,264.333310,0.847500000,,,,,,
+2147479552,264.339028,0.850000000,,,,,,
+2147479552,264.351667,0.852500000,,,,,,
+2147479552,264.366632,0.855000000,,,,,,
+2147479552,264.379055,0.857500000,,,,,,
+2147479552,264.409988,0.860000000,,,,,,
+2147479552,264.424186,0.862500000,,,,,,
+2147479552,264.440223,0.865000000,,,,,,
+2147479552,264.448092,0.867500000,,,,,,
+2147479552,264.507765,0.870000000,,,,,,
+2147479552,264.527815,0.872500000,,,,,,
+2147479552,264.557912,0.875000000,,,,,,
+2147479552,264.636512,0.877500000,,,,,,
+2147479552,264.680914,0.880000000,,,,,,
+2147479552,264.715209,0.882500000,,,,,,
+2147479552,264.726619,0.885000000,,,,,,
+2147479552,264.782292,0.887500000,,,,,,
+2147479552,264.787194,0.890000000,,,,,,
+2147479552,264.830038,0.892500000,,,,,,
+2147479552,264.889491,0.895000000,,,,,,
+2147479552,264.890820,0.897500000,,,,,,
+2147479552,264.934825,0.900000000,,,,,,
+2147479552,264.942039,0.902500000,,,,,,
+2147479552,264.983178,0.905000000,,,,,,
+2147479552,265.024846,0.907500000,,,,,,
+2147479552,265.029688,0.910000000,,,,,,
+2147479552,265.097228,0.912500000,,,,,,
+2147479552,265.162345,0.915000000,,,,,,
+2147479552,265.178099,0.917500000,,,,,,
+2147479552,265.268452,0.920000000,,,,,,
+2147479552,265.370389,0.922500000,,,,,,
+2147479552,265.437359,0.925000000,,,,,,
+2147479552,265.476259,0.927500000,,,,,,
+2147479552,265.546246,0.930000000,,,,,,
+2147479552,265.580418,0.932500000,,,,,,
+2147479552,265.592301,0.935000000,,,,,,
+2147479552,265.664703,0.937500000,,,,,,
+2147479552,265.729693,0.940000000,,,,,,
+2147479552,265.763242,0.942500000,,,,,,
+2147479552,265.777866,0.945000000,,,,,,
+2147479552,265.972221,0.947500000,,,,,,
+2147479552,266.018585,0.950000000,,,,,,
+2147479552,266.038995,0.952500000,,,,,,
+2147479552,266.047414,0.955000000,,,,,,
+2147479552,266.088952,0.957500000,,,,,,
+2147479552,266.132198,0.960000000,,,,,,
+2147479552,266.230858,0.962500000,,,,,,
+2147479552,266.294996,0.965000000,,,,,,
+2147479552,266.379908,0.967500000,,,,,,
+2147479552,266.493032,0.970000000,,,,,,
+2147479552,266.507906,0.972500000,,,,,,
+2147479552,266.635838,0.975000000,,,,,,
+2147479552,266.767899,0.977500000,,,,,,
+2147479552,266.769784,0.980000000,,,,,,
+2147479552,266.974649,0.982500000,,,,,,
+2147479552,266.997876,0.985000000,,,,,,
+2147479552,267.322457,0.987500000,,,,,,
+2147479552,267.421793,0.990000000,,,,,,
+2147479552,267.709202,0.992500000,,,,,,
+2147479552,267.747960,0.995000000,,,,,,
+2147479552,267.801091,0.997500000,,,,,,
+2147479552,267.934154,1.000000000,,,,,,