Perf plot
|
Before Width: | Height: | Size: 34 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 47 KiB |
|
After Width: | Height: | Size: 38 KiB |
|
Before Width: | Height: | Size: 110 KiB |
|
After Width: | Height: | Size: 72 KiB |
|
Before Width: | Height: | Size: 256 KiB After Width: | Height: | Size: 254 KiB |
|
Before Width: | Height: | Size: 219 KiB After Width: | Height: | Size: 216 KiB |
|
Before Width: | Height: | Size: 381 KiB |
|
Before Width: | Height: | Size: 85 KiB After Width: | Height: | Size: 91 KiB |
@@ -1,75 +1,121 @@
|
||||
import csv
|
||||
import importlib.util
|
||||
import os
|
||||
import re
|
||||
import csv
|
||||
import sys
|
||||
|
||||
# folder that holds one subfolder per variant, each with an x86/ dir full of *.log files
|
||||
ROOT = "measurements"
|
||||
OUT = "analysis/results.csv"
|
||||
sys.path.insert(0, 'flopcounts')
|
||||
|
||||
ROOT = 'measurements'
|
||||
OUT = 'analysis/results_x86.csv'
|
||||
|
||||
size_line = re.compile(r'=== N_P=(\d+) N_ITER=(\d+) ===')
|
||||
|
||||
# the benchmark prints one block per problem size, looks like:
|
||||
# === N_P=500 N_ITER=200 ===
|
||||
# W(n) per iteration: ...
|
||||
# Q(n) per iteration: ...
|
||||
# I(n): ...
|
||||
# W(n): ...
|
||||
# T(n): ... <- cycles
|
||||
# P(n): ... <- flops/cycle
|
||||
# so I split each log on the "=== N_P=.. ===" lines and read the fields out of each block.
|
||||
size_line = re.compile(r"=== N_P=(\d+) N_ITER=(\d+) ===")
|
||||
|
||||
def num(pattern, text):
|
||||
m = re.search(pattern, text)
|
||||
if m:
|
||||
return float(m.group(1))
|
||||
m = re.search(pattern, text)
|
||||
if m:
|
||||
return float(m.group(1))
|
||||
return None
|
||||
|
||||
|
||||
_flopcount_modules = {}
|
||||
|
||||
|
||||
def get_flops_per_iter(variant, n_p, n_obs=2):
|
||||
variant = variant.strip()
|
||||
|
||||
module_name = variant.replace('/', '_').replace('\\', '_')
|
||||
module_path = f'flopcounts/x86/{module_name}'
|
||||
|
||||
if module_name in _flopcount_modules:
|
||||
module = _flopcount_modules[module_name]
|
||||
elif os.path.exists(f'{module_path}.py'):
|
||||
try:
|
||||
spec = importlib.util.spec_from_file_location(module_name,
|
||||
f'{module_path}.py')
|
||||
assert spec is not None
|
||||
assert spec.loader is not None
|
||||
module = importlib.util.module_from_spec(spec)
|
||||
spec.loader.exec_module(module)
|
||||
_flopcount_modules[module_name] = module
|
||||
except Exception as e:
|
||||
print(f'Warning: Failed to load flopcount for {variant}: {e}')
|
||||
return None
|
||||
else:
|
||||
print(f'Warning: No flopcount module found for {variant}')
|
||||
return None
|
||||
|
||||
#we run every variant a few times (1.log, 2.log, ...). keep the fastest run per size,
|
||||
#min cycles is the standard way to kill the OS/turbo noise.
|
||||
best = {}
|
||||
if hasattr(module, 'total'):
|
||||
try:
|
||||
return module.total(n_iter=1, n_p=int(n_p), n_obs=int(n_obs))
|
||||
except Exception as e:
|
||||
print(f'Warning: Error calling total() for {variant}: {e}')
|
||||
return None
|
||||
else:
|
||||
print(f'Warning: No total() function in {module_path}')
|
||||
return None
|
||||
|
||||
# flop counter is uint32 and wraps at n=10000 (72*n^2+74*n = 7.2e9 > 2^32), so the logged
|
||||
# W(n)/I(n) are garbage there. compute work ourselves; matches the good logs exactly.
|
||||
# symmetry variants do half the pairs -> 36 n^2 + 110 n, everything else 72 n^2 + 74 n.
|
||||
def flops_per_iter(variant, n):
|
||||
if "symmetry" in variant:
|
||||
return 36 * n * n + 110 * n
|
||||
return 72 * n * n + 74 * n
|
||||
|
||||
runs = {}
|
||||
|
||||
for variant in sorted(os.listdir(ROOT)):
|
||||
logdir = os.path.join(ROOT, variant, "x86")
|
||||
if not os.path.isdir(logdir):
|
||||
logdir = os.path.join(ROOT, variant, 'x86')
|
||||
if not os.path.isdir(logdir):
|
||||
continue
|
||||
|
||||
for fn in os.listdir(logdir):
|
||||
if not fn.endswith('.log'):
|
||||
continue
|
||||
text = open(os.path.join(logdir, fn)).read()
|
||||
|
||||
marks = list(size_line.finditer(text))
|
||||
for i, m in enumerate(marks):
|
||||
n = int(m.group(1))
|
||||
n_iter = int(m.group(2))
|
||||
start = m.end()
|
||||
stop = marks[i + 1].start() if i + 1 < len(marks) else len(text)
|
||||
block = text[start:stop]
|
||||
|
||||
cycles = num(r'T\(n\):\s*([\d.]+)', block)
|
||||
if cycles is None:
|
||||
continue
|
||||
|
||||
for fn in os.listdir(logdir):
|
||||
if not fn.endswith(".log"):
|
||||
continue
|
||||
text = open(os.path.join(logdir, fn)).read()
|
||||
key = (variant, n)
|
||||
q = num(r'Q\(n\) per iteration:\s*([\d.]+)', block)
|
||||
if key not in runs:
|
||||
runs[key] = []
|
||||
runs[key].append((cycles, n_iter, q))
|
||||
|
||||
marks = list(size_line.finditer(text))
|
||||
for i, m in enumerate(marks):
|
||||
n = int(m.group(1))
|
||||
n_iter = int(m.group(2))
|
||||
start = m.end()
|
||||
stop = marks[i + 1].start() if i + 1 < len(marks) else len(text)
|
||||
block = text[start:stop]
|
||||
with open(OUT, 'w', newline='') as f:
|
||||
w = csv.writer(f)
|
||||
w.writerow([
|
||||
'variant', 'n', 'n_iter', 'W', 'Q_per_iter', 'I', 'cycles',
|
||||
'flops_per_cycle'
|
||||
])
|
||||
for variant, n in sorted(runs):
|
||||
entries = runs[(variant, n)]
|
||||
n_iter = entries[0][1]
|
||||
q = entries[0][2]
|
||||
for _, ni, qi in entries:
|
||||
if ni != n_iter:
|
||||
print(f'Warning: n_iter mismatch for {(variant, n)}: {ni} vs {n_iter}')
|
||||
if qi != q:
|
||||
print(f'Warning: Q_per_iter mismatch for {(variant, n)}: {qi} vs {q}')
|
||||
|
||||
cycles = num(r"T\(n\):\s*([\d.]+)", block)
|
||||
if cycles is None:
|
||||
continue
|
||||
cycles = sum(e[0] for e in entries) / len(entries)
|
||||
|
||||
key = (variant, n)
|
||||
if key not in best or cycles < best[key][0]:
|
||||
best[key] = (cycles, n_iter,
|
||||
num(r"Q\(n\) per iteration:\s*([\d.]+)", block))
|
||||
w_iter = get_flops_per_iter(variant, n)
|
||||
|
||||
with open(OUT, "w", newline="") as f:
|
||||
w = csv.writer(f)
|
||||
w.writerow(["variant", "n", "n_iter", "W", "Q_per_iter", "I", "cycles", "flops_per_cycle"])
|
||||
for variant, n in sorted(best):
|
||||
cycles, n_iter, q = best[(variant, n)]
|
||||
w_iter = flops_per_iter(variant, n)
|
||||
W = w_iter * n_iter
|
||||
I = w_iter / q
|
||||
fc = W / cycles
|
||||
w.writerow([variant, n, n_iter, W, q, round(I, 2), round(cycles, 1), round(fc, 3)])
|
||||
print("wrote", OUT, "with", len(best), "rows")
|
||||
assert w_iter is not None
|
||||
|
||||
W = w_iter * n_iter
|
||||
I = w_iter / q if q else w_iter
|
||||
fc = W / cycles if cycles else 0
|
||||
w.writerow(
|
||||
[variant, n, n_iter, W, q,
|
||||
round(I, 2),
|
||||
round(cycles, 1),
|
||||
round(fc, 3)])
|
||||
|
||||
print('wrote', OUT, 'with', len(runs), 'rows')
|
||||
|
||||
@@ -0,0 +1,63 @@
|
||||
from pathlib import Path
|
||||
import re
|
||||
|
||||
LOG_DIR = Path('measurements/memory/x86')
|
||||
CPU_FREQ_GHZ = 2.0
|
||||
|
||||
|
||||
def parse_sysbench_log(file_path):
|
||||
"""Parses a single sysbench log file to extract memory bandwidth in MiB/s."""
|
||||
try:
|
||||
with open(file_path, 'r') as f:
|
||||
content = f.read()
|
||||
|
||||
match = re.search(r'(\d+\.?\d*)\s+MiB/sec', content)
|
||||
|
||||
if match:
|
||||
return float(match.group(1))
|
||||
else:
|
||||
print(f"Warning: Could not find 'MiB/sec' in {file_path.name}")
|
||||
return None
|
||||
except Exception as e:
|
||||
print(f'Error reading {file_path}: {e}')
|
||||
return None
|
||||
|
||||
|
||||
def main():
|
||||
if not LOG_DIR.exists():
|
||||
print(f"Error: Directory '{LOG_DIR}' not found.")
|
||||
return
|
||||
|
||||
bandwidths_mib_s = []
|
||||
|
||||
log_files = sorted(LOG_DIR.glob('*.log'))
|
||||
|
||||
print(f'Found {len(log_files)} log files.')
|
||||
|
||||
for file_path in log_files:
|
||||
val = parse_sysbench_log(file_path)
|
||||
if val is not None:
|
||||
bandwidths_mib_s.append(val)
|
||||
|
||||
if not bandwidths_mib_s:
|
||||
print('No valid bandwidth data found.')
|
||||
return
|
||||
|
||||
avg_mi_b_s = sum(bandwidths_mib_s) / len(bandwidths_mib_s)
|
||||
|
||||
bytes_per_second = avg_mi_b_s * (1024**2)
|
||||
cycles_per_second = CPU_FREQ_GHZ * 1e9
|
||||
|
||||
bytes_per_cycle = bytes_per_second / cycles_per_second
|
||||
|
||||
print('-' * 40)
|
||||
print(f'Files analyzed: {len(bandwidths_mib_s)}')
|
||||
print(f'Average Bandwidth: {avg_mi_b_s:.2f} MiB/sec')
|
||||
print(f'CPU Frequency: {CPU_FREQ_GHZ} GHz')
|
||||
print('-' * 40)
|
||||
print(f'Result: {bytes_per_cycle:.2f} bytes/cycle')
|
||||
print('-' * 40)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
@@ -5,14 +5,15 @@ import matplotlib.pyplot as plt
|
||||
import matplotlib.patheffects as pe
|
||||
#import seaborn as sns # tried it, the default look was worse
|
||||
|
||||
df = pd.read_csv("analysis/results.csv")
|
||||
df = pd.read_csv("analysis/results_x86.csv")
|
||||
|
||||
# peaks for the ryzen ai 7 350 (zen5) at 2GHz. 2 fma units and the datapath is 256 bit
|
||||
# peaks for the ryzen ai 7 350 (zen5) at 2GHz. 2 fma + 2 fadd units and the datapath is 256 bit
|
||||
# -> scalar 6, double 24, float 48 flops/cycle
|
||||
SCALAR = 6
|
||||
PEAK_D = 24
|
||||
PEAK_F = 48
|
||||
maroon = "#A71D5B"
|
||||
crimson = "#DC143C"
|
||||
|
||||
|
||||
def get(v, n=5000):
|
||||
@@ -20,13 +21,13 @@ def get(v, n=5000):
|
||||
|
||||
|
||||
def getline(v):
|
||||
s = df[df.variant == v].sort_values("n")
|
||||
s = df[df.variant == v].sort_values("n") # pyright: ignore[reportCallIssue]
|
||||
return s.n.values, s["flops_per_cycle"].values
|
||||
|
||||
|
||||
def label_lines_above(ax,
|
||||
entries,
|
||||
fontsize=9,
|
||||
fontsize: float = 9,
|
||||
rotate=False,
|
||||
dy_frac=0.012,
|
||||
halo=0):
|
||||
@@ -108,79 +109,66 @@ tracks = [
|
||||
("variant_float_inlining_SoA_AVX2_polyexp_rsqrt_loopopt",
|
||||
"AVX-256 + PolyExp + RSQRT (float)", "#d05a82", "--"),
|
||||
("variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_rsqrt_morersqrt",
|
||||
"AVX-512 + PolyExp + RSQRT + ILP (float)", maroon, "-"),
|
||||
"AVX-512 + PolyExp + RSQRT + ILP-Inner (float)", maroon, "-"),
|
||||
("variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_rsqrt_morersqrt_improved_moreilp",
|
||||
"AVX-512 + PolyExp + RSQRT + ILP-Outer (float)", crimson, "-"),
|
||||
]
|
||||
|
||||
tick_vals = np.array([50, 100, 200, 500, 1000, 2000, 5000, 10000])
|
||||
target_positions = np.arange(len(tick_vals))
|
||||
|
||||
|
||||
def map_x_to_linear(x_val):
|
||||
return np.interp(x_val, tick_vals, target_positions)
|
||||
|
||||
|
||||
fig, ax = plt.subplots(figsize=(9, 4.7))
|
||||
ends = []
|
||||
|
||||
for v, lab, c, ls in tracks:
|
||||
x_raw, y = getline(v)
|
||||
x_mapped = map_x_to_linear(x_raw)
|
||||
x, y = getline(v)
|
||||
ax.plot(
|
||||
x,
|
||||
y, # pyright: ignore[reportArgumentType]
|
||||
ls,
|
||||
color=c,
|
||||
marker="o",
|
||||
ms=4,
|
||||
lw=2.4 if c == maroon else 1.8)
|
||||
if c == maroon:
|
||||
side = "below"
|
||||
xpos = 5600
|
||||
else:
|
||||
side = "above"
|
||||
xpos = None
|
||||
ends.append((x, y, lab, c, xpos, side))
|
||||
|
||||
ax.plot(x_mapped,
|
||||
y,
|
||||
ls,
|
||||
color=c,
|
||||
marker="o",
|
||||
ms=4,
|
||||
lw=2.4 if c == maroon else 1.8)
|
||||
|
||||
ends.append((x_mapped, y, lab, c))
|
||||
|
||||
tick_vals = [50, 100, 200, 500, 1000, 2000, 5000, 10000]
|
||||
target_positions = list(range(len(tick_vals)))
|
||||
|
||||
start_x_pos = 0
|
||||
|
||||
for yv, t in [(PEAK_D, f"Peak π par. w/ doubles ({PEAK_D} flops/cycle)"),
|
||||
(PEAK_F, f"Peak π par. w/ floats ({PEAK_F} flops/cycle)")]:
|
||||
for yv, t in [
|
||||
(27.43, f"Peak π based on instruction mix [{27.43} flops/cycle]"),
|
||||
# (PEAK_D, f"Peak π par. w/ doubles ({PEAK_D} flops/cycle)"),
|
||||
# (PEAK_F, f"Peak π par. w/ floats ({PEAK_F} flops/cycle)")
|
||||
]:
|
||||
ax.axhline(yv, ls=":", color="#999", lw=1.2)
|
||||
ax.text(start_x_pos + 0.2,
|
||||
yv * 1.03,
|
||||
t,
|
||||
fontsize=9,
|
||||
color="#888",
|
||||
fontweight="bold")
|
||||
ax.text(52, yv * 1.03, t, fontsize=9, color="#888", fontweight="bold")
|
||||
|
||||
ax.set_yscale("log", base=2)
|
||||
|
||||
ax.set_xticks(target_positions)
|
||||
ax.set_xticklabels(["50", "100", "200", "500", "1k", "2k", "5k", "10k"],
|
||||
fontweight="bold",
|
||||
fontsize=9)
|
||||
|
||||
ax.set_xlim(-0.5, len(tick_vals) - 0.5)
|
||||
|
||||
ax.yaxis.set_major_formatter(ticker.FuncFormatter(lambda x, _: str(int(x))))
|
||||
ax.set_xscale("log", base=10)
|
||||
ax.set_xticks([50, 100, 200, 500, 1000, 2000, 5000, 10000])
|
||||
ax.set_xticklabels(["50", "100", "200", "500", "1K", "2K", "5K", "10K"])
|
||||
ax.set_xlim(46, 13000)
|
||||
ax.set_ylim(0, 30)
|
||||
for label in ax.get_yticklabels():
|
||||
label.set_fontweight('bold')
|
||||
label.set_fontsize(9)
|
||||
ax.set_ylim(1, 64)
|
||||
for label in ax.get_xticklabels():
|
||||
label.set_fontweight('bold')
|
||||
label.set_fontsize(9)
|
||||
ax.set_xlabel("Number of Pedestrians", fontweight="bold", fontsize=9)
|
||||
ax.grid(color="#e9e9e9")
|
||||
ax.spines["top"].set_visible(False)
|
||||
ax.spines["right"].set_visible(False)
|
||||
plt.title(
|
||||
'Performance [flops/cycle]\nCPU: AMD Ryzen AI 7 350 w/ Radeon 860M @ 2 GHz\nCompiler: g++ (Debian 15.2.0-17) 15.2.0\nFlags: -O3 -march=native -std=c++23 -Wall -Wextra -flto',
|
||||
'Performance (flops/cycle) [N = 3]\nCPU: AMD Ryzen AI 7 350 @ 2 GHz\nCompiler: g++ (Debian 15.2.0-17) 15.2.0\nFlags: -O3 -march=native -std=c++23 -Wall -Wextra -flto',
|
||||
loc='left',
|
||||
size=9,
|
||||
fontweight="bold")
|
||||
ax.grid(color="#e9e9e9")
|
||||
plt.tight_layout()
|
||||
|
||||
label_lines_above(ax, ends, fontsize=7.5, dy_frac=0.012)
|
||||
|
||||
label_lines_above(ax, ends, fontsize=7.25, dy_frac=0.012)
|
||||
plt.savefig("analysis/fig_tracks.svg", bbox_inches="tight")
|
||||
|
||||
# plot 2: all te milestones + the symmetry one that got slower
|
||||
# plot 2: all the milestones + the symmetry one that got slower
|
||||
bars = [
|
||||
("baseline", "variant_baseline"),
|
||||
("AVX2 (double)", "variant_inlining_7_SoA_AVX2"),
|
||||
@@ -219,7 +207,7 @@ ax.grid(axis="y", visible=False)
|
||||
ax.spines["top"].set_visible(False)
|
||||
ax.spines["right"].set_visible(False)
|
||||
plt.tight_layout()
|
||||
plt.savefig("analysis/fig_ladder.png", dpi=170, bbox_inches="tight")
|
||||
plt.savefig("analysis/fig_ladder.svg", bbox_inches="tight")
|
||||
|
||||
|
||||
# plot 3: roofline (n = 5000). same 7 variants as fig_tracks, same colors, inline labels.
|
||||
@@ -318,7 +306,7 @@ ax.set_xticklabels(ax.get_xticklabels(), fontweight="bold")
|
||||
ax.set_yticklabels(ax.get_yticklabels(), fontweight="bold")
|
||||
# ax.set_ylabel("Performance [flops/cycle]", fontweight="bold", fontsize=9)
|
||||
plt.title(
|
||||
'Performance [flops/cycle]\nCPU: AMD Ryzen AI 7 350 w/ Radeon 860M @ 2 GHz\nCompiler: g++ (Debian 15.2.0-17) 15.2.0\nFlags: -O3 -march=native -std=c++23 -Wall -Wextra -flto',
|
||||
'Performance [flops/cycle]\nCPU: AMD Ryzen AI 7 350 @ 2 GHz\nCompiler: g++ (Debian 15.2.0-17) 15.2.0\nFlags: -O3 -march=native -std=c++23 -Wall -Wextra -flto',
|
||||
loc='left',
|
||||
size=9,
|
||||
fontweight="bold")
|
||||
@@ -344,7 +332,7 @@ ax.spines["top"].set_visible(False)
|
||||
ax.spines["right"].set_visible(False)
|
||||
ax.legend(frameon=False, fontsize=10)
|
||||
plt.tight_layout()
|
||||
plt.savefig("analysis/fig_exp.png", dpi=170, bbox_inches="tight")
|
||||
plt.savefig("analysis/fig_exp.svg", bbox_inches="tight")
|
||||
|
||||
# plot 5: the milestone ladder as lines (this is plot0 + line1, line2, ... for the doc).
|
||||
# one line per relevant optimization step across n, baseline at the bottom.
|
||||
@@ -399,7 +387,7 @@ ax.spines["top"].set_visible(False)
|
||||
ax.spines["right"].set_visible(False)
|
||||
plt.tight_layout()
|
||||
label_lines_above(ax, ends, fontsize=6.5, dy_frac=0.02, halo=0)
|
||||
plt.savefig("analysis/fig_milestones.png", dpi=170, bbox_inches="tight")
|
||||
plt.savefig("analysis/fig_milestones.svg", bbox_inches="tight")
|
||||
|
||||
#plt.show()
|
||||
|
||||
@@ -449,7 +437,8 @@ ax.set_xscale("log")
|
||||
ax.set_yscale("log")
|
||||
|
||||
ax.set_xticks([50, 100, 200, 500, 1000, 2000, 5000])
|
||||
ax.set_xticklabels(["50", "100", "200", "500", "1k", "2k", "5k"], fontweight="bold")
|
||||
ax.set_xticklabels(["50", "100", "200", "500", "1k", "2k", "5k"],
|
||||
fontweight="bold")
|
||||
|
||||
ax.set_yticks([1, 2, 5, 10, 20])
|
||||
ax.set_yticklabels(["1x", "2x", "5x", "10x", "20x"], fontweight="bold")
|
||||
@@ -462,7 +451,7 @@ ax.set_ylim(0.8, 28)
|
||||
ax.set_xlabel("Number of Pedestrians", fontweight="bold", fontsize=9)
|
||||
# ax.set_ylabel("Speedup", fontweight="bold", fontsize=9)
|
||||
plt.title(
|
||||
'Runtime Speedup\nCPU: AMD Ryzen AI 7 350 w/ Radeon 860M @ 2 GHz\nCompiler: g++ (Debian 15.2.0-17) 15.2.0\nFlags: -O3 -march=native -std=c++23 -Wall -Wextra -flto',
|
||||
'Runtime Speedup\nCPU: AMD Ryzen AI 7 350 @ 2 GHz\nCompiler: g++ (Debian 15.2.0-17) 15.2.0\nFlags: -O3 -march=native -std=c++23 -Wall -Wextra -flto',
|
||||
loc='left',
|
||||
size=9,
|
||||
fontweight="bold")
|
||||
|
||||
@@ -0,0 +1,316 @@
|
||||
variant,n,n_iter,W,Q_per_iter,I,cycles,flops_per_cycle
|
||||
variant_AVX512_1,50,200,40690000,6512.0,31.24,12357341.2,3.293
|
||||
variant_AVX512_1,100,200,157220000,12912.0,60.88,42690045.0,3.683
|
||||
variant_AVX512_1,200,200,619080000,25712.0,120.39,149289520.0,4.147
|
||||
variant_AVX512_1,500,200,3826100000,64112.0,298.39,895752980.0,4.271
|
||||
variant_AVX512_1,1000,200,15255400000,128112.0,595.39,3427521146.7,4.451
|
||||
variant_AVX512_1,2000,200,60910800000,256112.0,1189.14,13524851386.7,4.504
|
||||
variant_AVX512_1,5000,200,380277000000,640112.0,2970.39,83786559000.0,4.539
|
||||
variant_AVX512_1,10000,200,1520554000000,1280112.0,5939.14,346902390090.0,4.383
|
||||
variant_baseline,50,200,36740000,6512.0,28.21,27452843.3,1.338
|
||||
variant_baseline,100,200,145480000,12912.0,56.34,108607106.7,1.34
|
||||
variant_baseline,200,200,578960000,25712.0,112.59,435167353.3,1.33
|
||||
variant_baseline,500,200,3607400000,64112.0,281.34,2807013360.0,1.285
|
||||
variant_baseline,1000,200,14414800000,128112.0,562.59,11381234466.7,1.267
|
||||
variant_baseline,2000,200,57629600000,256112.0,1125.09,46436426300.0,1.241
|
||||
variant_baseline,5000,200,360074000000,640112.0,2812.59,312703123826.7,1.151
|
||||
variant_branchless,50,200,37920000,6512.0,29.12,32528650.0,1.166
|
||||
variant_branchless,100,200,149840000,12912.0,58.02,130689786.7,1.147
|
||||
variant_branchless,200,200,595680000,25712.0,115.84,544820746.7,1.093
|
||||
variant_branchless,500,200,3709200000,64112.0,289.28,3560289460.0,1.042
|
||||
variant_branchless,1000,200,14818400000,128112.0,578.34,14393150806.7,1.03
|
||||
variant_branchless,2000,200,59236800000,256112.0,1156.46,59210476113.3,1.0
|
||||
variant_branchless,5000,200,370092000000,640112.0,2890.84,385464816373.3,0.96
|
||||
variant_branchless_sqrtfree,50,200,37920000,6512.0,29.12,31693365.0,1.196
|
||||
variant_branchless_sqrtfree,100,200,149840000,12912.0,58.02,124691126.7,1.202
|
||||
variant_branchless_sqrtfree,200,200,595680000,25712.0,115.84,494602046.7,1.204
|
||||
variant_branchless_sqrtfree,500,200,3709200000,64112.0,289.28,3078930946.7,1.205
|
||||
variant_branchless_sqrtfree,1000,200,14818400000,128112.0,578.34,12280066680.0,1.207
|
||||
variant_branchless_sqrtfree,2000,200,59236800000,256112.0,1156.46,49188518600.0,1.204
|
||||
variant_branchless_sqrtfree,5000,200,370092000000,640112.0,2890.84,308663505060.0,1.199
|
||||
variant_cutoff,50,200,36900000,6512.0,28.33,17730605.8,2.081
|
||||
variant_cutoff,100,200,145800000,12912.0,56.46,76248960.0,1.912
|
||||
variant_cutoff,200,200,579600000,25712.0,112.71,267962706.7,2.163
|
||||
variant_cutoff,500,200,3609000000,64112.0,281.46,1895310460.0,1.904
|
||||
variant_cutoff,1000,200,14418000000,128112.0,562.71,7727298866.7,1.866
|
||||
variant_cutoff,2000,200,57636000000,256112.0,1125.21,32411782673.3,1.778
|
||||
variant_cutoff,5000,200,360090000000,640112.0,2812.71,216604501193.3,1.662
|
||||
variant_cutoff_callsite,50,200,36900000,6512.0,28.33,16724109.2,2.206
|
||||
variant_cutoff_callsite,100,200,145800000,12912.0,56.46,71482436.7,2.04
|
||||
variant_cutoff_callsite,200,200,579600000,25712.0,112.71,254096566.7,2.281
|
||||
variant_cutoff_callsite,500,200,3609000000,64112.0,281.46,1819565306.7,1.983
|
||||
variant_cutoff_callsite,1000,200,14418000000,128112.0,562.71,7520631446.7,1.917
|
||||
variant_cutoff_callsite,2000,200,57636000000,256112.0,1125.21,31026276366.7,1.858
|
||||
variant_cutoff_callsite,5000,200,360090000000,640112.0,2812.71,211550331440.0,1.702
|
||||
variant_float_baseline,50,200,21950000,3256.0,33.71,24694491.3,0.889
|
||||
variant_float_baseline,100,200,86900000,6456.0,67.3,96417530.7,0.901
|
||||
variant_float_baseline,200,200,345800000,12856.0,134.49,383608277.3,0.901
|
||||
variant_float_baseline,500,200,2154500000,32056.0,336.05,2749099520.0,0.784
|
||||
variant_float_baseline,1000,200,8609000000,64056.0,671.99,11748012373.3,0.733
|
||||
variant_float_baseline,2000,200,34418000000,128056.0,1343.87,51879605589.3,0.663
|
||||
variant_float_baseline,5000,200,215045000000,320056.0,3359.49,369651034794.7,0.582
|
||||
variant_float_inlining,50,200,36750000,3256.0,56.43,20938618.7,1.755
|
||||
variant_float_inlining,100,200,145500000,6456.0,112.69,83407050.7,1.744
|
||||
variant_float_inlining,200,200,579000000,12856.0,225.19,338390005.3,1.711
|
||||
variant_float_inlining,500,200,3607500000,32056.0,562.69,2457371306.7,1.468
|
||||
variant_float_inlining,1000,200,14415000000,64056.0,1125.19,10667126784.0,1.351
|
||||
variant_float_inlining,2000,200,57630000000,128056.0,2250.19,47520261461.3,1.213
|
||||
variant_float_inlining,5000,200,360075000000,320056.0,5625.19,341753222485.3,1.054
|
||||
variant_float_inlining_SoA,50,200,36750000,3256.0,56.43,21048408.0,1.746
|
||||
variant_float_inlining_SoA,100,200,145500000,6456.0,112.69,84708077.3,1.718
|
||||
variant_float_inlining_SoA,200,200,579000000,12856.0,225.19,336827125.3,1.719
|
||||
variant_float_inlining_SoA,500,200,3607500000,32056.0,562.69,2477081600.0,1.456
|
||||
variant_float_inlining_SoA,1000,200,14415000000,64056.0,1125.19,10766873600.0,1.339
|
||||
variant_float_inlining_SoA,2000,200,57630000000,128056.0,2250.19,47988983125.3,1.201
|
||||
variant_float_inlining_SoA,5000,200,360075000000,320056.0,5625.19,345895436288.0,1.041
|
||||
variant_float_inlining_SoA_AVX2,50,200,42520000,3256.0,65.29,9238852.3,4.602
|
||||
variant_float_inlining_SoA_AVX2,100,200,155120000,6456.0,120.14,31443590.0,4.933
|
||||
variant_float_inlining_SoA_AVX2,200,200,590560000,12856.0,229.68,117080762.7,5.044
|
||||
variant_float_inlining_SoA_AVX2,500,200,3695600000,32056.0,576.43,715304192.0,5.166
|
||||
variant_float_inlining_SoA_AVX2,1000,200,14632800000,64056.0,1142.19,2914458538.7,5.021
|
||||
variant_float_inlining_SoA_AVX2,2000,200,58465600000,128056.0,2282.81,12570639018.7,4.651
|
||||
variant_float_inlining_SoA_AVX2,5000,200,365164000000,320056.0,5704.69,91014157653.3,4.012
|
||||
variant_float_inlining_SoA_AVX2,10000,200,1460328000000,640056.0,11407.81,410624917504.0,3.556
|
||||
variant_float_inlining_SoA_AVX2_polyexp,50,200,42520000,3256.0,65.29,5861893.7,7.254
|
||||
variant_float_inlining_SoA_AVX2_polyexp,100,200,155120000,6456.0,120.14,19739642.7,7.858
|
||||
variant_float_inlining_SoA_AVX2_polyexp,200,200,590560000,12856.0,229.68,71656157.3,8.242
|
||||
variant_float_inlining_SoA_AVX2_polyexp,500,200,3695600000,32056.0,576.43,435824629.3,8.48
|
||||
variant_float_inlining_SoA_AVX2_polyexp,1000,200,14632800000,64056.0,1142.19,1699931264.0,8.608
|
||||
variant_float_inlining_SoA_AVX2_polyexp,2000,200,58465600000,128056.0,2282.81,6739927722.7,8.675
|
||||
variant_float_inlining_SoA_AVX2_polyexp,5000,200,365164000000,320056.0,5704.69,42246128981.3,8.644
|
||||
variant_float_inlining_SoA_AVX2_polyexp,10000,200,1460328000000,640056.0,11407.81,167398135125.3,8.724
|
||||
variant_float_inlining_SoA_AVX2_polyexp_rsqrt,50,200,44760000,3256.0,68.73,5092671.3,8.789
|
||||
variant_float_inlining_SoA_AVX2_polyexp_rsqrt,100,200,163440000,6456.0,126.58,16935302.7,9.651
|
||||
variant_float_inlining_SoA_AVX2_polyexp_rsqrt,200,200,622560000,12856.0,242.13,60867113.3,10.228
|
||||
variant_float_inlining_SoA_AVX2_polyexp_rsqrt,500,200,3897200000,32056.0,607.87,368188341.3,10.585
|
||||
variant_float_inlining_SoA_AVX2_polyexp_rsqrt,1000,200,15432800000,64056.0,1204.63,1433606229.3,10.765
|
||||
variant_float_inlining_SoA_AVX2_polyexp_rsqrt,2000,200,61665600000,128056.0,2407.76,5675097941.3,10.866
|
||||
variant_float_inlining_SoA_AVX2_polyexp_rsqrt,5000,200,385164000000,320056.0,6017.13,35604179626.7,10.818
|
||||
variant_float_inlining_SoA_AVX2_polyexp_rsqrt,10000,200,1540328000000,640056.0,12032.76,142421229568.0,10.815
|
||||
variant_float_inlining_SoA_AVX2_polyexp_rsqrt_loopopt,50,200,44200000,3256.0,67.87,4881582.7,9.054
|
||||
variant_float_inlining_SoA_AVX2_polyexp_rsqrt_loopopt,100,200,161360000,6456.0,124.97,15658073.7,10.305
|
||||
variant_float_inlining_SoA_AVX2_polyexp_rsqrt_loopopt,200,200,614560000,12856.0,239.02,55530342.7,11.067
|
||||
variant_float_inlining_SoA_AVX2_polyexp_rsqrt_loopopt,500,200,3846800000,32056.0,600.01,332591989.3,11.566
|
||||
variant_float_inlining_SoA_AVX2_polyexp_rsqrt_loopopt,1000,200,15232800000,64056.0,1189.02,1292824832.0,11.783
|
||||
variant_float_inlining_SoA_AVX2_polyexp_rsqrt_loopopt,2000,200,60865600000,128056.0,2376.52,5134484992.0,11.854
|
||||
variant_float_inlining_SoA_AVX2_polyexp_rsqrt_loopopt,5000,200,380164000000,320056.0,5939.02,32074893312.0,11.852
|
||||
variant_float_inlining_SoA_AVX2_polyexp_rsqrt_loopopt,10000,200,1520328000000,640056.0,11876.52,128325312512.0,11.847
|
||||
variant_float_inlining_SoA_AVX512_polyexp,50,200,48510000,3256.0,74.49,4637544.0,10.46
|
||||
variant_float_inlining_SoA_AVX512_polyexp,100,200,167100000,6456.0,129.41,14045100.0,11.897
|
||||
variant_float_inlining_SoA_AVX512_polyexp,200,200,614520000,12856.0,239.0,47525244.0,12.93
|
||||
variant_float_inlining_SoA_AVX512_polyexp,500,200,3755500000,32056.0,585.77,272034645.3,13.805
|
||||
variant_float_inlining_SoA_AVX512_polyexp,1000,200,14752600000,64056.0,1151.54,1048487445.3,14.07
|
||||
variant_float_inlining_SoA_AVX512_polyexp,2000,200,58471600000,128056.0,2283.05,4093863424.0,14.283
|
||||
variant_float_inlining_SoA_AVX512_polyexp,5000,200,365763000000,320056.0,5714.05,25352017237.3,14.427
|
||||
variant_float_inlining_SoA_AVX512_polyexp,10000,200,1460358000000,640056.0,11408.05,100878147584.0,14.476
|
||||
variant_float_inlining_SoA_AVX512_polyexp_fastinvsqrt,50,200,48640000,3256.0,74.69,4900494.3,9.926
|
||||
variant_float_inlining_SoA_AVX512_polyexp_fastinvsqrt,100,200,167360000,6456.0,129.62,14697632.0,11.387
|
||||
variant_float_inlining_SoA_AVX512_polyexp_fastinvsqrt,200,200,615040000,12856.0,239.2,48755792.0,12.615
|
||||
variant_float_inlining_SoA_AVX512_polyexp_fastinvsqrt,500,200,3756800000,32056.0,585.97,275589760.0,13.632
|
||||
variant_float_inlining_SoA_AVX512_polyexp_fastinvsqrt,1000,200,14755200000,64056.0,1151.74,1056675861.3,13.964
|
||||
variant_float_inlining_SoA_AVX512_polyexp_fastinvsqrt,2000,200,58476800000,128056.0,2283.25,4125949952.0,14.173
|
||||
variant_float_inlining_SoA_AVX512_polyexp_fastinvsqrt,5000,200,365776000000,320056.0,5714.25,25582010368.0,14.298
|
||||
variant_float_inlining_SoA_AVX512_polyexp_fastinvsqrt,10000,200,1460384000000,640056.0,11408.25,101411954688.0,14.401
|
||||
variant_float_inlining_SoA_AVX512_polyexp_moreavx,50,200,48565600,3256.0,74.58,4427194.8,10.97
|
||||
variant_float_inlining_SoA_AVX512_polyexp_moreavx,100,200,167124800,6456.0,129.43,13805986.0,12.105
|
||||
variant_float_inlining_SoA_AVX512_polyexp_moreavx,200,200,614483200,12856.0,238.99,47360122.7,12.975
|
||||
variant_float_inlining_SoA_AVX512_polyexp_moreavx,500,200,3755364800,32056.0,585.75,275211349.3,13.645
|
||||
variant_float_inlining_SoA_AVX512_polyexp_moreavx,1000,200,14752243200,64056.0,1151.51,1064273109.3,13.861
|
||||
variant_float_inlining_SoA_AVX512_polyexp_moreavx,2000,200,58470800000,128056.0,2283.02,4162095445.3,14.048
|
||||
variant_float_inlining_SoA_AVX512_polyexp_moreavx,5000,200,365761043200,320056.0,5714.02,26013326677.3,14.061
|
||||
variant_float_inlining_SoA_AVX512_polyexp_moreavx,10000,200,1460354000000,640056.0,11408.02,103437175466.7,14.118
|
||||
variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2,50,200,48885600,3256.0,75.07,4118233.3,11.871
|
||||
variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2,100,200,191211200,6456.0,148.09,14171592.7,13.493
|
||||
variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2,200,200,662569600,12856.0,257.69,46241824.0,14.328
|
||||
variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2,500,200,3758564800,32056.0,586.25,250078272.0,15.03
|
||||
variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2,1000,200,14992329600,64056.0,1170.25,978147584.0,15.327
|
||||
variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2,2000,200,58950886400,128056.0,2301.76,3802809770.7,15.502
|
||||
variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2,5000,200,366961129600,320056.0,5732.76,23565800789.3,15.572
|
||||
variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2,10000,200,1462754086400,640056.0,11426.77,93711062357.3,15.609
|
||||
variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_moreilp,50,200,48885600,3256.0,75.07,4128367.9,11.841
|
||||
variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_moreilp,100,200,191211200,6456.0,148.09,14211595.0,13.455
|
||||
variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_moreilp,200,200,662569600,12856.0,257.69,46258992.0,14.323
|
||||
variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_moreilp,500,200,3758564800,32056.0,586.25,249568197.3,15.06
|
||||
variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_moreilp,1000,200,14992329600,64056.0,1170.25,975399104.0,15.37
|
||||
variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_moreilp,2000,200,58950886400,128056.0,2301.76,3793620480.0,15.539
|
||||
variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_moreilp,5000,200,366961129600,320056.0,5732.76,23545909930.7,15.585
|
||||
variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_moreilp,10000,200,1462754086400,640056.0,11426.77,93541878442.7,15.637
|
||||
variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_rsqrt,50,200,48936800,3256.0,75.15,4115576.2,11.891
|
||||
variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_rsqrt,100,200,191313600,6456.0,148.17,14176439.7,13.495
|
||||
variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_rsqrt,200,200,662748800,12856.0,257.76,46456041.3,14.266
|
||||
variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_rsqrt,500,200,3758974400,32056.0,586.31,250008314.7,15.035
|
||||
variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_rsqrt,1000,200,14993148800,64056.0,1170.32,980856746.7,15.286
|
||||
variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_rsqrt,2000,200,58952499200,128056.0,2301.82,3823654485.3,15.418
|
||||
variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_rsqrt,5000,200,366965148800,320056.0,5732.83,23661115392.0,15.509
|
||||
variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_rsqrt,10000,200,1462762099200,640056.0,11426.83,94207066112.0,15.527
|
||||
variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_rsqrt_morersqrt,50,200,51458400,3256.0,79.02,3483682.3,14.771
|
||||
variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_rsqrt_morersqrt,100,200,201476800,6456.0,156.04,11811947.3,17.057
|
||||
variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_rsqrt_morersqrt,200,200,698454400,12856.0,271.65,38043610.7,18.359
|
||||
variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_rsqrt_morersqrt,500,200,3963467200,32056.0,618.21,203642453.3,19.463
|
||||
variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_rsqrt_morersqrt,1000,200,15811734400,64056.0,1234.21,812575168.0,19.459
|
||||
variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_rsqrt_morersqrt,2000,200,62176889600,128056.0,2427.72,3099994965.3,20.057
|
||||
variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_rsqrt_morersqrt,5000,200,387058134400,320056.0,6046.73,19214568789.3,20.144
|
||||
variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_rsqrt_morersqrt,10000,200,1542884089600,640056.0,12052.73,76092566186.7,20.276
|
||||
variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_rsqrt_morersqrt_improved,50,200,51618400,3256.0,79.27,3425376.1,15.069
|
||||
variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_rsqrt_morersqrt_improved,100,200,201796800,6456.0,156.29,11372835.7,17.744
|
||||
variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_rsqrt_morersqrt_improved,200,200,699094400,12856.0,271.89,36467076.0,19.171
|
||||
variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_rsqrt_morersqrt_improved,500,200,3965067200,32056.0,618.46,195375242.7,20.295
|
||||
variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_rsqrt_morersqrt_improved,1000,200,15814934400,64056.0,1234.46,757288490.7,20.884
|
||||
variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_rsqrt_morersqrt_improved,2000,200,62183289600,128056.0,2427.97,2960859477.3,21.002
|
||||
variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_rsqrt_morersqrt_improved,5000,200,387074134400,320056.0,6046.98,18368346112.0,21.073
|
||||
variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_rsqrt_morersqrt_improved,10000,200,1542916089600,640056.0,12052.98,72963047424.0,21.147
|
||||
variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_rsqrt_morersqrt_improved_moreilp,50,200,51238400,3256.0,78.68,2439821.7,21.001
|
||||
variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_rsqrt_morersqrt_improved_moreilp,100,200,175907200,6456.0,136.24,8335320.3,21.104
|
||||
variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_rsqrt_morersqrt_improved_moreilp,200,200,647004800,12856.0,251.64,30687906.7,21.083
|
||||
variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_rsqrt_morersqrt_improved_moreilp,500,200,3958067200,32056.0,617.37,186111381.3,21.267
|
||||
variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_rsqrt_morersqrt_improved_moreilp,1000,200,15554044800,64056.0,1214.1,732997781.3,21.22
|
||||
variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_rsqrt_morersqrt_improved_moreilp,2000,200,61661200000,128056.0,2407.59,2924175018.7,21.087
|
||||
variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_rsqrt_morersqrt_improved_moreilp,5000,200,385769244800,320056.0,6026.59,18349806250.7,21.023
|
||||
variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_rsqrt_morersqrt_improved_moreilp,10000,200,1540306000000,640056.0,12032.59,73231152469.3,21.033
|
||||
variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_4,50,200,49525600,3256.0,76.05,3890111.5,12.731
|
||||
variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_4,100,200,192491200,6456.0,149.08,13501827.7,14.257
|
||||
variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_4,200,200,758742400,12856.0,295.09,49975976.0,15.182
|
||||
variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_4,500,200,3764964800,32056.0,587.25,239680656.0,15.708
|
||||
variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_4,1000,200,15005129600,64056.0,1171.25,945644394.7,15.868
|
||||
variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_4,2000,200,59911059200,128056.0,2339.25,3715754325.3,16.124
|
||||
variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_4,5000,200,369361302400,320056.0,5770.26,22745182890.7,16.239
|
||||
variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_4,10000,200,1467554259200,640056.0,11464.26,90144694272.0,16.28
|
||||
variant_float_inlining_SoA_symmetry,50,200,35280000,3256.0,54.18,20621257.3,1.711
|
||||
variant_float_inlining_SoA_symmetry,100,200,139560000,6456.0,108.09,81476053.3,1.713
|
||||
variant_float_inlining_SoA_symmetry,200,200,555120000,12856.0,215.9,333481098.7,1.665
|
||||
variant_float_inlining_SoA_symmetry,500,200,3457800000,32056.0,539.34,2568502357.3,1.346
|
||||
variant_float_inlining_SoA_symmetry,1000,200,13815600000,64056.0,1078.4,11066851669.3,1.248
|
||||
variant_float_inlining_SoA_symmetry,2000,200,55231200000,128056.0,2156.53,49006380373.3,1.127
|
||||
variant_float_inlining_SoA_symmetry,5000,200,345078000000,320056.0,5390.9,349641758037.3,0.987
|
||||
variant_float_inlining_SoA_symmetry_ILP_16,50,200,35920000,3256.0,55.16,17984374.0,1.997
|
||||
variant_float_inlining_SoA_symmetry_ILP_16,100,200,140840000,6456.0,109.08,64325713.3,2.189
|
||||
variant_float_inlining_SoA_symmetry_ILP_16,200,200,557680000,12856.0,216.89,252748229.3,2.206
|
||||
variant_float_inlining_SoA_symmetry_ILP_16,500,200,3464200000,32056.0,540.34,1863017770.7,1.859
|
||||
variant_float_inlining_SoA_symmetry_ILP_16,1000,200,13828400000,64056.0,1079.4,8033498282.7,1.721
|
||||
variant_float_inlining_SoA_symmetry_ILP_16,2000,200,55256800000,128056.0,2157.52,33723052032.0,1.639
|
||||
variant_float_inlining_SoA_symmetry_ILP_16,5000,200,345142000000,320056.0,5391.9,219469376170.7,1.573
|
||||
variant_float_inlining_SoA_symmetry_ILP_2,50,200,35360000,3256.0,54.3,18593934.7,1.902
|
||||
variant_float_inlining_SoA_symmetry_ILP_2,100,200,139720000,6456.0,108.21,73156496.0,1.91
|
||||
variant_float_inlining_SoA_symmetry_ILP_2,200,200,555440000,12856.0,216.02,293520213.3,1.892
|
||||
variant_float_inlining_SoA_symmetry_ILP_2,500,200,3458600000,32056.0,539.46,2178498048.0,1.588
|
||||
variant_float_inlining_SoA_symmetry_ILP_2,1000,200,13817200000,64056.0,1078.53,9321413973.3,1.482
|
||||
variant_float_inlining_SoA_symmetry_ILP_2,2000,200,55234400000,128056.0,2156.65,40795664384.0,1.354
|
||||
variant_float_inlining_SoA_symmetry_ILP_2,5000,200,345086000000,320056.0,5391.03,287744611669.3,1.199
|
||||
variant_float_inlining_SoA_symmetry_ILP_4,50,200,35440000,3256.0,54.42,17059464.0,2.077
|
||||
variant_float_inlining_SoA_symmetry_ILP_4,100,200,139880000,6456.0,108.33,65813640.0,2.125
|
||||
variant_float_inlining_SoA_symmetry_ILP_4,200,200,555760000,12856.0,216.15,266939221.3,2.082
|
||||
variant_float_inlining_SoA_symmetry_ILP_4,500,200,3459400000,32056.0,539.59,1956788906.7,1.768
|
||||
variant_float_inlining_SoA_symmetry_ILP_4,1000,200,13818800000,64056.0,1078.65,8363417088.0,1.652
|
||||
variant_float_inlining_SoA_symmetry_ILP_4,2000,200,55237600000,128056.0,2156.78,35347298986.7,1.563
|
||||
variant_float_inlining_SoA_symmetry_ILP_4,5000,200,345094000000,320056.0,5391.15,238227024554.7,1.449
|
||||
variant_float_inlining_SoA_symmetry_ILP_8,50,200,35600000,3256.0,54.67,15194553.3,2.343
|
||||
variant_float_inlining_SoA_symmetry_ILP_8,100,200,140200000,6456.0,108.58,56247389.3,2.493
|
||||
variant_float_inlining_SoA_symmetry_ILP_8,200,200,556400000,12856.0,216.4,226057952.0,2.461
|
||||
variant_float_inlining_SoA_symmetry_ILP_8,500,200,3461000000,32056.0,539.84,1703800277.3,2.031
|
||||
variant_float_inlining_SoA_symmetry_ILP_8,1000,200,13822000000,64056.0,1078.9,7384531456.0,1.872
|
||||
variant_float_inlining_SoA_symmetry_ILP_8,2000,200,55244000000,128056.0,2157.03,31106564096.0,1.776
|
||||
variant_float_inlining_SoA_symmetry_ILP_8,5000,200,345110000000,320056.0,5391.4,205839695872.0,1.677
|
||||
variant_inlining_7,50,200,36910000,6512.0,28.34,26121151.7,1.413
|
||||
variant_inlining_7,100,200,145820000,12912.0,56.47,102845253.3,1.418
|
||||
variant_inlining_7,200,200,579640000,25712.0,112.72,414933826.7,1.397
|
||||
variant_inlining_7,500,200,3609100000,64112.0,281.47,2696322800.0,1.339
|
||||
variant_inlining_7,1000,200,14418200000,128112.0,562.72,10910614700.0,1.321
|
||||
variant_inlining_7,2000,200,57636400000,256112.0,1125.22,44697241900.0,1.289
|
||||
variant_inlining_7,5000,200,360091000000,640112.0,2812.72,301883852420.0,1.193
|
||||
variant_inlining_7_SoA,50,200,36910000,6512.0,28.34,35321441.7,1.045
|
||||
variant_inlining_7_SoA,100,200,145820000,12912.0,56.47,135295173.3,1.078
|
||||
variant_inlining_7_SoA,200,200,579640000,25712.0,112.72,568212960.0,1.02
|
||||
variant_inlining_7_SoA,500,200,3609100000,64112.0,281.47,3522666700.0,1.025
|
||||
variant_inlining_7_SoA,1000,200,14418200000,128112.0,562.72,13818697526.7,1.043
|
||||
variant_inlining_7_SoA,2000,200,57636400000,256112.0,1125.22,55165644633.3,1.045
|
||||
variant_inlining_7_SoA,5000,200,360091000000,640112.0,2812.72,339567715040.0,1.06
|
||||
variant_inlining_7_SoA_AVX2,50,200,39660000,6512.0,30.45,16930248.3,2.343
|
||||
variant_inlining_7_SoA_AVX2,100,200,149400000,12912.0,57.85,57593386.7,2.594
|
||||
variant_inlining_7_SoA_AVX2,200,200,590800000,25712.0,114.89,221606086.7,2.666
|
||||
variant_inlining_7_SoA_AVX2,500,200,3667000000,64112.0,285.98,1355735366.7,2.705
|
||||
variant_inlining_7_SoA_AVX2,1000,200,14634000000,128112.0,571.14,5363998226.7,2.728
|
||||
variant_inlining_7_SoA_AVX2,2000,200,58468000000,256112.0,1141.45,21340824240.0,2.74
|
||||
variant_inlining_7_SoA_AVX2,5000,200,365170000000,640112.0,2852.39,118313683993.3,3.086
|
||||
variant_inlining_7_SoA_AVX2,10000,200,1460340000000,1280112.0,5703.95,483403608680.0,3.021
|
||||
variant_inlining_7_SoA_AVX2_polyexp,50,200,39660000,6512.0,30.45,11360558.3,3.491
|
||||
variant_inlining_7_SoA_AVX2_polyexp,100,200,149400000,12912.0,57.85,39974676.7,3.737
|
||||
variant_inlining_7_SoA_AVX2_polyexp,200,200,590800000,25712.0,114.89,152454126.7,3.875
|
||||
variant_inlining_7_SoA_AVX2_polyexp,500,200,3667000000,64112.0,285.98,924841613.3,3.965
|
||||
variant_inlining_7_SoA_AVX2_polyexp,1000,200,14634000000,128112.0,571.14,3677548486.7,3.979
|
||||
variant_inlining_7_SoA_AVX2_polyexp,2000,200,58468000000,256112.0,1141.45,14646151666.7,3.992
|
||||
variant_inlining_7_SoA_AVX2_polyexp,5000,200,365170000000,640112.0,2852.39,91635680486.7,3.985
|
||||
variant_inlining_7_SoA_AVX2_polyexp,10000,200,1460340000000,1280112.0,5703.95,362144000826.7,4.032
|
||||
variant_inlining_7_symmetry_1,50,200,35440000,6512.0,27.21,26691613.3,1.328
|
||||
variant_inlining_7_symmetry_1,100,200,139880000,12912.0,54.17,104115826.7,1.344
|
||||
variant_inlining_7_symmetry_1,200,200,555760000,25712.0,108.07,420221973.3,1.323
|
||||
variant_inlining_7_symmetry_1,500,200,3459400000,64112.0,269.79,2784195260.0,1.243
|
||||
variant_inlining_7_symmetry_1,1000,200,13818800000,128112.0,539.32,11440548280.0,1.208
|
||||
variant_inlining_7_symmetry_1,2000,200,55237600000,256112.0,1078.39,46724088026.7,1.182
|
||||
variant_inlining_7_symmetry_1,5000,200,345094000000,640112.0,2695.58,208238979073.3,1.657
|
||||
variant_inlining_7_symmetry_2,50,200,35440000,6512.0,27.21,26825500.0,1.321
|
||||
variant_inlining_7_symmetry_2,100,200,139880000,12912.0,54.17,104047720.0,1.344
|
||||
variant_inlining_7_symmetry_2,200,200,555760000,25712.0,108.07,418572093.3,1.328
|
||||
variant_inlining_7_symmetry_2,500,200,3459400000,64112.0,269.79,2796809913.3,1.237
|
||||
variant_inlining_7_symmetry_2,1000,200,13818800000,128112.0,539.32,11473883373.3,1.204
|
||||
variant_inlining_7_symmetry_2,2000,200,55237600000,256112.0,1078.39,47218873140.0,1.17
|
||||
variant_inlining_7_symmetry_2,5000,200,345094000000,640112.0,2695.58,212940538246.7,1.621
|
||||
variant_inlining_7_symmetry_2_ilp_1,50,200,35520000,6512.0,27.27,26576390.0,1.337
|
||||
variant_inlining_7_symmetry_2_ilp_1,100,200,140040000,12912.0,54.23,102705346.7,1.364
|
||||
variant_inlining_7_symmetry_2_ilp_1,200,200,556080000,25712.0,108.14,414853306.7,1.34
|
||||
variant_inlining_7_symmetry_2_ilp_1,500,200,3460200000,64112.0,269.86,2745536040.0,1.26
|
||||
variant_inlining_7_symmetry_2_ilp_1,1000,200,13820400000,128112.0,539.39,11346744286.7,1.218
|
||||
variant_inlining_7_symmetry_2_ilp_1,2000,200,55240800000,256112.0,1078.45,45827858580.0,1.205
|
||||
variant_inlining_7_symmetry_2_ilp_1,5000,200,345102000000,640112.0,2695.64,216145504520.0,1.597
|
||||
variant_inlining_7_symmetry_2_ilp_2,50,200,35600000,6512.0,27.33,26837608.3,1.326
|
||||
variant_inlining_7_symmetry_2_ilp_2,100,200,140200000,12912.0,54.29,104635440.0,1.34
|
||||
variant_inlining_7_symmetry_2_ilp_2,200,200,556400000,25712.0,108.2,421424786.7,1.32
|
||||
variant_inlining_7_symmetry_2_ilp_2,500,200,3461000000,64112.0,269.92,2800723726.7,1.236
|
||||
variant_inlining_7_symmetry_2_ilp_2,1000,200,13822000000,128112.0,539.45,11627472146.7,1.189
|
||||
variant_inlining_7_symmetry_2_ilp_2,2000,200,55244000000,256112.0,1078.51,47722643580.0,1.158
|
||||
variant_inlining_7_symmetry_2_ilp_2,5000,200,345110000000,640112.0,2695.7,316224530286.7,1.091
|
||||
variant_inlining_8,50,200,36750000,6512.0,28.22,25967831.7,1.415
|
||||
variant_inlining_8,100,200,145500000,12912.0,56.34,102344446.7,1.422
|
||||
variant_inlining_8,200,200,579000000,25712.0,112.59,412337820.0,1.404
|
||||
variant_inlining_8,500,200,3607500000,64112.0,281.34,2712489206.7,1.33
|
||||
variant_inlining_8,1000,200,14415000000,128112.0,562.59,10911941346.7,1.321
|
||||
variant_inlining_8,2000,200,57630000000,256112.0,1125.09,44617296533.3,1.292
|
||||
variant_inlining_8,5000,200,360075000000,640112.0,2812.59,302676303926.7,1.19
|
||||
variant_inlining_8_SoA_AVX512_polyexp_fastinvsqrt,50,200,42720000,6512.0,32.8,8373508.8,5.102
|
||||
variant_inlining_8_SoA_AVX512_polyexp_fastinvsqrt,100,200,155520000,12912.0,60.22,28637320.0,5.431
|
||||
variant_inlining_8_SoA_AVX512_polyexp_fastinvsqrt,200,200,591360000,25712.0,115.0,104580140.0,5.655
|
||||
variant_inlining_8_SoA_AVX512_polyexp_fastinvsqrt,500,200,3697600000,64112.0,288.37,637315293.3,5.802
|
||||
variant_inlining_8_SoA_AVX512_polyexp_fastinvsqrt,1000,200,14636800000,128112.0,571.25,2508058493.3,5.836
|
||||
variant_inlining_8_SoA_AVX512_polyexp_fastinvsqrt,2000,200,58473600000,256112.0,1141.56,9964964006.7,5.868
|
||||
variant_inlining_8_SoA_AVX512_polyexp_fastinvsqrt,5000,200,365184000000,640112.0,2852.5,61862883653.3,5.903
|
||||
variant_inlining_8_SoA_AVX512_polyexp_fastinvsqrt,10000,200,1460368000000,1280112.0,5704.06,246835017580.0,5.916
|
||||
variant_inlining_8_SoA_AVX512_polyexp_fastinvsqrt_sr,50,200,42720000,6512.0,32.8,8324976.2,5.132
|
||||
variant_inlining_8_SoA_AVX512_polyexp_fastinvsqrt_sr,100,200,155520000,12912.0,60.22,28461063.3,5.464
|
||||
variant_inlining_8_SoA_AVX512_polyexp_fastinvsqrt_sr,200,200,591360000,25712.0,115.0,104197200.0,5.675
|
||||
variant_inlining_8_SoA_AVX512_polyexp_fastinvsqrt_sr,500,200,3697600000,64112.0,288.37,634698826.7,5.826
|
||||
variant_inlining_8_SoA_AVX512_polyexp_fastinvsqrt_sr,1000,200,14636800000,128112.0,571.25,2497438973.3,5.861
|
||||
variant_inlining_8_SoA_AVX512_polyexp_fastinvsqrt_sr,2000,200,58473600000,256112.0,1141.56,9905258186.7,5.903
|
||||
variant_inlining_8_SoA_AVX512_polyexp_fastinvsqrt_sr,5000,200,365184000000,640112.0,2852.5,61800905773.3,5.909
|
||||
variant_inlining_8_SoA_AVX512_polyexp_fastinvsqrt_sr,10000,200,1460368000000,1280112.0,5704.06,246638909100.0,5.921
|
||||
variant_inlining_8_SoA_AVX512_polyexp_moreavx,50,200,42522400,6512.0,32.65,8002191.7,5.314
|
||||
variant_inlining_8_SoA_AVX512_polyexp_moreavx,100,200,155081600,12912.0,60.05,27743588.3,5.59
|
||||
variant_inlining_8_SoA_AVX512_polyexp_moreavx,200,200,590440000,25712.0,114.82,102487693.3,5.761
|
||||
variant_inlining_8_SoA_AVX512_polyexp_moreavx,500,200,3695321600,64112.0,288.19,632610206.7,5.841
|
||||
variant_inlining_8_SoA_AVX512_polyexp_moreavx,1000,200,14632200000,128112.0,571.07,2470303860.0,5.923
|
||||
variant_inlining_8_SoA_AVX512_polyexp_moreavx,2000,200,58464400000,256112.0,1141.38,9838694466.7,5.942
|
||||
variant_inlining_8_SoA_AVX512_polyexp_moreavx,5000,200,365161000000,640112.0,2852.32,61438052786.7,5.944
|
||||
variant_inlining_8_SoA_AVX512_polyexp_moreavx,10000,200,1460322000000,1280112.0,5703.88,245546828340.0,5.947
|
||||
variant_inlining_8_SoA_AVX512_polyexp_moreavx_ilp_2,50,200,48565600,6512.0,37.29,8523056.7,5.698
|
||||
variant_inlining_8_SoA_AVX512_polyexp_moreavx_ilp_2,100,200,167124800,12912.0,64.72,27731721.7,6.026
|
||||
variant_inlining_8_SoA_AVX512_polyexp_moreavx_ilp_2,200,200,614483200,25712.0,119.49,98272536.7,6.253
|
||||
variant_inlining_8_SoA_AVX512_polyexp_moreavx_ilp_2,500,200,3755364800,64112.0,292.88,588475846.7,6.382
|
||||
variant_inlining_8_SoA_AVX512_polyexp_moreavx_ilp_2,1000,200,14752243200,128112.0,575.76,2281054360.0,6.467
|
||||
variant_inlining_8_SoA_AVX512_polyexp_moreavx_ilp_2,2000,200,58470800000,256112.0,1141.51,8988870633.3,6.505
|
||||
variant_inlining_8_SoA_AVX512_polyexp_moreavx_ilp_2,5000,200,365761043200,640112.0,2857.01,56207738100.0,6.507
|
||||
variant_inlining_8_SoA_AVX512_polyexp_moreavx_ilp_2,10000,200,1460354000000,1280112.0,5704.01,224126171313.3,6.516
|
||||
variant_lut_exp,50,200,36900000,6512.0,28.33,28594623.3,1.29
|
||||
variant_lut_exp,100,200,145800000,12912.0,56.46,108870166.7,1.339
|
||||
variant_lut_exp,200,200,579600000,25712.0,112.71,435786306.7,1.33
|
||||
variant_lut_exp,500,200,3609000000,64112.0,281.46,2898102033.3,1.245
|
||||
variant_lut_exp,1000,200,14418000000,128112.0,562.71,11825768686.7,1.219
|
||||
variant_lut_exp,2000,200,57636000000,256112.0,1125.21,47853617373.3,1.204
|
||||
variant_lut_exp,5000,200,360090000000,640112.0,2812.71,305260944300.0,1.18
|
||||
|