Perf plot
@@ -8,6 +8,8 @@
|
|||||||
*.gif
|
*.gif
|
||||||
*.mp4
|
*.mp4
|
||||||
!reference/*.csv
|
!reference/*.csv
|
||||||
|
!analysis/*.csv
|
||||||
|
|
||||||
|
|
||||||
# Benchmark outputs (keep .gitkeep, ignore results)
|
# Benchmark outputs (keep .gitkeep, ignore results)
|
||||||
benchmarks/*
|
benchmarks/*
|
||||||
@@ -21,3 +23,4 @@ sizes
|
|||||||
.vscode
|
.vscode
|
||||||
.DS_Store
|
.DS_Store
|
||||||
|
|
||||||
|
**__pycache__**
|
||||||
|
|||||||
|
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 os
|
||||||
import re
|
import re
|
||||||
import csv
|
import sys
|
||||||
|
|
||||||
# folder that holds one subfolder per variant, each with an x86/ dir full of *.log files
|
sys.path.insert(0, 'flopcounts')
|
||||||
ROOT = "measurements"
|
|
||||||
OUT = "analysis/results.csv"
|
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):
|
def num(pattern, text):
|
||||||
m = re.search(pattern, text)
|
m = re.search(pattern, text)
|
||||||
if m:
|
if m:
|
||||||
return float(m.group(1))
|
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
|
return None
|
||||||
|
|
||||||
#we run every variant a few times (1.log, 2.log, ...). keep the fastest run per size,
|
if hasattr(module, 'total'):
|
||||||
#min cycles is the standard way to kill the OS/turbo noise.
|
try:
|
||||||
best = {}
|
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.
|
runs = {}
|
||||||
# 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
|
|
||||||
|
|
||||||
for variant in sorted(os.listdir(ROOT)):
|
for variant in sorted(os.listdir(ROOT)):
|
||||||
logdir = os.path.join(ROOT, variant, "x86")
|
logdir = os.path.join(ROOT, variant, 'x86')
|
||||||
if not os.path.isdir(logdir):
|
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
|
continue
|
||||||
|
|
||||||
for fn in os.listdir(logdir):
|
key = (variant, n)
|
||||||
if not fn.endswith(".log"):
|
q = num(r'Q\(n\) per iteration:\s*([\d.]+)', block)
|
||||||
continue
|
if key not in runs:
|
||||||
text = open(os.path.join(logdir, fn)).read()
|
runs[key] = []
|
||||||
|
runs[key].append((cycles, n_iter, q))
|
||||||
|
|
||||||
marks = list(size_line.finditer(text))
|
with open(OUT, 'w', newline='') as f:
|
||||||
for i, m in enumerate(marks):
|
w = csv.writer(f)
|
||||||
n = int(m.group(1))
|
w.writerow([
|
||||||
n_iter = int(m.group(2))
|
'variant', 'n', 'n_iter', 'W', 'Q_per_iter', 'I', 'cycles',
|
||||||
start = m.end()
|
'flops_per_cycle'
|
||||||
stop = marks[i + 1].start() if i + 1 < len(marks) else len(text)
|
])
|
||||||
block = text[start:stop]
|
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)
|
cycles = sum(e[0] for e in entries) / len(entries)
|
||||||
if cycles is None:
|
|
||||||
continue
|
|
||||||
|
|
||||||
key = (variant, n)
|
w_iter = get_flops_per_iter(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))
|
|
||||||
|
|
||||||
with open(OUT, "w", newline="") as f:
|
assert w_iter is not None
|
||||||
w = csv.writer(f)
|
|
||||||
w.writerow(["variant", "n", "n_iter", "W", "Q_per_iter", "I", "cycles", "flops_per_cycle"])
|
W = w_iter * n_iter
|
||||||
for variant, n in sorted(best):
|
I = w_iter / q if q else w_iter
|
||||||
cycles, n_iter, q = best[(variant, n)]
|
fc = W / cycles if cycles else 0
|
||||||
w_iter = flops_per_iter(variant, n)
|
w.writerow(
|
||||||
W = w_iter * n_iter
|
[variant, n, n_iter, W, q,
|
||||||
I = w_iter / q
|
round(I, 2),
|
||||||
fc = W / cycles
|
round(cycles, 1),
|
||||||
w.writerow([variant, n, n_iter, W, q, round(I, 2), round(cycles, 1), round(fc, 3)])
|
round(fc, 3)])
|
||||||
print("wrote", OUT, "with", len(best), "rows")
|
|
||||||
|
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 matplotlib.patheffects as pe
|
||||||
#import seaborn as sns # tried it, the default look was worse
|
#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, double 24, float 48 flops/cycle
|
||||||
SCALAR = 6
|
SCALAR = 6
|
||||||
PEAK_D = 24
|
PEAK_D = 24
|
||||||
PEAK_F = 48
|
PEAK_F = 48
|
||||||
maroon = "#A71D5B"
|
maroon = "#A71D5B"
|
||||||
|
crimson = "#DC143C"
|
||||||
|
|
||||||
|
|
||||||
def get(v, n=5000):
|
def get(v, n=5000):
|
||||||
@@ -20,13 +21,13 @@ def get(v, n=5000):
|
|||||||
|
|
||||||
|
|
||||||
def getline(v):
|
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
|
return s.n.values, s["flops_per_cycle"].values
|
||||||
|
|
||||||
|
|
||||||
def label_lines_above(ax,
|
def label_lines_above(ax,
|
||||||
entries,
|
entries,
|
||||||
fontsize=9,
|
fontsize: float = 9,
|
||||||
rotate=False,
|
rotate=False,
|
||||||
dy_frac=0.012,
|
dy_frac=0.012,
|
||||||
halo=0):
|
halo=0):
|
||||||
@@ -108,79 +109,66 @@ tracks = [
|
|||||||
("variant_float_inlining_SoA_AVX2_polyexp_rsqrt_loopopt",
|
("variant_float_inlining_SoA_AVX2_polyexp_rsqrt_loopopt",
|
||||||
"AVX-256 + PolyExp + RSQRT (float)", "#d05a82", "--"),
|
"AVX-256 + PolyExp + RSQRT (float)", "#d05a82", "--"),
|
||||||
("variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_rsqrt_morersqrt",
|
("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))
|
fig, ax = plt.subplots(figsize=(9, 4.7))
|
||||||
ends = []
|
ends = []
|
||||||
|
|
||||||
for v, lab, c, ls in tracks:
|
for v, lab, c, ls in tracks:
|
||||||
x_raw, y = getline(v)
|
x, y = getline(v)
|
||||||
x_mapped = map_x_to_linear(x_raw)
|
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,
|
for yv, t in [
|
||||||
y,
|
(27.43, f"Peak π based on instruction mix [{27.43} flops/cycle]"),
|
||||||
ls,
|
# (PEAK_D, f"Peak π par. w/ doubles ({PEAK_D} flops/cycle)"),
|
||||||
color=c,
|
# (PEAK_F, f"Peak π par. w/ floats ({PEAK_F} flops/cycle)")
|
||||||
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)")]:
|
|
||||||
ax.axhline(yv, ls=":", color="#999", lw=1.2)
|
ax.axhline(yv, ls=":", color="#999", lw=1.2)
|
||||||
ax.text(start_x_pos + 0.2,
|
ax.text(52, yv * 1.03, t, fontsize=9, color="#888", fontweight="bold")
|
||||||
yv * 1.03,
|
|
||||||
t,
|
|
||||||
fontsize=9,
|
|
||||||
color="#888",
|
|
||||||
fontweight="bold")
|
|
||||||
|
|
||||||
ax.set_yscale("log", base=2)
|
ax.set_xscale("log", base=10)
|
||||||
|
ax.set_xticks([50, 100, 200, 500, 1000, 2000, 5000, 10000])
|
||||||
ax.set_xticks(target_positions)
|
ax.set_xticklabels(["50", "100", "200", "500", "1K", "2K", "5K", "10K"])
|
||||||
ax.set_xticklabels(["50", "100", "200", "500", "1k", "2k", "5k", "10k"],
|
ax.set_xlim(46, 13000)
|
||||||
fontweight="bold",
|
ax.set_ylim(0, 30)
|
||||||
fontsize=9)
|
|
||||||
|
|
||||||
ax.set_xlim(-0.5, len(tick_vals) - 0.5)
|
|
||||||
|
|
||||||
ax.yaxis.set_major_formatter(ticker.FuncFormatter(lambda x, _: str(int(x))))
|
|
||||||
for label in ax.get_yticklabels():
|
for label in ax.get_yticklabels():
|
||||||
label.set_fontweight('bold')
|
label.set_fontweight('bold')
|
||||||
label.set_fontsize(9)
|
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.set_xlabel("Number of Pedestrians", fontweight="bold", fontsize=9)
|
||||||
ax.grid(color="#e9e9e9")
|
ax.grid(color="#e9e9e9")
|
||||||
ax.spines["top"].set_visible(False)
|
ax.spines["top"].set_visible(False)
|
||||||
ax.spines["right"].set_visible(False)
|
ax.spines["right"].set_visible(False)
|
||||||
plt.title(
|
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',
|
loc='left',
|
||||||
size=9,
|
size=9,
|
||||||
fontweight="bold")
|
fontweight="bold")
|
||||||
|
ax.grid(color="#e9e9e9")
|
||||||
plt.tight_layout()
|
plt.tight_layout()
|
||||||
|
label_lines_above(ax, ends, fontsize=7.25, dy_frac=0.012)
|
||||||
label_lines_above(ax, ends, fontsize=7.5, dy_frac=0.012)
|
|
||||||
|
|
||||||
plt.savefig("analysis/fig_tracks.svg", bbox_inches="tight")
|
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 = [
|
bars = [
|
||||||
("baseline", "variant_baseline"),
|
("baseline", "variant_baseline"),
|
||||||
("AVX2 (double)", "variant_inlining_7_SoA_AVX2"),
|
("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["top"].set_visible(False)
|
||||||
ax.spines["right"].set_visible(False)
|
ax.spines["right"].set_visible(False)
|
||||||
plt.tight_layout()
|
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.
|
# 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_yticklabels(ax.get_yticklabels(), fontweight="bold")
|
||||||
# ax.set_ylabel("Performance [flops/cycle]", fontweight="bold", fontsize=9)
|
# ax.set_ylabel("Performance [flops/cycle]", fontweight="bold", fontsize=9)
|
||||||
plt.title(
|
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',
|
loc='left',
|
||||||
size=9,
|
size=9,
|
||||||
fontweight="bold")
|
fontweight="bold")
|
||||||
@@ -344,7 +332,7 @@ ax.spines["top"].set_visible(False)
|
|||||||
ax.spines["right"].set_visible(False)
|
ax.spines["right"].set_visible(False)
|
||||||
ax.legend(frameon=False, fontsize=10)
|
ax.legend(frameon=False, fontsize=10)
|
||||||
plt.tight_layout()
|
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).
|
# 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.
|
# 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)
|
ax.spines["right"].set_visible(False)
|
||||||
plt.tight_layout()
|
plt.tight_layout()
|
||||||
label_lines_above(ax, ends, fontsize=6.5, dy_frac=0.02, halo=0)
|
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()
|
#plt.show()
|
||||||
|
|
||||||
@@ -449,7 +437,8 @@ ax.set_xscale("log")
|
|||||||
ax.set_yscale("log")
|
ax.set_yscale("log")
|
||||||
|
|
||||||
ax.set_xticks([50, 100, 200, 500, 1000, 2000, 5000])
|
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_yticks([1, 2, 5, 10, 20])
|
||||||
ax.set_yticklabels(["1x", "2x", "5x", "10x", "20x"], fontweight="bold")
|
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_xlabel("Number of Pedestrians", fontweight="bold", fontsize=9)
|
||||||
# ax.set_ylabel("Speedup", fontweight="bold", fontsize=9)
|
# ax.set_ylabel("Speedup", fontweight="bold", fontsize=9)
|
||||||
plt.title(
|
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',
|
loc='left',
|
||||||
size=9,
|
size=9,
|
||||||
fontweight="bold")
|
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
|
||||||
|
@@ -0,0 +1,100 @@
|
|||||||
|
# ADDs: n_iter * n_p * 4 +
|
||||||
|
# n_iter * n_p * ceil(((double) (n_p - 7)) / 8) * (1 / (ceil(((double) (n_p - 7)) / 8))) * 7 * 14 +
|
||||||
|
# n_iter * n_p * ceil(((double) (n_p - 7)) / 8) * (1 - 1 / (ceil(((double) (n_p - 7)) / 8))) * 224 +
|
||||||
|
# n_iter * n_p * (n_p - floor((double) n_p / 8) * 8) * 14 +
|
||||||
|
# n_iter * n_p * board.n_obstacles * 12 +
|
||||||
|
# n_iter * n_p * 7
|
||||||
|
|
||||||
|
# MULTs: n_iter * n_p * 4 +
|
||||||
|
# n_iter * n_p * ceil(((double) (n_p - 7)) / 8) * (1 / (ceil(((double) (n_p - 7)) / 8))) * 7 * 24 +
|
||||||
|
# n_iter * n_p * ceil(((double) (n_p - 7)) / 8) * (1 - 1 / (ceil(((double) (n_p - 7)) / 8))) * 352 +
|
||||||
|
# n_iter * n_p * (n_p - floor((double) n_p / 8) * 8) * 24 +
|
||||||
|
# n_iter * n_p * board.n_obstacles * 19 +
|
||||||
|
# n_iter * n_p * 17
|
||||||
|
|
||||||
|
# DIVs: n_iter * n_p * ceil(((double) (n_p - 7)) / 8) * (1 / (ceil(((double) (n_p - 7)) / 8))) * 7 +
|
||||||
|
# n_iter * n_p * ceil(((double) (n_p - 7)) / 8) * (1 - 1 / (ceil(((double) (n_p - 7)) / 8))) * 8 +
|
||||||
|
# n_iter * n_p * (n_p - floor((double) n_p / 8) * 8) +
|
||||||
|
# n_iter * n_p * board.n_obstacles +
|
||||||
|
# n_iter * n_p * 2
|
||||||
|
|
||||||
|
# SQRTs: n_iter * n_p * ceil(((double) (n_p - 7)) / 8) * (1 / (ceil(((double) (n_p - 7)) / 8))) * 7 * 3 +
|
||||||
|
# n_iter * n_p * ceil(((double) (n_p - 7)) / 8) * (1 - 1 / (ceil(((double) (n_p - 7)) / 8))) * 24 +
|
||||||
|
# n_iter * n_p * (n_p - floor((double) n_p / 8) * 8) * 3 +
|
||||||
|
# n_iter * n_p * board.n_obstacles +
|
||||||
|
# n_iter * n_p * 3
|
||||||
|
|
||||||
|
# EXPs: n_iter * n_p * ceil(((double) (n_p - 7)) / 8) * (1 / (ceil(((double) (n_p - 7)) / 8))) * 7 +
|
||||||
|
# n_iter * n_p * (n_p - floor((double) n_p / 8) * 8) +
|
||||||
|
# n_iter * n_p * board.n_obstacles
|
||||||
|
|
||||||
|
from math import ceil
|
||||||
|
|
||||||
|
|
||||||
|
def adds(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
chunks = ceil((n_p - 7) / 8) if n_p > 7 else 0
|
||||||
|
remainder = n_p - int(n_p // 8) * 8
|
||||||
|
if chunks > 0:
|
||||||
|
term1 = n_iter * n_p * chunks * (1 / chunks) * 7 * 14
|
||||||
|
term2 = n_iter * n_p * chunks * (1 - 1 / chunks) * 224
|
||||||
|
else:
|
||||||
|
term1 = 0
|
||||||
|
term2 = 0
|
||||||
|
return int(n_iter * n_p * 4 + term1 + term2 + n_iter * n_p * remainder * 14 +
|
||||||
|
n_iter * n_p * n_obs * 12 + n_iter * n_p * 7)
|
||||||
|
|
||||||
|
|
||||||
|
def mults(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
chunks = ceil((n_p - 7) / 8) if n_p > 7 else 0
|
||||||
|
remainder = n_p - int(n_p // 8) * 8
|
||||||
|
if chunks > 0:
|
||||||
|
term1 = n_iter * n_p * chunks * (1 / chunks) * 7 * 24
|
||||||
|
term2 = n_iter * n_p * chunks * (1 - 1 / chunks) * 352
|
||||||
|
else:
|
||||||
|
term1 = 0
|
||||||
|
term2 = 0
|
||||||
|
return int(n_iter * n_p * 4 + term1 + term2 + n_iter * n_p * remainder * 24 +
|
||||||
|
n_iter * n_p * n_obs * 19 + n_iter * n_p * 17)
|
||||||
|
|
||||||
|
|
||||||
|
def divs(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
chunks = ceil((n_p - 7) / 8) if n_p > 7 else 0
|
||||||
|
remainder = n_p - int(n_p // 8) * 8
|
||||||
|
if chunks > 0:
|
||||||
|
term1 = n_iter * n_p * chunks * (1 / chunks) * 7
|
||||||
|
term2 = n_iter * n_p * chunks * (1 - 1 / chunks) * 8
|
||||||
|
else:
|
||||||
|
term1 = 0
|
||||||
|
term2 = 0
|
||||||
|
return int(n_iter * n_p * 4 + term1 + term2 + n_iter * n_p * remainder +
|
||||||
|
n_iter * n_p * n_obs + n_iter * n_p * 2)
|
||||||
|
|
||||||
|
|
||||||
|
def sqrts(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
chunks = ceil((n_p - 7) / 8) if n_p > 7 else 0
|
||||||
|
remainder = n_p - int(n_p // 8) * 8
|
||||||
|
if chunks > 0:
|
||||||
|
term1 = n_iter * n_p * chunks * (1 / chunks) * 7 * 3
|
||||||
|
term2 = n_iter * n_p * chunks * (1 - 1 / chunks) * 24
|
||||||
|
else:
|
||||||
|
term1 = 0
|
||||||
|
term2 = 0
|
||||||
|
return int(n_iter * n_p * 4 + term1 + term2 + n_iter * n_p * remainder * 3 +
|
||||||
|
n_iter * n_p * n_obs + n_iter * n_p * 3)
|
||||||
|
|
||||||
|
|
||||||
|
def exps(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
chunks = ceil((n_p - 7) / 8) if n_p > 7 else 0
|
||||||
|
remainder = n_p - int(n_p // 8) * 8
|
||||||
|
if chunks > 0:
|
||||||
|
term1 = n_iter * n_p * chunks * (1 / chunks) * 7
|
||||||
|
else:
|
||||||
|
term1 = 0
|
||||||
|
return int(n_iter * n_p * 4 + term1 + n_iter * n_p * remainder +
|
||||||
|
n_iter * n_p * n_obs + n_iter * n_p * 3)
|
||||||
|
|
||||||
|
|
||||||
|
def total(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return adds(n_iter, n_p, n_obs) + mults(n_iter, n_p, n_obs) + divs(
|
||||||
|
n_iter, n_p, n_obs) + sqrts(n_iter, n_p,
|
||||||
|
n_obs) + exps(n_iter, n_p, n_obs) * 30
|
||||||
@@ -0,0 +1,58 @@
|
|||||||
|
# ADDs: n_iter * (
|
||||||
|
# n_p * 4 +
|
||||||
|
# n_p * (n_p - 1) * 14 +
|
||||||
|
# n_p * board.n_obstacles * 10 +
|
||||||
|
# n_p * 7
|
||||||
|
# )
|
||||||
|
|
||||||
|
# MULTs: n_iter * (
|
||||||
|
# n_p * 4
|
||||||
|
# n_p * (n_p - 1) * 24 +
|
||||||
|
# n_p * board.n_obstacles * 13 +
|
||||||
|
# n_p * 16
|
||||||
|
# )
|
||||||
|
|
||||||
|
# DIVs: n_iter * (
|
||||||
|
# n_p * (n_p - 1) +
|
||||||
|
# n_p * board.n_obstacles +
|
||||||
|
# n_p * 2
|
||||||
|
# )
|
||||||
|
|
||||||
|
# SQRTs: n_iter * (
|
||||||
|
# n_p * (n_p - 1) * 3 +
|
||||||
|
# n_p * board.n_obstacles +
|
||||||
|
# n_p * 3
|
||||||
|
# )
|
||||||
|
|
||||||
|
# EXPs: n_iter * (
|
||||||
|
# n_p * (n_p - 1) +
|
||||||
|
# n_p * board.n_obstacles
|
||||||
|
# )
|
||||||
|
|
||||||
|
|
||||||
|
def adds(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p * 4 + n_p *
|
||||||
|
(n_p - 1) * 14 + n_p * n_obs * 10 + n_p * 7))
|
||||||
|
|
||||||
|
|
||||||
|
def mults(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p * 4 + n_p *
|
||||||
|
(n_p - 1) * 24 + n_p * n_obs * 13 + n_p * 16))
|
||||||
|
|
||||||
|
|
||||||
|
def divs(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p * (n_p - 1) + n_p * n_obs + n_p * 2))
|
||||||
|
|
||||||
|
|
||||||
|
def sqrts(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p * (n_p - 1) * 3 + n_p * n_obs + n_p * 3))
|
||||||
|
|
||||||
|
|
||||||
|
def exps(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p * (n_p - 1) + n_p * n_obs))
|
||||||
|
|
||||||
|
|
||||||
|
def total(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return adds(n_iter, n_p, n_obs) + mults(n_iter, n_p, n_obs) + divs(
|
||||||
|
n_iter, n_p, n_obs) + sqrts(n_iter, n_p,
|
||||||
|
n_obs) + exps(n_iter, n_p, n_obs) * 30
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
# n_iter * [n_p ** 2 * (15 A + 24 M + 1 D + 4 S + 1 E) + n_p * (- 4 A - 4 M + 1 D - 1 S - 1 E) + n_obstacles * n_p * (13 A + 19 M + 1 D + 2 S + 1 E)]
|
||||||
|
|
||||||
|
|
||||||
|
def adds(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p**2 * 15 + n_p * (-4) + n_obs * n_p * 13))
|
||||||
|
|
||||||
|
|
||||||
|
def mults(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p**2 * 24 + n_p * (-4) + n_obs * n_p * 19))
|
||||||
|
|
||||||
|
|
||||||
|
def divs(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p**2 * 1 + n_p * 1 + n_obs * n_p * 1))
|
||||||
|
|
||||||
|
|
||||||
|
def sqrts(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p**2 * 4 + n_p * (-1) + n_obs * n_p * 2))
|
||||||
|
|
||||||
|
|
||||||
|
def exps(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p**2 * 1 + n_p * (-1) + n_obs * n_p * 1))
|
||||||
|
|
||||||
|
|
||||||
|
def total(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return adds(n_iter, n_p, n_obs) + mults(n_iter, n_p, n_obs) + divs(
|
||||||
|
n_iter, n_p, n_obs) + sqrts(n_iter, n_p,
|
||||||
|
n_obs) + exps(n_iter, n_p, n_obs) * 30
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
# n_iter * [n_p ** 2 * (15 A + 25 M + 1 D + 3 S + 1 E) + n_p * (- 4 A - 5 M + 1 D - 1 E) + n_obstacles * n_p * (13 A + 20 M + 1 D + 1 S + 1 E)]
|
||||||
|
|
||||||
|
|
||||||
|
def adds(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p**2 * 15 + n_p * (-4) + n_obs * n_p * 13))
|
||||||
|
|
||||||
|
|
||||||
|
def mults(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p**2 * 25 + n_p * (-5) + n_obs * n_p * 20))
|
||||||
|
|
||||||
|
|
||||||
|
def divs(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p**2 * 1 + n_p * 1 + n_obs * n_p * 1))
|
||||||
|
|
||||||
|
|
||||||
|
def sqrts(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p**2 * 3 + n_obs * n_p * 1))
|
||||||
|
|
||||||
|
|
||||||
|
def exps(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p**2 * 1 + n_p * (-1) + n_obs * n_p * 1))
|
||||||
|
|
||||||
|
|
||||||
|
def total(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return adds(n_iter, n_p, n_obs) + mults(n_iter, n_p, n_obs) + divs(
|
||||||
|
n_iter, n_p, n_obs) + sqrts(n_iter, n_p,
|
||||||
|
n_obs) + exps(n_iter, n_p, n_obs) * 30
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
# n_iter * [ n_p ** 2 * (14 A + 23 M + 1 D + 4 S + 1 E) + n_p * (- 3 A - 3 M + 1 D - 1 S - 1 E) + n_obstacles * n_p * (12 A + 18 M + 1 D + 2 S + 1 E) ]
|
||||||
|
|
||||||
|
|
||||||
|
def adds(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p**2 * 14 + n_p * (-3) + n_obs * n_p * 12))
|
||||||
|
|
||||||
|
|
||||||
|
def mults(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p**2 * 23 + n_p * (-3) + n_obs * n_p * 18))
|
||||||
|
|
||||||
|
|
||||||
|
def divs(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p**2 * 1 + n_p * 1 + n_obs * n_p * 1))
|
||||||
|
|
||||||
|
|
||||||
|
def sqrts(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p**2 * 4 + n_p * (-1) + n_obs * n_p * 2))
|
||||||
|
|
||||||
|
|
||||||
|
def exps(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p**2 * 1 + n_p * (-1) + n_obs * n_p * 1))
|
||||||
|
|
||||||
|
|
||||||
|
def total(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return adds(n_iter, n_p, n_obs) + mults(n_iter, n_p, n_obs) + divs(
|
||||||
|
n_iter, n_p, n_obs) + sqrts(n_iter, n_p,
|
||||||
|
n_obs) + exps(n_iter, n_p, n_obs) * 30
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
# n_iter * [ n_p ** 2 * (14 A + 23 M + 1 D + 4 S + 1 E) + n_p * (- 3 A - 3 M + 1 D - 1 S - 1 E) + n_obstacles * n_p * (12 A + 18 M + 1 D + 2 S + 1 E) ]
|
||||||
|
|
||||||
|
|
||||||
|
def adds(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p**2 * 14 + n_p * (-3) + n_obs * n_p * 12))
|
||||||
|
|
||||||
|
|
||||||
|
def mults(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p**2 * 23 + n_p * (-3) + n_obs * n_p * 18))
|
||||||
|
|
||||||
|
|
||||||
|
def divs(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p**2 * 1 + n_p * 1 + n_obs * n_p * 1))
|
||||||
|
|
||||||
|
|
||||||
|
def sqrts(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p**2 * 4 + n_p * (-1) + n_obs * n_p * 2))
|
||||||
|
|
||||||
|
|
||||||
|
def exps(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p**2 * 1 + n_p * (-1) + n_obs * n_p * 1))
|
||||||
|
|
||||||
|
|
||||||
|
def total(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return adds(n_iter, n_p, n_obs) + mults(n_iter, n_p, n_obs) + divs(
|
||||||
|
n_iter, n_p, n_obs) + sqrts(n_iter, n_p,
|
||||||
|
n_obs) + exps(n_iter, n_p, n_obs) * 30
|
||||||
@@ -0,0 +1,57 @@
|
|||||||
|
# ADDs: n_iter * (
|
||||||
|
# n_p * 4 +
|
||||||
|
# n_p * (n_p - 1) * 14 +
|
||||||
|
# n_p * board.n_obstacles * 10 +
|
||||||
|
# n_p * 7
|
||||||
|
# )
|
||||||
|
|
||||||
|
# MULTs: n_iter * (
|
||||||
|
# n_p * 4
|
||||||
|
# n_p * (n_p - 1) * 24 +
|
||||||
|
# n_p * board.n_obstacles * 13 +
|
||||||
|
# n_p * 16
|
||||||
|
# )
|
||||||
|
|
||||||
|
# DIVs: n_iter * (
|
||||||
|
# n_p * (n_p - 1) +
|
||||||
|
# n_p * board.n_obstacles +
|
||||||
|
# n_p * 2
|
||||||
|
# )
|
||||||
|
|
||||||
|
# SQRTs: n_iter * (
|
||||||
|
# n_p * (n_p - 1) * 3 +
|
||||||
|
# n_p * board.n_obstacles +
|
||||||
|
# n_p * 3
|
||||||
|
# )
|
||||||
|
|
||||||
|
# EXPs: n_iter * (
|
||||||
|
# n_p * (n_p - 1) +
|
||||||
|
# n_p * board.n_obstacles
|
||||||
|
# )
|
||||||
|
|
||||||
|
|
||||||
|
def adds(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p * 4 + n_p *
|
||||||
|
(n_p - 1) * 14 + n_p * n_obs * 10 + n_p * 7))
|
||||||
|
|
||||||
|
|
||||||
|
def mults(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p * 4 + n_p *
|
||||||
|
(n_p - 1) * 24 + n_p * n_obs * 13 + n_p * 16))
|
||||||
|
|
||||||
|
|
||||||
|
def divs(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p * (n_p - 1) + n_p * n_obs + n_p * 2))
|
||||||
|
|
||||||
|
|
||||||
|
def sqrts(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p * (n_p - 1) * 3 + n_p * n_obs + n_p * 3))
|
||||||
|
|
||||||
|
|
||||||
|
def exps(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p * (n_p - 1) + n_p * n_obs))
|
||||||
|
|
||||||
|
|
||||||
|
def total(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return adds(n_iter, n_p, n_obs) + mults(n_iter, n_p, n_obs) + divs(
|
||||||
|
n_iter, n_p, n_obs) + sqrts(n_iter, n_p, n_obs) + exps(n_iter, n_p, n_obs)
|
||||||
@@ -0,0 +1,58 @@
|
|||||||
|
# ADDs: n_iter * (
|
||||||
|
# n_p * 4 +
|
||||||
|
# n_p * (n_p - 1) * 14 +
|
||||||
|
# n_p * board.n_obstacles * 10 +
|
||||||
|
# n_p * 7
|
||||||
|
# )
|
||||||
|
|
||||||
|
# MULTs: n_iter * (
|
||||||
|
# n_p * 4
|
||||||
|
# n_p * (n_p - 1) * 24 +
|
||||||
|
# n_p * board.n_obstacles * 13 +
|
||||||
|
# n_p * 17
|
||||||
|
# )
|
||||||
|
|
||||||
|
# DIVs: n_iter * (
|
||||||
|
# n_p * (n_p - 1) +
|
||||||
|
# n_p * board.n_obstacles +
|
||||||
|
# n_p * 2
|
||||||
|
# )
|
||||||
|
|
||||||
|
# SQRTs: n_iter * (
|
||||||
|
# n_p * (n_p - 1) * 3 +
|
||||||
|
# n_p * board.n_obstacles +
|
||||||
|
# n_p * 3
|
||||||
|
# )
|
||||||
|
|
||||||
|
# EXPs: n_iter * (
|
||||||
|
# n_p * (n_p - 1) +
|
||||||
|
# n_p * board.n_obstacles
|
||||||
|
# )
|
||||||
|
|
||||||
|
|
||||||
|
def adds(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p * 4 + n_p *
|
||||||
|
(n_p - 1) * 14 + n_p * n_obs * 10 + n_p * 7))
|
||||||
|
|
||||||
|
|
||||||
|
def mults(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p * 4 + n_p *
|
||||||
|
(n_p - 1) * 24 + n_p * n_obs * 13 + n_p * 17))
|
||||||
|
|
||||||
|
|
||||||
|
def divs(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p * (n_p - 1) + n_p * n_obs + n_p * 2))
|
||||||
|
|
||||||
|
|
||||||
|
def sqrts(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p * (n_p - 1) * 3 + n_p * n_obs + n_p * 3))
|
||||||
|
|
||||||
|
|
||||||
|
def exps(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p * (n_p - 1) + n_p * n_obs))
|
||||||
|
|
||||||
|
|
||||||
|
def total(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return adds(n_iter, n_p, n_obs) + mults(n_iter, n_p, n_obs) + divs(
|
||||||
|
n_iter, n_p, n_obs) + sqrts(n_iter, n_p,
|
||||||
|
n_obs) + exps(n_iter, n_p, n_obs) * 30
|
||||||
@@ -0,0 +1,58 @@
|
|||||||
|
# ADDs: n_iter * (
|
||||||
|
# n_p * 4 +
|
||||||
|
# n_p * (n_p - 1) * 14 +
|
||||||
|
# n_p * board.n_obstacles * 10 +
|
||||||
|
# n_p * 7
|
||||||
|
# )
|
||||||
|
|
||||||
|
# MULTs: n_iter * (
|
||||||
|
# n_p * 4
|
||||||
|
# n_p * (n_p - 1) * 24 +
|
||||||
|
# n_p * board.n_obstacles * 13 +
|
||||||
|
# n_p * 17
|
||||||
|
# )
|
||||||
|
|
||||||
|
# DIVs: n_iter * (
|
||||||
|
# n_p * (n_p - 1) +
|
||||||
|
# n_p * board.n_obstacles +
|
||||||
|
# n_p * 2
|
||||||
|
# )
|
||||||
|
|
||||||
|
# SQRTs: n_iter * (
|
||||||
|
# n_p * (n_p - 1) * 3 +
|
||||||
|
# n_p * board.n_obstacles +
|
||||||
|
# n_p * 3
|
||||||
|
# )
|
||||||
|
|
||||||
|
# EXPs: n_iter * (
|
||||||
|
# n_p * (n_p - 1) +
|
||||||
|
# n_p * board.n_obstacles
|
||||||
|
# )
|
||||||
|
|
||||||
|
|
||||||
|
def adds(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p * 4 + n_p *
|
||||||
|
(n_p - 1) * 14 + n_p * n_obs * 10 + n_p * 7))
|
||||||
|
|
||||||
|
|
||||||
|
def mults(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p * 4 + n_p *
|
||||||
|
(n_p - 1) * 24 + n_p * n_obs * 13 + n_p * 17))
|
||||||
|
|
||||||
|
|
||||||
|
def divs(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p * (n_p - 1) + n_p * n_obs + n_p * 2))
|
||||||
|
|
||||||
|
|
||||||
|
def sqrts(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p * (n_p - 1) * 3 + n_p * n_obs + n_p * 3))
|
||||||
|
|
||||||
|
|
||||||
|
def exps(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p * (n_p - 1) + n_p * n_obs))
|
||||||
|
|
||||||
|
|
||||||
|
def total(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return adds(n_iter, n_p, n_obs) + mults(n_iter, n_p, n_obs) + divs(
|
||||||
|
n_iter, n_p, n_obs) + sqrts(n_iter, n_p,
|
||||||
|
n_obs) + exps(n_iter, n_p, n_obs) * 30
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
# const int n_p_pad = (n_p + 7) & ~7;
|
||||||
|
|
||||||
|
# flops per iteration (one pass of the outer time loop):
|
||||||
|
# ADDs: n_p * 22 + n_p * n_p_pad * 15 + n_p * board.n_obstacles * 10 + n_p * 7
|
||||||
|
# MULTs: n_p * 4 + n_p * n_p_pad * 24 + n_p * board.n_obstacles * 13 + n_p * 16
|
||||||
|
# DIVs: n_p * n_p_pad * 1 + n_p * board.n_obstacles + n_p * 2
|
||||||
|
# SQRTs: n_p * n_p_pad * 3 + n_p * board.n_obstacles + n_p * 3
|
||||||
|
# EXPs: n_p * n_p_pad * 1 + n_p * board.n_obstacles
|
||||||
|
|
||||||
|
|
||||||
|
def adds(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 7) & ~7
|
||||||
|
return int(n_iter *
|
||||||
|
(n_p * 22 + n_p * n_p_pad * 15 + n_p * n_obs * 10 + n_p * 7))
|
||||||
|
|
||||||
|
|
||||||
|
def mults(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 7) & ~7
|
||||||
|
return int(n_iter *
|
||||||
|
(n_p * 4 + n_p * n_p_pad * 24 + n_p * n_obs * 13 + n_p * 16))
|
||||||
|
|
||||||
|
|
||||||
|
def divs(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 7) & ~7
|
||||||
|
return int(n_iter * (n_p * n_p_pad * 1 + n_p * n_obs + n_p * 2))
|
||||||
|
|
||||||
|
|
||||||
|
def sqrts(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 7) & ~7
|
||||||
|
return int(n_iter * (n_p * n_p_pad * 3 + n_p * n_obs + n_p * 3))
|
||||||
|
|
||||||
|
|
||||||
|
def exps(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 7) & ~7
|
||||||
|
return int(n_iter * (n_p * n_p_pad * 1 + n_p * n_obs))
|
||||||
|
|
||||||
|
|
||||||
|
def total(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return adds(n_iter, n_p, n_obs) + mults(n_iter, n_p, n_obs) + divs(
|
||||||
|
n_iter, n_p, n_obs) + sqrts(n_iter, n_p,
|
||||||
|
n_obs) + exps(n_iter, n_p, n_obs) * 30
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
# const int n_p_pad = (n_p + 7) & ~7;
|
||||||
|
|
||||||
|
# flops per iteration (one pass of the outer time loop):
|
||||||
|
# ADDs: n_p * 22 + n_p * n_p_pad * 29 + n_p * board.n_obstacles * 10 + n_p * 7
|
||||||
|
# MULTs: n_p * 4 + n_p * n_p_pad * 40 + n_p * board.n_obstacles * 13 + n_p * 16
|
||||||
|
# DIVs: n_p * n_p_pad * 1 + n_p * board.n_obstacles + n_p * 2
|
||||||
|
# SQRTs: n_p * n_p_pad * 3 + n_p * board.n_obstacles + n_p * 3
|
||||||
|
# EXPs: n_p * board.n_obstacles
|
||||||
|
|
||||||
|
|
||||||
|
def adds(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 7) & ~7
|
||||||
|
return int(n_iter *
|
||||||
|
(n_p * 22 + n_p * n_p_pad * 29 + n_p * n_obs * 10 + n_p * 7))
|
||||||
|
|
||||||
|
|
||||||
|
def mults(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 7) & ~7
|
||||||
|
return int(n_iter *
|
||||||
|
(n_p * 4 + n_p * n_p_pad * 40 + n_p * n_obs * 13 + n_p * 16))
|
||||||
|
|
||||||
|
|
||||||
|
def divs(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 7) & ~7
|
||||||
|
return int(n_iter * (n_p * n_p_pad * 1 + n_p * n_obs + n_p * 2))
|
||||||
|
|
||||||
|
|
||||||
|
def sqrts(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 7) & ~7
|
||||||
|
return int(n_iter * (n_p * n_p_pad * 3 + n_p * n_obs + n_p * 3))
|
||||||
|
|
||||||
|
|
||||||
|
def exps(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 7) & ~7
|
||||||
|
return int(n_iter * (n_p * n_obs))
|
||||||
|
|
||||||
|
|
||||||
|
def total(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return adds(n_iter, n_p, n_obs) + mults(n_iter, n_p, n_obs) + divs(
|
||||||
|
n_iter, n_p, n_obs) + sqrts(n_iter, n_p,
|
||||||
|
n_obs) + exps(n_iter, n_p, n_obs) * 30
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
# const int n_p_pad = (n_p + 7) & ~7;
|
||||||
|
|
||||||
|
# flops per iteration (one pass of the outer time loop):
|
||||||
|
# ADDs: n_p * 22 + n_p * n_p_pad * 29 + n_p * board.n_obstacles * 10 + n_p * 7
|
||||||
|
# MULTs: n_p * 4 + n_p * n_p_pad * 42 + n_p * board.n_obstacles * 13 + n_p * 16
|
||||||
|
# DIVs: n_p * n_p_pad * 3 + n_p * board.n_obstacles + n_p * 2
|
||||||
|
# SQRTs: n_p * n_p_pad * 3 + n_p * board.n_obstacles + n_p * 3
|
||||||
|
# EXPs: n_p * board.n_obstacles
|
||||||
|
|
||||||
|
|
||||||
|
def adds(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 7) & ~7
|
||||||
|
return int(n_iter *
|
||||||
|
(n_p * 22 + n_p * n_p_pad * 29 + n_p * n_obs * 10 + n_p * 7))
|
||||||
|
|
||||||
|
|
||||||
|
def mults(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 7) & ~7
|
||||||
|
return int(n_iter *
|
||||||
|
(n_p * 4 + n_p * n_p_pad * 42 + n_p * n_obs * 13 + n_p * 16))
|
||||||
|
|
||||||
|
|
||||||
|
def divs(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 7) & ~7
|
||||||
|
return int(n_iter * (n_p * n_p_pad * 3 + n_p * n_obs + n_p * 2))
|
||||||
|
|
||||||
|
|
||||||
|
def sqrts(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 7) & ~7
|
||||||
|
return int(n_iter * (n_p * n_p_pad * 3 + n_p * n_obs + n_p * 3))
|
||||||
|
|
||||||
|
|
||||||
|
def exps(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 7) & ~7
|
||||||
|
return int(n_iter * (n_p * n_obs))
|
||||||
|
|
||||||
|
|
||||||
|
def total(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return adds(n_iter, n_p, n_obs) + mults(n_iter, n_p, n_obs) + divs(
|
||||||
|
n_iter, n_p, n_obs) + sqrts(n_iter, n_p,
|
||||||
|
n_obs) + exps(n_iter, n_p, n_obs) * 30
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
# const int n_p_pad = (n_p + 7) & ~7;
|
||||||
|
|
||||||
|
# flops per iteration (one pass of the outer time loop):
|
||||||
|
# ADDs: n_p * 22 + n_p * n_p_pad * 28 + n_p * board.n_obstacles * 10 + n_p * 7
|
||||||
|
# MULTs: n_p * 4 + n_p * n_p_pad * 42 + n_p * board.n_obstacles * 13 + n_p * 16
|
||||||
|
# DIVs: n_p * n_p_pad * 3 + n_p * board.n_obstacles + n_p * 2
|
||||||
|
# SQRTs: n_p * n_p_pad * 3 + n_p * board.n_obstacles + n_p * 3
|
||||||
|
# EXPs: n_p * board.n_obstacles
|
||||||
|
|
||||||
|
|
||||||
|
def adds(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 7) & ~7
|
||||||
|
return int(n_iter *
|
||||||
|
(n_p * 22 + n_p * n_p_pad * 28 + n_p * n_obs * 10 + n_p * 7))
|
||||||
|
|
||||||
|
|
||||||
|
def mults(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 7) & ~7
|
||||||
|
return int(n_iter *
|
||||||
|
(n_p * 4 + n_p * n_p_pad * 42 + n_p * n_obs * 13 + n_p * 16))
|
||||||
|
|
||||||
|
|
||||||
|
def divs(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 7) & ~7
|
||||||
|
return int(n_iter * (n_p * n_p_pad * 3 + n_p * n_obs + n_p * 2))
|
||||||
|
|
||||||
|
|
||||||
|
def sqrts(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 7) & ~7
|
||||||
|
return int(n_iter * (n_p * n_p_pad * 3 + n_p * n_obs + n_p * 3))
|
||||||
|
|
||||||
|
|
||||||
|
def exps(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 7) & ~7
|
||||||
|
return int(n_iter * (n_p * n_obs))
|
||||||
|
|
||||||
|
|
||||||
|
def total(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return adds(n_iter, n_p, n_obs) + mults(n_iter, n_p, n_obs) + divs(
|
||||||
|
n_iter, n_p, n_obs) + sqrts(n_iter, n_p,
|
||||||
|
n_obs) + exps(n_iter, n_p, n_obs) * 30
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
# const int n_p_pad = (n_p + 15) & ~15;
|
||||||
|
|
||||||
|
# ADDs: n_iter * (
|
||||||
|
# n_p * 36 +
|
||||||
|
# n_p * n_p_pad * 29 +
|
||||||
|
# n_p * board.n_obstacles * 10 +
|
||||||
|
# n_p * 7
|
||||||
|
# )
|
||||||
|
#
|
||||||
|
# MULTs: n_iter * (
|
||||||
|
# n_p * 4 +
|
||||||
|
# n_p * n_p_pad * 40 +
|
||||||
|
# n_p * board.n_obstacles * 13 +
|
||||||
|
# n_p * 17
|
||||||
|
# )
|
||||||
|
#
|
||||||
|
# DIVs: n_iter * (
|
||||||
|
# n_p * n_p_pad +
|
||||||
|
# n_p * board.n_obstacles +
|
||||||
|
# n_p * 2
|
||||||
|
# )
|
||||||
|
#
|
||||||
|
# SQRTs: n_iter * (
|
||||||
|
# n_p * n_p_pad * 3 +
|
||||||
|
# n_p * board.n_obstacles +
|
||||||
|
# n_p * 3
|
||||||
|
# )
|
||||||
|
#
|
||||||
|
# EXPs: n_iter * n_p * board.n_obstacles
|
||||||
|
|
||||||
|
|
||||||
|
def adds(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 15) & ~15
|
||||||
|
return int(n_iter *
|
||||||
|
(n_p * 36 + n_p * n_p_pad * 29 + n_p * n_obs * 10 + n_p * 7))
|
||||||
|
|
||||||
|
|
||||||
|
def mults(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 15) & ~15
|
||||||
|
return int(n_iter *
|
||||||
|
(n_p * 4 + n_p * n_p_pad * 40 + n_p * n_obs * 13 + n_p * 17))
|
||||||
|
|
||||||
|
|
||||||
|
def divs(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 15) & ~15
|
||||||
|
return int(n_iter * (n_p * n_p_pad + n_p * n_obs + n_p * 2))
|
||||||
|
|
||||||
|
|
||||||
|
def sqrts(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 15) & ~15
|
||||||
|
return int(n_iter * (n_p * n_p_pad * 3 + n_p * n_obs + n_p * 3))
|
||||||
|
|
||||||
|
|
||||||
|
def exps(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 15) & ~15
|
||||||
|
return int(n_iter * n_p * n_obs)
|
||||||
|
|
||||||
|
|
||||||
|
def total(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return adds(n_iter, n_p, n_obs) + mults(n_iter, n_p, n_obs) + divs(
|
||||||
|
n_iter, n_p, n_obs) + sqrts(n_iter, n_p,
|
||||||
|
n_obs) + exps(n_iter, n_p, n_obs) * 30
|
||||||
@@ -0,0 +1,61 @@
|
|||||||
|
# const int n_p_pad = (n_p + 15) & ~15;
|
||||||
|
|
||||||
|
# ADDs: n_iter * (
|
||||||
|
# n_p * 36 +
|
||||||
|
# n_p * n_p_pad * 29 +
|
||||||
|
# n_p * board.n_obstacles * 10 +
|
||||||
|
# n_p * 11
|
||||||
|
# )
|
||||||
|
|
||||||
|
# MULTs: n_iter * (
|
||||||
|
# n_p * 4 +
|
||||||
|
# n_p * n_p_pad * 40 +
|
||||||
|
# n_p * board.n_obstacles * 13 +
|
||||||
|
# n_p * 30
|
||||||
|
# )
|
||||||
|
|
||||||
|
# DIVs: n_iter * (
|
||||||
|
# n_p * n_p_pad +
|
||||||
|
# n_p * board.n_obstacles
|
||||||
|
# )
|
||||||
|
|
||||||
|
# SQRTs: n_iter * (
|
||||||
|
# n_p * n_p_pad * 3 +
|
||||||
|
# n_p * board.n_obstacles +
|
||||||
|
# n_p
|
||||||
|
# )
|
||||||
|
|
||||||
|
# EXPs: n_iter * n_p * board.n_obstacles
|
||||||
|
|
||||||
|
|
||||||
|
def adds(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 15) & ~15
|
||||||
|
return int(n_iter *
|
||||||
|
(n_p * 36 + n_p * n_p_pad * 29 + n_p * n_obs * 10 + n_p * 11))
|
||||||
|
|
||||||
|
|
||||||
|
def mults(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 15) & ~15
|
||||||
|
return int(n_iter *
|
||||||
|
(n_p * 4 + n_p * n_p_pad * 40 + n_p * n_obs * 13 + n_p * 30))
|
||||||
|
|
||||||
|
|
||||||
|
def divs(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 15) & ~15
|
||||||
|
return int(n_iter * (n_p * n_p_pad + n_p * n_obs))
|
||||||
|
|
||||||
|
|
||||||
|
def sqrts(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 15) & ~15
|
||||||
|
return int(n_iter * (n_p * n_p_pad * 3 + n_p * n_obs + n_p))
|
||||||
|
|
||||||
|
|
||||||
|
def exps(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 15) & ~15
|
||||||
|
return int(n_iter * n_p * n_obs)
|
||||||
|
|
||||||
|
|
||||||
|
def total(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return adds(n_iter, n_p, n_obs) + mults(n_iter, n_p, n_obs) + divs(
|
||||||
|
n_iter, n_p, n_obs) + sqrts(n_iter, n_p,
|
||||||
|
n_obs) + exps(n_iter, n_p, n_obs) * 30
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
# const int n_p_pad = (n_p + 15) & ~15;
|
||||||
|
|
||||||
|
# ADDs: n_iter * (
|
||||||
|
# n_p * 36 +
|
||||||
|
# n_p * n_p_pad * 29 +
|
||||||
|
# n_p * board.n_obstacles * 10 +
|
||||||
|
# n_p_pad * 7
|
||||||
|
# )
|
||||||
|
|
||||||
|
# MULTs: n_iter * (
|
||||||
|
# n_p * 4 +
|
||||||
|
# n_p * n_p_pad * 40 +
|
||||||
|
# n_p * board.n_obstacles * 13 +
|
||||||
|
# n_p_pad * 15
|
||||||
|
# )
|
||||||
|
|
||||||
|
# DIVs: n_iter * (
|
||||||
|
# n_p * n_p_pad +
|
||||||
|
# n_p * board.n_obstacles +
|
||||||
|
# n_p_pad * 2
|
||||||
|
# )
|
||||||
|
|
||||||
|
# SQRTs: n_iter * (
|
||||||
|
# n_p * n_p_pad * 3 +
|
||||||
|
# n_p * board.n_obstacles +
|
||||||
|
# n_p_pad * 3
|
||||||
|
# )
|
||||||
|
|
||||||
|
# EXPs: n_iter * n_p * board.n_obstacles
|
||||||
|
|
||||||
|
|
||||||
|
def adds(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 15) & ~15
|
||||||
|
return int(n_iter *
|
||||||
|
(n_p * 36 + n_p * n_p_pad * 29 + n_p * n_obs * 10 + n_p_pad * 7))
|
||||||
|
|
||||||
|
|
||||||
|
def mults(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 15) & ~15
|
||||||
|
return int(n_iter *
|
||||||
|
(n_p * 4 + n_p * n_p_pad * 40 + n_p * n_obs * 13 + n_p_pad * 15))
|
||||||
|
|
||||||
|
|
||||||
|
def divs(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 15) & ~15
|
||||||
|
return int(n_iter * (n_p * n_p_pad + n_p * n_obs + n_p_pad * 2))
|
||||||
|
|
||||||
|
|
||||||
|
def sqrts(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 15) & ~15
|
||||||
|
return int(n_iter * (n_p * n_p_pad * 3 + n_p * n_obs + n_p_pad * 3))
|
||||||
|
|
||||||
|
|
||||||
|
def exps(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 15) & ~15
|
||||||
|
return int(n_iter * n_p * n_obs)
|
||||||
|
|
||||||
|
|
||||||
|
def total(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return adds(n_iter, n_p, n_obs) + mults(n_iter, n_p, n_obs) + divs(
|
||||||
|
n_iter, n_p, n_obs) + sqrts(n_iter, n_p,
|
||||||
|
n_obs) + exps(n_iter, n_p, n_obs) * 30
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
# const int n_p_pad = (n_p + 31) & ~31;
|
||||||
|
|
||||||
|
# ADDs: n_iter * (
|
||||||
|
# n_p * 68 +
|
||||||
|
# n_p * n_p_pad * 29 +
|
||||||
|
# n_p * board.n_obstacles * 10 +
|
||||||
|
# n_p_pad * 7
|
||||||
|
# )
|
||||||
|
|
||||||
|
# MULTs: n_iter * (
|
||||||
|
# n_p * 4 +
|
||||||
|
# n_p * n_p_pad * 40 +
|
||||||
|
# n_p * board.n_obstacles * 13 +
|
||||||
|
# n_p_pad * 15
|
||||||
|
# )
|
||||||
|
|
||||||
|
# SQRTs: n_iter * (
|
||||||
|
# n_p * n_p_pad * 3 +
|
||||||
|
# n_p * board.n_obstacles +
|
||||||
|
# n_p_pad * 3
|
||||||
|
# )
|
||||||
|
|
||||||
|
# DIVs: n_iter * (
|
||||||
|
# n_p * n_p_pad +
|
||||||
|
# n_p * board.n_obstacles +
|
||||||
|
# n_p_pad * 2
|
||||||
|
# )
|
||||||
|
|
||||||
|
# EXPs: n_iter * n_p * board.n_obstacles
|
||||||
|
|
||||||
|
|
||||||
|
def adds(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 31) & ~31
|
||||||
|
return int(n_iter *
|
||||||
|
(n_p * 68 + n_p * n_p_pad * 29 + n_p * n_obs * 10 + n_p_pad * 7))
|
||||||
|
|
||||||
|
|
||||||
|
def mults(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 31) & ~31
|
||||||
|
return int(n_iter *
|
||||||
|
(n_p * 4 + n_p * n_p_pad * 40 + n_p * n_obs * 13 + n_p_pad * 15))
|
||||||
|
|
||||||
|
|
||||||
|
def divs(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 31) & ~31
|
||||||
|
return int(n_iter * (n_p * n_p_pad + n_p * n_obs + n_p_pad * 2))
|
||||||
|
|
||||||
|
|
||||||
|
def sqrts(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 31) & ~31
|
||||||
|
return int(n_iter * (n_p * n_p_pad * 3 + n_p * n_obs + n_p_pad * 3))
|
||||||
|
|
||||||
|
|
||||||
|
def exps(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 31) & ~31
|
||||||
|
return int(n_iter * n_p * n_obs)
|
||||||
|
|
||||||
|
|
||||||
|
def total(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return adds(n_iter, n_p, n_obs) + mults(n_iter, n_p, n_obs) + divs(
|
||||||
|
n_iter, n_p, n_obs) + sqrts(n_iter, n_p,
|
||||||
|
n_obs) + exps(n_iter, n_p, n_obs) * 30
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
# const int n_p_pad = (n_p + 31) & ~31;
|
||||||
|
|
||||||
|
# ADDs: n_iter * (
|
||||||
|
# n_p * 68 +
|
||||||
|
# n_p * n_p_pad * 29 +
|
||||||
|
# n_p * board.n_obstacles * 10 +
|
||||||
|
# n_p_pad * 7
|
||||||
|
# )
|
||||||
|
|
||||||
|
# MULTs: n_iter * (
|
||||||
|
# n_p * 4 +
|
||||||
|
# n_p * n_p_pad * 40 +
|
||||||
|
# n_p * board.n_obstacles * 13 +
|
||||||
|
# n_p_pad * 15
|
||||||
|
# )
|
||||||
|
|
||||||
|
# DIVs: n_iter * (
|
||||||
|
# n_p * n_p_pad +
|
||||||
|
# n_p * board.n_obstacles +
|
||||||
|
# n_p_pad * 2
|
||||||
|
# )
|
||||||
|
|
||||||
|
# SQRTs: n_iter * (
|
||||||
|
# n_p * n_p_pad * 3 +
|
||||||
|
# n_p * board.n_obstacles +
|
||||||
|
# n_p_pad * 3
|
||||||
|
# )
|
||||||
|
|
||||||
|
# EXPs: n_iter * n_p * board.n_obstacles
|
||||||
|
|
||||||
|
|
||||||
|
def adds(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 31) & ~31
|
||||||
|
return int(n_iter *
|
||||||
|
(n_p * 68 + n_p * n_p_pad * 29 + n_p * n_obs * 10 + n_p_pad * 7))
|
||||||
|
|
||||||
|
|
||||||
|
def mults(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 31) & ~31
|
||||||
|
return int(n_iter *
|
||||||
|
(n_p * 4 + n_p * n_p_pad * 40 + n_p * n_obs * 13 + n_p_pad * 15))
|
||||||
|
|
||||||
|
|
||||||
|
def divs(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 31) & ~31
|
||||||
|
return int(n_iter * (n_p * n_p_pad + n_p * n_obs + n_p_pad * 2))
|
||||||
|
|
||||||
|
|
||||||
|
def sqrts(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 31) & ~31
|
||||||
|
return int(n_iter * (n_p * n_p_pad * 3 + n_p * n_obs + n_p_pad * 3))
|
||||||
|
|
||||||
|
|
||||||
|
def exps(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 31) & ~31
|
||||||
|
return int(n_iter * n_p * n_obs)
|
||||||
|
|
||||||
|
|
||||||
|
def total(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return adds(n_iter, n_p, n_obs) + mults(n_iter, n_p, n_obs) + divs(
|
||||||
|
n_iter, n_p, n_obs) + sqrts(n_iter, n_p,
|
||||||
|
n_obs) + exps(n_iter, n_p, n_obs) * 30
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
# const int n_p_pad = (n_p + 31) & ~31;
|
||||||
|
|
||||||
|
# ADDs: n_iter * (
|
||||||
|
# n_p * 68 +
|
||||||
|
# n_p * n_p_pad * 29
|
||||||
|
# n_p * board.n_obstacles * 10
|
||||||
|
# n_p_pad * 9
|
||||||
|
# )
|
||||||
|
|
||||||
|
# MULTs: n_iter * (
|
||||||
|
# n_p * 4 +
|
||||||
|
# n_p * n_p_pad * 40
|
||||||
|
# n_p * board.n_obstacles * 13
|
||||||
|
# n_p_pad * 17
|
||||||
|
# )
|
||||||
|
|
||||||
|
# DIVs: n_iter * (
|
||||||
|
# n_p * n_p_pad
|
||||||
|
# n_p * board.n_obstacles
|
||||||
|
# n_p_pad * 2
|
||||||
|
# )
|
||||||
|
|
||||||
|
# SQRTs: n_iter * (
|
||||||
|
# n_p * n_p_pad * 3
|
||||||
|
# n_p * board.n_obstacles
|
||||||
|
# n_p_pad * 3
|
||||||
|
# )
|
||||||
|
|
||||||
|
# EXPs: n_iter * n_p * board.n_obstacles
|
||||||
|
|
||||||
|
|
||||||
|
def adds(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 31) & ~31
|
||||||
|
return int(n_iter *
|
||||||
|
(n_p * 68 + n_p * n_p_pad * 29 + n_p * n_obs * 10 + n_p_pad * 9))
|
||||||
|
|
||||||
|
|
||||||
|
def mults(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 31) & ~31
|
||||||
|
return int(n_iter *
|
||||||
|
(n_p * 4 + n_p * n_p_pad * 40 + n_p * n_obs * 13 + n_p_pad * 17))
|
||||||
|
|
||||||
|
|
||||||
|
def divs(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 31) & ~31
|
||||||
|
return int(n_iter * (n_p * n_p_pad + n_p * n_obs + n_p_pad * 2))
|
||||||
|
|
||||||
|
|
||||||
|
def sqrts(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 31) & ~31
|
||||||
|
return int(n_iter * (n_p * n_p_pad * 3 + n_p * n_obs + n_p_pad * 3))
|
||||||
|
|
||||||
|
|
||||||
|
def exps(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 31) & ~31
|
||||||
|
return int(n_iter * n_p * n_obs)
|
||||||
|
|
||||||
|
|
||||||
|
def total(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return adds(n_iter, n_p, n_obs) + mults(n_iter, n_p, n_obs) + divs(
|
||||||
|
n_iter, n_p, n_obs) + sqrts(n_iter, n_p,
|
||||||
|
n_obs) + exps(n_iter, n_p, n_obs) * 30
|
||||||
@@ -0,0 +1,61 @@
|
|||||||
|
# const int n_p_pad = (n_p + 31) & ~31;
|
||||||
|
|
||||||
|
# ADDs: n_iter * (
|
||||||
|
# n_p * 68 +
|
||||||
|
# n_p * n_p_pad * 29 +
|
||||||
|
# n_p * board.n_obstacles * 10 +
|
||||||
|
# n_p_pad * 7
|
||||||
|
# )
|
||||||
|
|
||||||
|
# MULTs: n_iter * (
|
||||||
|
# n_p * 4 +
|
||||||
|
# n_p * n_p_pad * 42 +
|
||||||
|
# n_p * board.n_obstacles * 13 +
|
||||||
|
# n_p_pad * 16
|
||||||
|
# )
|
||||||
|
|
||||||
|
# DIVs: n_iter * (
|
||||||
|
# n_p * n_p_pad * 3 +
|
||||||
|
# n_p * board.n_obstacles +
|
||||||
|
# n_p_pad * 2
|
||||||
|
# )
|
||||||
|
|
||||||
|
# SQRTs: n_iter * (
|
||||||
|
# n_p * n_p_pad * 3 +
|
||||||
|
# n_p * board.n_obstacles +
|
||||||
|
# n_p_pad * 3
|
||||||
|
# )
|
||||||
|
|
||||||
|
# EXPs: n_iter * n_p * board.n_obstacles
|
||||||
|
|
||||||
|
|
||||||
|
def adds(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 31) & ~31
|
||||||
|
return int(n_iter *
|
||||||
|
(n_p * 68 + n_p * n_p_pad * 29 + n_p * n_obs * 10 + n_p_pad * 7))
|
||||||
|
|
||||||
|
|
||||||
|
def mults(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 31) & ~31
|
||||||
|
return int(n_iter *
|
||||||
|
(n_p * 4 + n_p * n_p_pad * 42 + n_p * n_obs * 13 + n_p_pad * 16))
|
||||||
|
|
||||||
|
|
||||||
|
def divs(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 31) & ~31
|
||||||
|
return int(n_iter * (n_p * n_p_pad * 3 + n_p * n_obs + n_p_pad * 2))
|
||||||
|
|
||||||
|
|
||||||
|
def sqrts(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 31) & ~31
|
||||||
|
return int(n_iter * (n_p * n_p_pad * 3 + n_p * n_obs + n_p_pad * 3))
|
||||||
|
|
||||||
|
|
||||||
|
def exps(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 31) & ~31
|
||||||
|
return int(n_iter * n_p * n_obs)
|
||||||
|
|
||||||
|
|
||||||
|
def total(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return adds(n_iter, n_p, n_obs) + mults(n_iter, n_p, n_obs) + divs(
|
||||||
|
n_iter, n_p, n_obs) + sqrts(n_iter, n_p, n_obs) + exps(n_iter, n_p, n_obs) * 30
|
||||||
@@ -0,0 +1,61 @@
|
|||||||
|
# const int n_p_pad = (n_p + 31) & ~31;
|
||||||
|
|
||||||
|
# ADDs: n_iter * (
|
||||||
|
# n_p * 84 +
|
||||||
|
# n_p * n_p_pad * 29 +
|
||||||
|
# n_p * board.n_obstacles * 10 +
|
||||||
|
# n_p_pad * 7
|
||||||
|
# )
|
||||||
|
|
||||||
|
# MULTs: n_iter * (
|
||||||
|
# n_p * 4 +
|
||||||
|
# n_p * n_p_pad * 42 +
|
||||||
|
# n_p * board.n_obstacles * 13 +
|
||||||
|
# n_p_pad * 16
|
||||||
|
# )
|
||||||
|
|
||||||
|
# DIVs: n_iter * (
|
||||||
|
# n_p * n_p_pad * 3 +
|
||||||
|
# n_p * board.n_obstacles +
|
||||||
|
# n_p_pad * 2
|
||||||
|
# )
|
||||||
|
|
||||||
|
# SQRTs: n_iter * (
|
||||||
|
# n_p * n_p_pad * 3 +
|
||||||
|
# n_p * board.n_obstacles +
|
||||||
|
# n_p_pad * 3
|
||||||
|
# )
|
||||||
|
|
||||||
|
# EXPs: n_iter * n_p * board.n_obstacles
|
||||||
|
|
||||||
|
|
||||||
|
def adds(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 31) & ~31
|
||||||
|
return int(n_iter *
|
||||||
|
(n_p * 84 + n_p * n_p_pad * 29 + n_p * n_obs * 10 + n_p_pad * 7))
|
||||||
|
|
||||||
|
|
||||||
|
def mults(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 31) & ~31
|
||||||
|
return int(n_iter *
|
||||||
|
(n_p * 4 + n_p * n_p_pad * 42 + n_p * n_obs * 13 + n_p_pad * 16))
|
||||||
|
|
||||||
|
|
||||||
|
def divs(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 31) & ~31
|
||||||
|
return int(n_iter * (n_p * n_p_pad * 3 + n_p * n_obs + n_p_pad * 2))
|
||||||
|
|
||||||
|
|
||||||
|
def sqrts(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 31) & ~31
|
||||||
|
return int(n_iter * (n_p * n_p_pad * 3 + n_p * n_obs + n_p_pad * 3))
|
||||||
|
|
||||||
|
|
||||||
|
def exps(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 31) & ~31
|
||||||
|
return int(n_iter * n_p * n_obs)
|
||||||
|
|
||||||
|
|
||||||
|
def total(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return adds(n_iter, n_p, n_obs) + mults(n_iter, n_p, n_obs) + divs(
|
||||||
|
n_iter, n_p, n_obs) + sqrts(n_iter, n_p, n_obs) + exps(n_iter, n_p, n_obs) * 30
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
# const int n_p_pad = (n_p + 15) & ~15;
|
||||||
|
|
||||||
|
# ADDs: n_iter * (
|
||||||
|
# n_p_pad * 7 +
|
||||||
|
# n_p_pad * n_p * 29 +
|
||||||
|
# n_p_pad * 2(=board.n_obstacles) * 24 +
|
||||||
|
# n_p_pad * 7
|
||||||
|
# )
|
||||||
|
|
||||||
|
# MULTs: n_iter * (
|
||||||
|
# n_p_pad * 4 +
|
||||||
|
# n_p_pad * n_p * 42 +
|
||||||
|
# n_p_pad * 2(=board.n_obstacles) * 31 +
|
||||||
|
# n_p_pad * 16
|
||||||
|
# )
|
||||||
|
|
||||||
|
# DIVs: n_iter * (
|
||||||
|
# n_p_pad * n_p * 3 +
|
||||||
|
# n_p_pad * 2(=board.n_obstacles) * 1 +
|
||||||
|
# n_p_pad * 2
|
||||||
|
# )
|
||||||
|
|
||||||
|
# SQRTs: n_iter * (
|
||||||
|
# n_p_pad * n_p * 3 +
|
||||||
|
# n_p_pad * 2(=board.n_obstacles) * 1 +
|
||||||
|
# n_p_pad * 3
|
||||||
|
# )
|
||||||
|
|
||||||
|
|
||||||
|
def adds(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 15) & ~15
|
||||||
|
return int(
|
||||||
|
n_iter *
|
||||||
|
(n_p_pad * 7 + n_p_pad * n_p * 29 + n_p_pad * n_obs * 24 + n_p_pad * 7))
|
||||||
|
|
||||||
|
|
||||||
|
def mults(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 15) & ~15
|
||||||
|
return int(
|
||||||
|
n_iter *
|
||||||
|
(n_p_pad * 4 + n_p_pad * n_p * 42 + n_p_pad * n_obs * 31 + n_p_pad * 16))
|
||||||
|
|
||||||
|
|
||||||
|
def divs(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 15) & ~15
|
||||||
|
return int(n_iter * (n_p_pad * n_p * 3 + n_p_pad * n_obs * 1 + n_p_pad * 2))
|
||||||
|
|
||||||
|
|
||||||
|
def sqrts(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 15) & ~15
|
||||||
|
return int(n_iter * (n_p_pad * n_p * 3 + n_p_pad * n_obs * 1 + n_p_pad * 3))
|
||||||
|
|
||||||
|
|
||||||
|
def exps(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 15) & ~15
|
||||||
|
return int(0)
|
||||||
|
|
||||||
|
|
||||||
|
def total(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return adds(n_iter, n_p, n_obs) + mults(n_iter, n_p, n_obs) + divs(
|
||||||
|
n_iter, n_p, n_obs) + sqrts(n_iter, n_p,
|
||||||
|
n_obs) + exps(n_iter, n_p, n_obs) * 30
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
# const int n_p_pad = (n_p + 63) & ~63;
|
||||||
|
|
||||||
|
# ADDs: n_iter * (
|
||||||
|
# n_p * 132 +
|
||||||
|
# n_p * n_p_pad * 29 +
|
||||||
|
# n_p * board.n_obstacles * 10 +
|
||||||
|
# n_p_pad * 7
|
||||||
|
# )
|
||||||
|
|
||||||
|
# MULTs: n_iter * (
|
||||||
|
# n_p * 4 +
|
||||||
|
# n_p * n_p_pad * 40 +
|
||||||
|
# n_p * board.n_obstacles * 13 +
|
||||||
|
# n_p_pad * 15
|
||||||
|
# )
|
||||||
|
|
||||||
|
# DIVs: n_iter * (
|
||||||
|
# n_p * n_p_pad +
|
||||||
|
# n_p * board.n_obstacles +
|
||||||
|
# n_p_pad * 2
|
||||||
|
# )
|
||||||
|
|
||||||
|
# SQRTs: n_iter * (
|
||||||
|
# n_p * n_p_pad * 3 +
|
||||||
|
# n_p * board.n_obstacles +
|
||||||
|
# n_p_pad * 3
|
||||||
|
# )
|
||||||
|
|
||||||
|
# EXPs: n_iter * n_p * board.n_obstacles
|
||||||
|
|
||||||
|
|
||||||
|
def adds(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 63) & ~63
|
||||||
|
return int(n_iter *
|
||||||
|
(n_p * 132 + n_p * n_p_pad * 29 + n_p * n_obs * 10 + n_p_pad * 7))
|
||||||
|
|
||||||
|
|
||||||
|
def mults(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 63) & ~63
|
||||||
|
return int(n_iter *
|
||||||
|
(n_p * 4 + n_p * n_p_pad * 40 + n_p * n_obs * 13 + n_p_pad * 15))
|
||||||
|
|
||||||
|
|
||||||
|
def divs(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 63) & ~63
|
||||||
|
return int(n_iter * (n_p * n_p_pad + n_p * n_obs + n_p_pad * 2))
|
||||||
|
|
||||||
|
|
||||||
|
def sqrts(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 63) & ~63
|
||||||
|
return int(n_iter * (n_p * n_p_pad * 3 + n_p * n_obs + n_p_pad * 3))
|
||||||
|
|
||||||
|
|
||||||
|
def exps(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 63) & ~63
|
||||||
|
return int(n_iter * n_p * n_obs)
|
||||||
|
|
||||||
|
|
||||||
|
def total(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return adds(n_iter, n_p, n_obs) + mults(n_iter, n_p, n_obs) + divs(
|
||||||
|
n_iter, n_p, n_obs) + sqrts(n_iter, n_p,
|
||||||
|
n_obs) + exps(n_iter, n_p, n_obs) * 30
|
||||||
@@ -0,0 +1,69 @@
|
|||||||
|
# FLOPCOUNT (everything inside the t-loop). EXP kept as its own op (one real exp() per call).
|
||||||
|
# section costs: overhead 4 ADD 4 MULT | distance pair 3 ADD 2 MULT 1 SQRT |
|
||||||
|
# ped-ped j 11 ADD 22 MULT 2 SQRT 1 DIV 1 EXP |
|
||||||
|
# obstacle 10 ADD 13 MULT 1 SQRT 1 DIV 1 EXP | update 7 ADD 17 MULT 3 SQRT 2 DIV
|
||||||
|
|
||||||
|
# ADDs: n_iter * (
|
||||||
|
# n_p * 4 +
|
||||||
|
# 0.5 * (n_p*n_p - n_p) * 3 +
|
||||||
|
# n_p * (n_p - 1) * 11 +
|
||||||
|
# n_p * board.n_obstacles * 10 +
|
||||||
|
# n_p * 7
|
||||||
|
# )
|
||||||
|
|
||||||
|
# MULTs: n_iter * (
|
||||||
|
# n_p * 4 +
|
||||||
|
# 0.5 * (n_p*n_p - n_p) * 2 +
|
||||||
|
# n_p * (n_p - 1) * 22 +
|
||||||
|
# n_p * board.n_obstacles * 13 +
|
||||||
|
# n_p * 17
|
||||||
|
# )
|
||||||
|
|
||||||
|
# DIVs: n_iter * (
|
||||||
|
# n_p * (n_p - 1) +
|
||||||
|
# n_p * board.n_obstacles +
|
||||||
|
# n_p * 2
|
||||||
|
# )
|
||||||
|
|
||||||
|
# SQRTs: n_iter * (
|
||||||
|
# 0.5 * (n_p*n_p - n_p) +
|
||||||
|
# n_p * (n_p - 1) * 2 +
|
||||||
|
# n_p * board.n_obstacles +
|
||||||
|
# n_p * 3
|
||||||
|
# )
|
||||||
|
|
||||||
|
# EXPs: n_iter * (
|
||||||
|
# n_p * (n_p - 1) +
|
||||||
|
# n_p * board.n_obstacles
|
||||||
|
# )
|
||||||
|
|
||||||
|
# total with EXP = 30: n_iter * ( 69 * n_p ** 2 - 32 * n_p + 55 * n_obstacles * n_p )
|
||||||
|
|
||||||
|
|
||||||
|
def adds(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p * 4 + 0.5 * (n_p * n_p - n_p) * 3 + n_p *
|
||||||
|
(n_p - 1) * 11 + n_p * n_obs * 10 + n_p * 7))
|
||||||
|
|
||||||
|
|
||||||
|
def mults(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p * 4 + 0.5 * (n_p * n_p - n_p) * 2 + n_p *
|
||||||
|
(n_p - 1) * 22 + n_p * n_obs * 13 + n_p * 17))
|
||||||
|
|
||||||
|
|
||||||
|
def divs(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p * (n_p - 1) + n_p * n_obs + n_p * 2))
|
||||||
|
|
||||||
|
|
||||||
|
def sqrts(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (0.5 * (n_p * n_p - n_p) + n_p *
|
||||||
|
(n_p - 1) * 2 + n_p * n_obs + n_p * 3))
|
||||||
|
|
||||||
|
|
||||||
|
def exps(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p * (n_p - 1) + n_p * n_obs))
|
||||||
|
|
||||||
|
|
||||||
|
def total(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return adds(n_iter, n_p, n_obs) + mults(n_iter, n_p, n_obs) + divs(
|
||||||
|
n_iter, n_p, n_obs) + sqrts(n_iter, n_p,
|
||||||
|
n_obs) + exps(n_iter, n_p, n_obs) * 30
|
||||||
@@ -0,0 +1,70 @@
|
|||||||
|
# FLOPCOUNT (everything inside the t-loop). EXP kept as its own op (one real exp() per call).
|
||||||
|
# section costs: overhead 4 ADD 4 MULT (+ reductions 4*K = 64 ADD, K=16) |
|
||||||
|
# distance pair 3 ADD 2 MULT 1 SQRT |
|
||||||
|
# ped-ped j 11 ADD 22 MULT 2 SQRT 1 DIV 1 EXP |
|
||||||
|
# obstacle 10 ADD 13 MULT 1 SQRT 1 DIV 1 EXP | update 7 ADD 17 MULT 3 SQRT 2 DIV
|
||||||
|
|
||||||
|
# ADDs: n_iter * (
|
||||||
|
# n_p * 68 +
|
||||||
|
# 0.5 * (n_p*n_p - n_p) * 3 +
|
||||||
|
# n_p * (n_p - 1) * 11 +
|
||||||
|
# n_p * board.n_obstacles * 10 +
|
||||||
|
# n_p * 7
|
||||||
|
# )
|
||||||
|
|
||||||
|
# MULTs: n_iter * (
|
||||||
|
# n_p * 4 +
|
||||||
|
# 0.5 * (n_p*n_p - n_p) * 2 +
|
||||||
|
# n_p * (n_p - 1) * 22 +
|
||||||
|
# n_p * board.n_obstacles * 13 +
|
||||||
|
# n_p * 17
|
||||||
|
# )
|
||||||
|
|
||||||
|
# DIVs: n_iter * (
|
||||||
|
# n_p * (n_p - 1) +
|
||||||
|
# n_p * board.n_obstacles +
|
||||||
|
# n_p * 2
|
||||||
|
# )
|
||||||
|
|
||||||
|
# SQRTs: n_iter * (
|
||||||
|
# 0.5 * (n_p*n_p - n_p) +
|
||||||
|
# n_p * (n_p - 1) * 2 +
|
||||||
|
# n_p * board.n_obstacles +
|
||||||
|
# n_p * 3
|
||||||
|
# )
|
||||||
|
|
||||||
|
# EXPs: n_iter * (
|
||||||
|
# n_p * (n_p - 1) +
|
||||||
|
# n_p * board.n_obstacles
|
||||||
|
# )
|
||||||
|
|
||||||
|
# total with EXP = 30: n_iter * ( 69 * n_p ** 2 + 32 * n_p + 55 * n_obstacles * n_p )
|
||||||
|
|
||||||
|
|
||||||
|
def adds(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p * 68 + 0.5 * (n_p * n_p - n_p) * 3 + n_p *
|
||||||
|
(n_p - 1) * 11 + n_p * n_obs * 10 + n_p * 7))
|
||||||
|
|
||||||
|
|
||||||
|
def mults(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p * 4 + 0.5 * (n_p * n_p - n_p) * 2 + n_p *
|
||||||
|
(n_p - 1) * 22 + n_p * n_obs * 13 + n_p * 17))
|
||||||
|
|
||||||
|
|
||||||
|
def divs(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p * (n_p - 1) + n_p * n_obs + n_p * 2))
|
||||||
|
|
||||||
|
|
||||||
|
def sqrts(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (0.5 * (n_p * n_p - n_p) + n_p *
|
||||||
|
(n_p - 1) * 2 + n_p * n_obs + n_p * 3))
|
||||||
|
|
||||||
|
|
||||||
|
def exps(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p * (n_p - 1) + n_p * n_obs))
|
||||||
|
|
||||||
|
|
||||||
|
def total(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return adds(n_iter, n_p, n_obs) + mults(n_iter, n_p, n_obs) + divs(
|
||||||
|
n_iter, n_p, n_obs) + sqrts(n_iter, n_p,
|
||||||
|
n_obs) + exps(n_iter, n_p, n_obs) * 30
|
||||||
@@ -0,0 +1,70 @@
|
|||||||
|
# FLOPCOUNT (everything inside the t-loop). EXP kept as its own op (one real exp() per call).
|
||||||
|
# section costs: overhead 4 ADD 4 MULT (+ reductions 4*K = 8 ADD, K=2) |
|
||||||
|
# distance pair 3 ADD 2 MULT 1 SQRT |
|
||||||
|
# ped-ped j 11 ADD 22 MULT 2 SQRT 1 DIV 1 EXP |
|
||||||
|
# obstacle 10 ADD 13 MULT 1 SQRT 1 DIV 1 EXP | update 7 ADD 17 MULT 3 SQRT 2 DIV
|
||||||
|
|
||||||
|
# ADDs: n_iter * (
|
||||||
|
# n_p * 12 +
|
||||||
|
# 0.5 * (n_p*n_p - n_p) * 3 +
|
||||||
|
# n_p * (n_p - 1) * 11 +
|
||||||
|
# n_p * board.n_obstacles * 10 +
|
||||||
|
# n_p * 7
|
||||||
|
# )
|
||||||
|
|
||||||
|
# MULTs: n_iter * (
|
||||||
|
# n_p * 4 +
|
||||||
|
# 0.5 * (n_p*n_p - n_p) * 2 +
|
||||||
|
# n_p * (n_p - 1) * 22 +
|
||||||
|
# n_p * board.n_obstacles * 13 +
|
||||||
|
# n_p * 17
|
||||||
|
# )
|
||||||
|
|
||||||
|
# DIVs: n_iter * (
|
||||||
|
# n_p * (n_p - 1) +
|
||||||
|
# n_p * board.n_obstacles +
|
||||||
|
# n_p * 2
|
||||||
|
# )
|
||||||
|
|
||||||
|
# SQRTs: n_iter * (
|
||||||
|
# 0.5 * (n_p*n_p - n_p) +
|
||||||
|
# n_p * (n_p - 1) * 2 +
|
||||||
|
# n_p * board.n_obstacles +
|
||||||
|
# n_p * 3
|
||||||
|
# )
|
||||||
|
|
||||||
|
# EXPs: n_iter * (
|
||||||
|
# n_p * (n_p - 1) +
|
||||||
|
# n_p * board.n_obstacles
|
||||||
|
# )
|
||||||
|
|
||||||
|
# total with EXP = 30: n_iter * ( 69 * n_p ** 2 - 24 * n_p + 55 * n_obstacles * n_p )
|
||||||
|
|
||||||
|
|
||||||
|
def adds(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p * 12 + 0.5 * (n_p * n_p - n_p) * 3 + n_p *
|
||||||
|
(n_p - 1) * 11 + n_p * n_obs * 10 + n_p * 7))
|
||||||
|
|
||||||
|
|
||||||
|
def mults(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p * 4 + 0.5 * (n_p * n_p - n_p) * 2 + n_p *
|
||||||
|
(n_p - 1) * 22 + n_p * n_obs * 13 + n_p * 17))
|
||||||
|
|
||||||
|
|
||||||
|
def divs(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p * (n_p - 1) + n_p * n_obs + n_p * 2))
|
||||||
|
|
||||||
|
|
||||||
|
def sqrts(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (0.5 * (n_p * n_p - n_p) + n_p *
|
||||||
|
(n_p - 1) * 2 + n_p * n_obs + n_p * 3))
|
||||||
|
|
||||||
|
|
||||||
|
def exps(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p * (n_p - 1) + n_p * n_obs))
|
||||||
|
|
||||||
|
|
||||||
|
def total(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return adds(n_iter, n_p, n_obs) + mults(n_iter, n_p, n_obs) + divs(
|
||||||
|
n_iter, n_p, n_obs) + sqrts(n_iter, n_p,
|
||||||
|
n_obs) + exps(n_iter, n_p, n_obs) * 30
|
||||||
@@ -0,0 +1,70 @@
|
|||||||
|
# FLOPCOUNT (everything inside the t-loop). EXP kept as its own op (one real exp() per call).
|
||||||
|
# section costs: overhead 4 ADD 4 MULT (+ reductions 4*K = 16 ADD, K=4) |
|
||||||
|
# distance pair 3 ADD 2 MULT 1 SQRT |
|
||||||
|
# ped-ped j 11 ADD 22 MULT 2 SQRT 1 DIV 1 EXP |
|
||||||
|
# obstacle 10 ADD 13 MULT 1 SQRT 1 DIV 1 EXP | update 7 ADD 17 MULT 3 SQRT 2 DIV
|
||||||
|
|
||||||
|
# ADDs: n_iter * (
|
||||||
|
# n_p * 20 +
|
||||||
|
# 0.5 * (n_p*n_p - n_p) * 3 +
|
||||||
|
# n_p * (n_p - 1) * 11 +
|
||||||
|
# n_p * board.n_obstacles * 10 +
|
||||||
|
# n_p * 7
|
||||||
|
# )
|
||||||
|
|
||||||
|
# MULTs: n_iter * (
|
||||||
|
# n_p * 4 +
|
||||||
|
# 0.5 * (n_p*n_p - n_p) * 2 +
|
||||||
|
# n_p * (n_p - 1) * 22 +
|
||||||
|
# n_p * board.n_obstacles * 13 +
|
||||||
|
# n_p * 17
|
||||||
|
# )
|
||||||
|
|
||||||
|
# DIVs: n_iter * (
|
||||||
|
# n_p * (n_p - 1) +
|
||||||
|
# n_p * board.n_obstacles +
|
||||||
|
# n_p * 2
|
||||||
|
# )
|
||||||
|
|
||||||
|
# SQRTs: n_iter * (
|
||||||
|
# 0.5 * (n_p*n_p - n_p) +
|
||||||
|
# n_p * (n_p - 1) * 2 +
|
||||||
|
# n_p * board.n_obstacles +
|
||||||
|
# n_p * 3
|
||||||
|
# )
|
||||||
|
|
||||||
|
# EXPs: n_iter * (
|
||||||
|
# n_p * (n_p - 1) +
|
||||||
|
# n_p * board.n_obstacles
|
||||||
|
# )
|
||||||
|
|
||||||
|
# total with EXP = 30: n_iter * ( 69 * n_p ** 2 - 16 * n_p + 55 * n_obstacles * n_p )
|
||||||
|
|
||||||
|
|
||||||
|
def adds(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p * 20 + 0.5 * (n_p * n_p - n_p) * 3 + n_p *
|
||||||
|
(n_p - 1) * 11 + n_p * n_obs * 10 + n_p * 7))
|
||||||
|
|
||||||
|
|
||||||
|
def mults(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p * 4 + 0.5 * (n_p * n_p - n_p) * 2 + n_p *
|
||||||
|
(n_p - 1) * 22 + n_p * n_obs * 13 + n_p * 17))
|
||||||
|
|
||||||
|
|
||||||
|
def divs(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p * (n_p - 1) + n_p * n_obs + n_p * 2))
|
||||||
|
|
||||||
|
|
||||||
|
def sqrts(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (0.5 * (n_p * n_p - n_p) + n_p *
|
||||||
|
(n_p - 1) * 2 + n_p * n_obs + n_p * 3))
|
||||||
|
|
||||||
|
|
||||||
|
def exps(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p * (n_p - 1) + n_p * n_obs))
|
||||||
|
|
||||||
|
|
||||||
|
def total(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return adds(n_iter, n_p, n_obs) + mults(n_iter, n_p, n_obs) + divs(
|
||||||
|
n_iter, n_p, n_obs) + sqrts(n_iter, n_p,
|
||||||
|
n_obs) + exps(n_iter, n_p, n_obs) * 30
|
||||||
@@ -0,0 +1,70 @@
|
|||||||
|
# FLOPCOUNT (everything inside the t-loop). EXP kept as its own op (one real exp() per call).
|
||||||
|
# section costs: overhead 4 ADD 4 MULT (+ reductions 4*K = 32 ADD, K=8) |
|
||||||
|
# distance pair 3 ADD 2 MULT 1 SQRT |
|
||||||
|
# ped-ped j 11 ADD 22 MULT 2 SQRT 1 DIV 1 EXP |
|
||||||
|
# obstacle 10 ADD 13 MULT 1 SQRT 1 DIV 1 EXP | update 7 ADD 17 MULT 3 SQRT 2 DIV
|
||||||
|
|
||||||
|
# ADDs: n_iter * (
|
||||||
|
# n_p * 36 +
|
||||||
|
# 0.5 * (n_p*n_p - n_p) * 3 +
|
||||||
|
# n_p * (n_p - 1) * 11 +
|
||||||
|
# n_p * board.n_obstacles * 10 +
|
||||||
|
# n_p * 7
|
||||||
|
# )
|
||||||
|
|
||||||
|
# MULTs: n_iter * (
|
||||||
|
# n_p * 4 +
|
||||||
|
# 0.5 * (n_p*n_p - n_p) * 2 +
|
||||||
|
# n_p * (n_p - 1) * 22 +
|
||||||
|
# n_p * board.n_obstacles * 13 +
|
||||||
|
# n_p * 17
|
||||||
|
# )
|
||||||
|
|
||||||
|
# DIVs: n_iter * (
|
||||||
|
# n_p * (n_p - 1) +
|
||||||
|
# n_p * board.n_obstacles +
|
||||||
|
# n_p * 2
|
||||||
|
# )
|
||||||
|
|
||||||
|
# SQRTs: n_iter * (
|
||||||
|
# 0.5 * (n_p*n_p - n_p) +
|
||||||
|
# n_p * (n_p - 1) * 2 +
|
||||||
|
# n_p * board.n_obstacles +
|
||||||
|
# n_p * 3
|
||||||
|
# )
|
||||||
|
|
||||||
|
# EXPs: n_iter * (
|
||||||
|
# n_p * (n_p - 1) +
|
||||||
|
# n_p * board.n_obstacles
|
||||||
|
# )
|
||||||
|
|
||||||
|
# total with EXP = 30: n_iter * ( 69 * n_p ** 2 + 55 * n_obstacles * n_p ) linear term cancels
|
||||||
|
|
||||||
|
|
||||||
|
def adds(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p * 36 + 0.5 * (n_p * n_p - n_p) * 3 + n_p *
|
||||||
|
(n_p - 1) * 11 + n_p * n_obs * 10 + n_p * 7))
|
||||||
|
|
||||||
|
|
||||||
|
def mults(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p * 4 + 0.5 * (n_p * n_p - n_p) * 2 + n_p *
|
||||||
|
(n_p - 1) * 22 + n_p * n_obs * 13 + n_p * 17))
|
||||||
|
|
||||||
|
|
||||||
|
def divs(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p * (n_p - 1) + n_p * n_obs + n_p * 2))
|
||||||
|
|
||||||
|
|
||||||
|
def sqrts(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (0.5 * (n_p * n_p - n_p) + n_p *
|
||||||
|
(n_p - 1) * 2 + n_p * n_obs + n_p * 3))
|
||||||
|
|
||||||
|
|
||||||
|
def exps(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p * (n_p - 1) + n_p * n_obs))
|
||||||
|
|
||||||
|
|
||||||
|
def total(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return adds(n_iter, n_p, n_obs) + mults(n_iter, n_p, n_obs) + divs(
|
||||||
|
n_iter, n_p, n_obs) + sqrts(n_iter, n_p,
|
||||||
|
n_obs) + exps(n_iter, n_p, n_obs) * 30
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
# ADDs: n_iter * n_p * 11 +
|
||||||
|
# n_iter * n_p * (n_p - 1) * 14 +
|
||||||
|
# n_iter * n_p * board.n_obstacles * 12
|
||||||
|
|
||||||
|
# MULTs: n_iter * n_p * 21 +
|
||||||
|
# n_iter * n_p * (n_p - 1) * 24 +
|
||||||
|
# n_iter * n_p * board.n_obstacles * 19
|
||||||
|
|
||||||
|
# DIVs: n_iter * n_p * 2 +
|
||||||
|
# n_iter * n_p * (n_p - 1) +
|
||||||
|
# n_iter * n_p * board.n_obstacles
|
||||||
|
|
||||||
|
# SQRTs: n_iter * n_p * 3 +
|
||||||
|
# n_iter * n_p * (n_p - 1) * 3 +
|
||||||
|
# n_iter * n_p * board.n_obstacles
|
||||||
|
|
||||||
|
# EXPs: n_iter * n_p * (n_p - 1) +
|
||||||
|
# n_iter * n_p * board.n_obstacles
|
||||||
|
|
||||||
|
|
||||||
|
def adds(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * n_p * (11 + (n_p - 1) * 14 + n_obs * 12))
|
||||||
|
|
||||||
|
|
||||||
|
def mults(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * n_p * (21 + (n_p - 1) * 24 + n_obs * 19))
|
||||||
|
|
||||||
|
|
||||||
|
def divs(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * n_p * (2 + (n_p - 1) + n_obs))
|
||||||
|
|
||||||
|
|
||||||
|
def sqrts(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * n_p * (3 + (n_p - 1) * 3 + n_obs))
|
||||||
|
|
||||||
|
|
||||||
|
def exps(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * n_p * ((n_p - 1) + n_obs))
|
||||||
|
|
||||||
|
|
||||||
|
def total(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return adds(n_iter, n_p, n_obs) + mults(n_iter, n_p, n_obs) + divs(
|
||||||
|
n_iter, n_p, n_obs) + sqrts(n_iter, n_p,
|
||||||
|
n_obs) + exps(n_iter, n_p, n_obs) * 30
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
# ADDs: n_iter * n_p * 11 +
|
||||||
|
# n_iter * n_p * (n_p - 1) * 14 +
|
||||||
|
# n_iter * n_p * board.n_obstacles * 12
|
||||||
|
|
||||||
|
# MULTs: n_iter * n_p * 21 +
|
||||||
|
# n_iter * n_p * (n_p - 1) * 24 +
|
||||||
|
# n_iter * n_p * board.n_obstacles * 19
|
||||||
|
|
||||||
|
# DIVs: n_iter * n_p * 2 +
|
||||||
|
# n_iter * n_p * (n_p - 1) +
|
||||||
|
# n_iter * n_p * board.n_obstacles
|
||||||
|
|
||||||
|
# SQRTs: n_iter * n_p * 3 +
|
||||||
|
# n_iter * n_p * (n_p - 1) * 3 +
|
||||||
|
# n_iter * n_p * board.n_obstacles
|
||||||
|
|
||||||
|
# EXPs: n_iter * n_p * (n_p - 1) +
|
||||||
|
# n_iter * n_p * board.n_obstacles
|
||||||
|
|
||||||
|
|
||||||
|
def adds(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * n_p * (11 + (n_p - 1) * 14 + n_obs * 12))
|
||||||
|
|
||||||
|
|
||||||
|
def mults(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * n_p * (21 + (n_p - 1) * 24 + n_obs * 19))
|
||||||
|
|
||||||
|
|
||||||
|
def divs(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * n_p * (2 + (n_p - 1) + n_obs))
|
||||||
|
|
||||||
|
|
||||||
|
def sqrts(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * n_p * (3 + (n_p - 1) * 3 + n_obs))
|
||||||
|
|
||||||
|
|
||||||
|
def exps(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * n_p * ((n_p - 1) + n_obs))
|
||||||
|
|
||||||
|
|
||||||
|
def total(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return adds(n_iter, n_p, n_obs) + mults(n_iter, n_p, n_obs) + divs(
|
||||||
|
n_iter, n_p, n_obs) + sqrts(n_iter, n_p,
|
||||||
|
n_obs) + exps(n_iter, n_p, n_obs) * 30
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
# const int n_p_pad = (n_p + 3) & ~3;
|
||||||
|
|
||||||
|
# flops per iteration (one pass of the outer time loop):
|
||||||
|
# ADDs: n_p * 12 + n_p * n_p_pad * 15 + n_p * board.n_obstacles * 12 + n_p * 7
|
||||||
|
# MULTs: n_p * 4 + n_p * n_p_pad * 24 + n_p * board.n_obstacles * 19 + n_p * 16
|
||||||
|
# DIVs: n_p * n_p_pad * 1 + n_p * board.n_obstacles + n_p * 2
|
||||||
|
# SQRTs: n_p * n_p_pad * 3 + n_p * board.n_obstacles + n_p * 3
|
||||||
|
# EXPs: n_p * n_p_pad * 1 + n_p * board.n_obstacles
|
||||||
|
|
||||||
|
|
||||||
|
def adds(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 3) & ~3
|
||||||
|
return int(n_iter *
|
||||||
|
(n_p * 12 + n_p * n_p_pad * 15 + n_p * n_obs * 12 + n_p * 7))
|
||||||
|
|
||||||
|
|
||||||
|
def mults(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 3) & ~3
|
||||||
|
return int(n_iter *
|
||||||
|
(n_p * 4 + n_p * n_p_pad * 24 + n_p * n_obs * 19 + n_p * 16))
|
||||||
|
|
||||||
|
|
||||||
|
def divs(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 3) & ~3
|
||||||
|
return int(n_iter * (n_p * n_p_pad * 1 + n_p * n_obs + n_p * 2))
|
||||||
|
|
||||||
|
|
||||||
|
def sqrts(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 3) & ~3
|
||||||
|
return int(n_iter * (n_p * n_p_pad * 3 + n_p * n_obs + n_p * 3))
|
||||||
|
|
||||||
|
|
||||||
|
def exps(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 3) & ~3
|
||||||
|
return int(n_iter * (n_p * n_p_pad * 1 + n_p * n_obs))
|
||||||
|
|
||||||
|
|
||||||
|
def total(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return adds(n_iter, n_p, n_obs) + mults(n_iter, n_p, n_obs) + divs(
|
||||||
|
n_iter, n_p, n_obs) + sqrts(n_iter, n_p,
|
||||||
|
n_obs) + exps(n_iter, n_p, n_obs) * 30
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
# const int n_p_pad = (n_p + 3) & ~3;
|
||||||
|
|
||||||
|
# flops per iteration (one pass of the outer time loop):
|
||||||
|
# ADDs: n_p * 12 + n_p * n_p_pad * 29 + n_p * board.n_obstacles * 12 + n_p * 7
|
||||||
|
# MULTs: n_p * 4 + n_p * n_p_pad * 40 + n_p * board.n_obstacles * 19 + n_p * 16
|
||||||
|
# DIVs: n_p * n_p_pad * 1 + n_p * board.n_obstacles + n_p * 2
|
||||||
|
# SQRTs: n_p * n_p_pad * 3 + n_p * board.n_obstacles + n_p * 3
|
||||||
|
# EXPs: n_p * board.n_obstacles
|
||||||
|
|
||||||
|
|
||||||
|
def adds(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 3) & ~3
|
||||||
|
return int(n_iter *
|
||||||
|
(n_p * 12 + n_p * n_p_pad * 29 + n_p * n_obs * 12 + n_p * 7))
|
||||||
|
|
||||||
|
|
||||||
|
def mults(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 3) & ~3
|
||||||
|
return int(n_iter *
|
||||||
|
(n_p * 4 + n_p * n_p_pad * 40 + n_p * n_obs * 19 + n_p * 16))
|
||||||
|
|
||||||
|
|
||||||
|
def divs(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 3) & ~3
|
||||||
|
return int(n_iter * (n_p * n_p_pad * 1 + n_p * n_obs + n_p * 2))
|
||||||
|
|
||||||
|
|
||||||
|
def sqrts(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 3) & ~3
|
||||||
|
return int(n_iter * (n_p * n_p_pad * 3 + n_p * n_obs + n_p * 3))
|
||||||
|
|
||||||
|
|
||||||
|
def exps(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 3) & ~3
|
||||||
|
return int(n_iter * (n_p * n_obs))
|
||||||
|
|
||||||
|
|
||||||
|
def total(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return adds(n_iter, n_p, n_obs) + mults(n_iter, n_p, n_obs) + divs(
|
||||||
|
n_iter, n_p, n_obs) + sqrts(n_iter, n_p,
|
||||||
|
n_obs) + exps(n_iter, n_p, n_obs) * 30
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
# n_iter * [ n_p ** 2 * (12.5 ADD + 23 MULT + 1 DIV + 1 EXP + 2.5 SQRT) + n_p * (- 1.5 ADD + 0.5 SQRT - 2 MULT - 1 EXP + 1 DIV) + n_obstacles * n_p * (12 ADD + 19 MULT + 1 SQRT + 1 DIV + 1 EXP) ]
|
||||||
|
|
||||||
|
|
||||||
|
def adds(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p**2 * 12.5 + n_p * (-1.5) + n_obs * n_p * 12))
|
||||||
|
|
||||||
|
|
||||||
|
def mults(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p**2 * 23 + n_p * (-2) + n_obs * n_p * 19))
|
||||||
|
|
||||||
|
|
||||||
|
def divs(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p**2 * 1 + n_p * 1 + n_obs * n_p * 1))
|
||||||
|
|
||||||
|
|
||||||
|
def sqrts(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p**2 * 2.5 + n_p * 0.5 + n_obs * n_p * 1))
|
||||||
|
|
||||||
|
|
||||||
|
def exps(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p**2 * 1 + n_p * (-1) + n_obs * n_p * 1))
|
||||||
|
|
||||||
|
|
||||||
|
def total(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return adds(n_iter, n_p, n_obs) + mults(n_iter, n_p, n_obs) + divs(
|
||||||
|
n_iter, n_p, n_obs) + sqrts(n_iter, n_p,
|
||||||
|
n_obs) + exps(n_iter, n_p, n_obs) * 30
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
# n_iter * [ n_p ** 2 * (12.5 ADD + 23 MULT + 1 DIV + 1 EXP + 2.5 SQRT) + n_p * (- 1.5 ADD + 0.5 SQRT - 2 MULT - 1 EXP + 1 DIV) + n_obstacles * n_p * (12 ADD + 19 MULT + 1 SQRT + 1 DIV + 1 EXP) ]
|
||||||
|
|
||||||
|
|
||||||
|
def adds(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p**2 * 12.5 + n_p * (-1.5) + n_obs * n_p * 12))
|
||||||
|
|
||||||
|
|
||||||
|
def mults(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p**2 * 23 + n_p * (-2) + n_obs * n_p * 19))
|
||||||
|
|
||||||
|
|
||||||
|
def divs(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p**2 * 1 + n_p * 1 + n_obs * n_p * 1))
|
||||||
|
|
||||||
|
|
||||||
|
def sqrts(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p**2 * 2.5 + n_p * 0.5 + n_obs * n_p * 1))
|
||||||
|
|
||||||
|
|
||||||
|
def exps(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p**2 * 1 + n_p * (-1) + n_obs * n_p * 1))
|
||||||
|
|
||||||
|
|
||||||
|
def total(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return adds(n_iter, n_p, n_obs) + mults(n_iter, n_p, n_obs) + divs(
|
||||||
|
n_iter, n_p, n_obs) + sqrts(n_iter, n_p,
|
||||||
|
n_obs) + exps(n_iter, n_p, n_obs) * 30
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
# n_iter * [ n_p ** 2 * (12.5 A + 2.5 S + 23 M + 1 D + 1 E) + n_p * (6.5 A + 0.5 S - 2 M + 1 D - 1 E) + n_obstacles * n_p * (12 A + 19 M + 1 S + 1 D + 1 E)]
|
||||||
|
|
||||||
|
|
||||||
|
def adds(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p**2 * 12.5 + n_p * 6.5 + n_obs * n_p * 12))
|
||||||
|
|
||||||
|
|
||||||
|
def mults(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p**2 * 23 + n_p * (-2) + n_obs * n_p * 19))
|
||||||
|
|
||||||
|
|
||||||
|
def divs(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p**2 * 1 + n_p * 1 + n_obs * n_p * 1))
|
||||||
|
|
||||||
|
|
||||||
|
def sqrts(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p**2 * 2.5 + n_p * 0.5 + n_obs * n_p * 1))
|
||||||
|
|
||||||
|
|
||||||
|
def exps(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p**2 * 1 + n_p * (-1) + n_obs * n_p * 1))
|
||||||
|
|
||||||
|
|
||||||
|
def total(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return adds(n_iter, n_p, n_obs) + mults(n_iter, n_p, n_obs) + divs(
|
||||||
|
n_iter, n_p, n_obs) + sqrts(n_iter, n_p,
|
||||||
|
n_obs) + exps(n_iter, n_p, n_obs) * 30
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
# n_iter * [ n_p ** 2 * (12.5 A + 23 M + 2.5 S + 1 D + 1 E) + n_p * (14.5 A - 2 M + 0.5 S + 1 D - 1 E) + n_obstacles * n_p * (12 A + 19 M + 1 S + 1 D + 1 E) ]
|
||||||
|
|
||||||
|
|
||||||
|
def adds(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p**2 * 12.5 + n_p * 14.5 + n_obs * n_p * 12))
|
||||||
|
|
||||||
|
|
||||||
|
def mults(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p**2 * 23 + n_p * (-2) + n_obs * n_p * 19))
|
||||||
|
|
||||||
|
|
||||||
|
def divs(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p**2 * 1 + n_p * 1 + n_obs * n_p * 1))
|
||||||
|
|
||||||
|
|
||||||
|
def sqrts(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p**2 * 2.5 + n_p * 0.5 + n_obs * n_p * 1))
|
||||||
|
|
||||||
|
|
||||||
|
def exps(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p**2 * 1 + n_p * (-1) + n_obs * n_p * 1))
|
||||||
|
|
||||||
|
|
||||||
|
def total(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return adds(n_iter, n_p, n_obs) + mults(n_iter, n_p, n_obs) + divs(
|
||||||
|
n_iter, n_p, n_obs) + sqrts(n_iter, n_p,
|
||||||
|
n_obs) + exps(n_iter, n_p, n_obs) * 30
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
# ADDs: n_iter * n_p * 11 +
|
||||||
|
# n_iter * n_p * (n_p - 1) * 14 +
|
||||||
|
# n_iter * n_p * board.n_obstacles * 10
|
||||||
|
|
||||||
|
# MULTs: n_iter * n_p * 21 +
|
||||||
|
# n_iter * n_p * (n_p - 1) * 24 +
|
||||||
|
# n_iter * n_p * board.n_obstacles * 13
|
||||||
|
|
||||||
|
# DIVs: n_iter * n_p * 2 +
|
||||||
|
# n_iter * n_p * (n_p - 1) +
|
||||||
|
# n_iter * n_p * board.n_obstacles
|
||||||
|
|
||||||
|
# SQRTs: n_iter * n_p * 3 +
|
||||||
|
# n_iter * n_p * (n_p - 1) * 3 +
|
||||||
|
# n_iter * n_p * board.n_obstacles
|
||||||
|
|
||||||
|
# EXPs: n_iter * n_p * (n_p - 1) +
|
||||||
|
# n_iter * n_p * board.n_obstacles
|
||||||
|
|
||||||
|
|
||||||
|
def adds(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * n_p * (11 + (n_p - 1) * 14 + n_obs * 10))
|
||||||
|
|
||||||
|
|
||||||
|
def mults(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * n_p * (21 + (n_p - 1) * 24 + n_obs * 13))
|
||||||
|
|
||||||
|
|
||||||
|
def divs(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * n_p * (2 + (n_p - 1) + n_obs))
|
||||||
|
|
||||||
|
|
||||||
|
def sqrts(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * n_p * (3 + (n_p - 1) * 3 + n_obs))
|
||||||
|
|
||||||
|
|
||||||
|
def exps(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * n_p * ((n_p - 1) + n_obs))
|
||||||
|
|
||||||
|
|
||||||
|
def total(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return adds(n_iter, n_p, n_obs) + mults(n_iter, n_p, n_obs) + divs(
|
||||||
|
n_iter, n_p, n_obs) + sqrts(n_iter, n_p,
|
||||||
|
n_obs) + exps(n_iter, n_p, n_obs) * 30
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
# const int n_p_pad = (n_p + 7) & ~7;
|
||||||
|
|
||||||
|
# ADDs: n_iter * n_p * 33 +
|
||||||
|
# n_iter * n_p * (n_p_pad / 8) * 232 +
|
||||||
|
# n_iter * n_p * board.n_obstacles * 10
|
||||||
|
|
||||||
|
# MULTs: n_iter * n_p * 40 +
|
||||||
|
# n_iter * n_p * (n_p_pad / 8) * 320 +
|
||||||
|
# n_iter * n_p * board.n_obstacles * 13
|
||||||
|
|
||||||
|
# DIVs: n_iter * n_p * (n_p_pad / 8) * 8 +
|
||||||
|
# n_iter * n_p * board.n_obstacles
|
||||||
|
|
||||||
|
# SQRTs: n_iter * n_p +
|
||||||
|
# n_iter * n_p * (n_p_pad / 8) * 24 +
|
||||||
|
# n_iter * n_p * board.n_obstacles
|
||||||
|
|
||||||
|
# EXPs: n_iter * n_p * board.n_obstacles
|
||||||
|
|
||||||
|
|
||||||
|
def adds(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 7) & ~7
|
||||||
|
return int(n_iter * n_p * (33 + (n_p_pad // 8) * 232 + n_obs * 10))
|
||||||
|
|
||||||
|
|
||||||
|
def mults(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 7) & ~7
|
||||||
|
return int(n_iter * n_p * (40 + (n_p_pad // 8) * 320 + n_obs * 13))
|
||||||
|
|
||||||
|
|
||||||
|
def divs(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 7) & ~7
|
||||||
|
return int(n_iter * n_p * ((n_p_pad // 8) * 8 + n_obs))
|
||||||
|
|
||||||
|
|
||||||
|
def sqrts(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 7) & ~7
|
||||||
|
return int(n_iter * n_p * (1 + (n_p_pad // 8) * 24 + n_obs))
|
||||||
|
|
||||||
|
|
||||||
|
def exps(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 7) & ~7
|
||||||
|
return int(n_iter * n_p * n_obs)
|
||||||
|
|
||||||
|
|
||||||
|
def total(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return adds(n_iter, n_p, n_obs) + mults(n_iter, n_p, n_obs) + divs(
|
||||||
|
n_iter, n_p, n_obs) + sqrts(n_iter, n_p,
|
||||||
|
n_obs) + exps(n_iter, n_p, n_obs) * 30
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
# const int n_p_pad = (n_p + 7) & ~7;
|
||||||
|
|
||||||
|
# ADDs: n_iter * n_p * 33 +
|
||||||
|
# n_iter * n_p * (n_p_pad / 8) * 232 +
|
||||||
|
# n_iter * n_p * board.n_obstacles * 10
|
||||||
|
|
||||||
|
# MULTs: n_iter * n_p * 40 +
|
||||||
|
# n_iter * n_p * (n_p_pad / 8) * 320 +
|
||||||
|
# n_iter * n_p * board.n_obstacles * 13
|
||||||
|
|
||||||
|
# DIVs: n_iter * n_p * (n_p_pad / 8) * 8 +
|
||||||
|
# n_iter * n_p * board.n_obstacles
|
||||||
|
|
||||||
|
# SQRTs: n_iter * n_p +
|
||||||
|
# n_iter * n_p * (n_p_pad / 8) * 24 +
|
||||||
|
# n_iter * n_p * board.n_obstacles
|
||||||
|
|
||||||
|
# EXPs: n_iter * n_p * board.n_obstacles
|
||||||
|
|
||||||
|
|
||||||
|
def adds(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 7) & ~7
|
||||||
|
return int(n_iter * n_p * (33 + (n_p_pad // 8) * 232 + n_obs * 10))
|
||||||
|
|
||||||
|
|
||||||
|
def mults(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 7) & ~7
|
||||||
|
return int(n_iter * n_p * (40 + (n_p_pad // 8) * 320 + n_obs * 13))
|
||||||
|
|
||||||
|
|
||||||
|
def divs(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 7) & ~7
|
||||||
|
return int(n_iter * n_p * ((n_p_pad // 8) * 8 + n_obs))
|
||||||
|
|
||||||
|
|
||||||
|
def sqrts(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 7) & ~7
|
||||||
|
return int(n_iter * n_p * (1 + (n_p_pad // 8) * 24 + n_obs))
|
||||||
|
|
||||||
|
|
||||||
|
def exps(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 7) & ~7
|
||||||
|
return int(n_iter * n_p * n_obs)
|
||||||
|
|
||||||
|
|
||||||
|
def total(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return adds(n_iter, n_p, n_obs) + mults(n_iter, n_p, n_obs) + divs(
|
||||||
|
n_iter, n_p, n_obs) + sqrts(n_iter, n_p,
|
||||||
|
n_obs) + exps(n_iter, n_p, n_obs) * 30
|
||||||
@@ -0,0 +1,57 @@
|
|||||||
|
# const int n_p_pad = (n_p + 7) & ~7;
|
||||||
|
|
||||||
|
# ADDs: n_iter * n_p * 20 +
|
||||||
|
# n_iter * n_p * (n_p_pad / 8) * 232 +
|
||||||
|
# n_iter * n_p * board.n_obstacles * 10 +
|
||||||
|
# n_iter * (n_p_pad / 8) * 56
|
||||||
|
|
||||||
|
# MULTs: n_iter * n_p * 4 +
|
||||||
|
# n_iter * n_p * (n_p_pad / 8) * 320 +
|
||||||
|
# n_iter * n_p * board.n_obstacles * 13 +
|
||||||
|
# n_iter * (n_p_pad / 8) * 120
|
||||||
|
|
||||||
|
# DIVs: n_iter * n_p * (n_p_pad / 8) * 8 +
|
||||||
|
# n_iter * n_p * board.n_obstacles +
|
||||||
|
# n_iter * (n_p_pad / 8) * 16
|
||||||
|
|
||||||
|
# SQRTs: n_iter * n_p * (n_p_pad / 8) * 24 +
|
||||||
|
# n_iter * n_p * board.n_obstacles +
|
||||||
|
# n_iter * (n_p_pad / 8) * 24
|
||||||
|
|
||||||
|
# EXPs: n_iter * n_p * board.n_obstacles
|
||||||
|
|
||||||
|
|
||||||
|
def adds(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 7) & ~7
|
||||||
|
return int(n_iter *
|
||||||
|
(n_p * 20 + n_p * (n_p_pad // 8) * 232 + n_p * n_obs * 10 +
|
||||||
|
(n_p_pad // 8) * 56))
|
||||||
|
|
||||||
|
|
||||||
|
def mults(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 7) & ~7
|
||||||
|
return int(n_iter * (n_p * 4 + n_p * (n_p_pad // 8) * 320 + n_p * n_obs * 13 +
|
||||||
|
(n_p_pad // 8) * 120))
|
||||||
|
|
||||||
|
|
||||||
|
def divs(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 7) & ~7
|
||||||
|
return int(n_iter * (n_p * (n_p_pad // 8) * 8 + n_p * n_obs +
|
||||||
|
(n_p_pad // 8) * 16))
|
||||||
|
|
||||||
|
|
||||||
|
def sqrts(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 7) & ~7
|
||||||
|
return int(n_iter * (n_p * (n_p_pad // 8) * 24 + n_p * n_obs +
|
||||||
|
(n_p_pad // 8) * 24))
|
||||||
|
|
||||||
|
|
||||||
|
def exps(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 7) & ~7
|
||||||
|
return int(n_iter * n_p * n_obs)
|
||||||
|
|
||||||
|
|
||||||
|
def total(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return adds(n_iter, n_p, n_obs) + mults(n_iter, n_p, n_obs) + divs(
|
||||||
|
n_iter, n_p, n_obs) + sqrts(n_iter, n_p,
|
||||||
|
n_obs) + exps(n_iter, n_p, n_obs) * 30
|
||||||
@@ -0,0 +1,58 @@
|
|||||||
|
# const int n_p_pad = (n_p + 15) & ~15;
|
||||||
|
|
||||||
|
# ADDs: n_iter * n_p * 36 +
|
||||||
|
# n_iter * n_p * (n_p_pad / 16) * 464 +
|
||||||
|
# n_iter * n_p * board.n_obstacles * 10 +
|
||||||
|
# n_iter * (n_p_pad / 8) * 56
|
||||||
|
|
||||||
|
# MULTs: n_iter * n_p * 4 +
|
||||||
|
# n_iter * n_p * (n_p_pad / 16) * 640 +
|
||||||
|
# n_iter * n_p * board.n_obstacles * 13 +
|
||||||
|
# n_iter * (n_p_pad / 8) * 120
|
||||||
|
|
||||||
|
# DIVs: n_iter * n_p * (n_p_pad / 16) * 16 +
|
||||||
|
# n_iter * n_p * board.n_obstacles +
|
||||||
|
# n_iter * (n_p_pad / 8) * 16
|
||||||
|
|
||||||
|
# SQRTs: n_iter * n_p * (n_p_pad / 16) * 48 +
|
||||||
|
# n_iter * n_p * board.n_obstacles +
|
||||||
|
# n_iter * (n_p_pad / 8) * 24
|
||||||
|
|
||||||
|
# EXPs: n_iter * n_p * board.n_obstacles
|
||||||
|
|
||||||
|
|
||||||
|
def adds(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 15) & ~15
|
||||||
|
return int(n_iter *
|
||||||
|
(n_p * 36 + n_p * (n_p_pad // 16) * 464 + n_p * n_obs * 10 +
|
||||||
|
(n_p_pad // 8) * 56))
|
||||||
|
|
||||||
|
|
||||||
|
def mults(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 15) & ~15
|
||||||
|
return int(n_iter *
|
||||||
|
(n_p * 4 + n_p * (n_p_pad // 16) * 640 + n_p * n_obs * 13 +
|
||||||
|
(n_p_pad // 8) * 120))
|
||||||
|
|
||||||
|
|
||||||
|
def divs(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 15) & ~15
|
||||||
|
return int(n_iter * (n_p * (n_p_pad // 16) * 16 + n_p * n_obs +
|
||||||
|
(n_p_pad // 8) * 16))
|
||||||
|
|
||||||
|
|
||||||
|
def sqrts(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 15) & ~15
|
||||||
|
return int(n_iter * (n_p * (n_p_pad // 16) * 48 + n_p * n_obs +
|
||||||
|
(n_p_pad // 8) * 24))
|
||||||
|
|
||||||
|
|
||||||
|
def exps(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
n_p_pad = (n_p + 15) & ~15
|
||||||
|
return int(n_iter * n_p * n_obs)
|
||||||
|
|
||||||
|
|
||||||
|
def total(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return adds(n_iter, n_p, n_obs) + mults(n_iter, n_p, n_obs) + divs(
|
||||||
|
n_iter, n_p, n_obs) + sqrts(n_iter, n_p,
|
||||||
|
n_obs) + exps(n_iter, n_p, n_obs) * 30
|
||||||
@@ -0,0 +1,58 @@
|
|||||||
|
# ADDs: n_iter * (
|
||||||
|
# n_p * 4 +
|
||||||
|
# n_p * (n_p - 1) * 14 +
|
||||||
|
# n_p * board.n_obstacles * 12 +
|
||||||
|
# n_p * 7
|
||||||
|
# )
|
||||||
|
|
||||||
|
# MULTs: n_iter * (
|
||||||
|
# n_p * 4 +
|
||||||
|
# n_p * (n_p - 1) * 23 +
|
||||||
|
# n_p * board.n_obstacles * 18 +
|
||||||
|
# n_p * 16
|
||||||
|
# )
|
||||||
|
|
||||||
|
# DIVs: n_iter * (
|
||||||
|
# n_p * (n_p - 1) +
|
||||||
|
# n_p * board.n_obstacles +
|
||||||
|
# n_p * 2
|
||||||
|
# )
|
||||||
|
|
||||||
|
# SQRTs: n_iter * (
|
||||||
|
# n_p * (n_p - 1) * 4 +
|
||||||
|
# n_p * board.n_obstacles * 2 +
|
||||||
|
# n_p * 3
|
||||||
|
# )
|
||||||
|
|
||||||
|
# EXPs (fast_exp, LUT): n_iter * (
|
||||||
|
# n_p * (n_p - 1) +
|
||||||
|
# n_p * board.n_obstacles
|
||||||
|
# )
|
||||||
|
|
||||||
|
|
||||||
|
def adds(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p * 4 + n_p *
|
||||||
|
(n_p - 1) * 14 + n_p * n_obs * 12 + n_p * 7))
|
||||||
|
|
||||||
|
|
||||||
|
def mults(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p * 4 + n_p *
|
||||||
|
(n_p - 1) * 23 + n_p * n_obs * 18 + n_p * 16))
|
||||||
|
|
||||||
|
|
||||||
|
def divs(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p * (n_p - 1) + n_p * n_obs + n_p * 2))
|
||||||
|
|
||||||
|
|
||||||
|
def sqrts(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p * (n_p - 1) * 4 + n_p * n_obs * 2 + n_p * 3))
|
||||||
|
|
||||||
|
|
||||||
|
def exps(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return int(n_iter * (n_p * (n_p - 1) + n_p * n_obs))
|
||||||
|
|
||||||
|
|
||||||
|
def total(n_iter: int, n_p: int, n_obs: int = 2) -> int:
|
||||||
|
return adds(n_iter, n_p, n_obs) + mults(n_iter, n_p, n_obs) + divs(
|
||||||
|
n_iter, n_p, n_obs) + sqrts(n_iter, n_p,
|
||||||
|
n_obs) + exps(n_iter, n_p, n_obs) * 30
|
||||||
@@ -1,58 +1,66 @@
|
|||||||
rm -f main_* run_tests *.o *.s variants/*.s variants/*.o headers/*.s headers/*.o
|
rm -f main_* run_tests *.o *.s variants/*.s variants/*.o headers/*.s headers/*.o
|
||||||
/usr/bin/g++ main-float.cpp ./variants/variant_float_inlining_SoA_AVX2_polyexp.cpp -o main_float_inlining_SoA_AVX2_polyexp -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1
|
/usr/bin/g++ main-float.cpp ./variants/variant_float_inlining_SoA_AVX2_polyexp_expfix.cpp -o main_float_inlining_SoA_AVX2_polyexp_expfix -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1
|
||||||
=== N_P=50 N_ITER=200 ===
|
=== N_P=50 N_ITER=200 ===
|
||||||
W(n) per iteration: 183700.00 flops
|
W(n) per iteration: 183700.00 flops
|
||||||
Q(n) per iteration: 3256 bytes
|
Q(n) per iteration: 3256 bytes
|
||||||
I(n): 56.42 flops/byte
|
I(n): 56.42 flops/byte
|
||||||
W(n): 36740000.00 flops
|
W(n): 36740000.00 flops
|
||||||
T(n): 4538634.50 cycles
|
T(n): 5860437.00 cycles
|
||||||
P(n): 8.09 flops/cycle
|
P(n): 6.27 flops/cycle
|
||||||
|
|
||||||
=== N_P=100 N_ITER=200 ===
|
=== N_P=100 N_ITER=200 ===
|
||||||
W(n) per iteration: 727400.00 flops
|
W(n) per iteration: 727400.00 flops
|
||||||
Q(n) per iteration: 6456 bytes
|
Q(n) per iteration: 6456 bytes
|
||||||
I(n): 112.67 flops/byte
|
I(n): 112.67 flops/byte
|
||||||
W(n): 145480000.00 flops
|
W(n): 145480000.00 flops
|
||||||
T(n): 14836382.00 cycles
|
T(n): 19736818.00 cycles
|
||||||
P(n): 9.81 flops/cycle
|
P(n): 7.37 flops/cycle
|
||||||
|
|
||||||
=== N_P=200 N_ITER=200 ===
|
=== N_P=200 N_ITER=200 ===
|
||||||
W(n) per iteration: 2894800.00 flops
|
W(n) per iteration: 2894800.00 flops
|
||||||
Q(n) per iteration: 12856 bytes
|
Q(n) per iteration: 12856 bytes
|
||||||
I(n): 225.17 flops/byte
|
I(n): 225.17 flops/byte
|
||||||
W(n): 578960000.00 flops
|
W(n): 578960000.00 flops
|
||||||
T(n): 52866688.00 cycles
|
T(n): 71295200.00 cycles
|
||||||
P(n): 10.95 flops/cycle
|
P(n): 8.12 flops/cycle
|
||||||
|
|
||||||
=== N_P=500 N_ITER=200 ===
|
=== N_P=500 N_ITER=200 ===
|
||||||
W(n) per iteration: 18037000.00 flops
|
W(n) per iteration: 18037000.00 flops
|
||||||
Q(n) per iteration: 32056 bytes
|
Q(n) per iteration: 32056 bytes
|
||||||
I(n): 562.67 flops/byte
|
I(n): 562.67 flops/byte
|
||||||
W(n): 3607399936.00 flops
|
W(n): 3607399936.00 flops
|
||||||
T(n): 314877088.00 cycles
|
T(n): 434200736.00 cycles
|
||||||
P(n): 11.46 flops/cycle
|
P(n): 8.31 flops/cycle
|
||||||
|
|
||||||
=== N_P=1000 N_ITER=200 ===
|
=== N_P=1000 N_ITER=200 ===
|
||||||
W(n) per iteration: 72074000.00 flops
|
W(n) per iteration: 72074000.00 flops
|
||||||
Q(n) per iteration: 64056 bytes
|
Q(n) per iteration: 64056 bytes
|
||||||
I(n): 1125.17 flops/byte
|
I(n): 1125.17 flops/byte
|
||||||
W(n): 14414799872.00 flops
|
W(n): 14414799872.00 flops
|
||||||
T(n): 1228216448.00 cycles
|
T(n): 1690932352.00 cycles
|
||||||
P(n): 11.74 flops/cycle
|
P(n): 8.52 flops/cycle
|
||||||
|
|
||||||
=== N_P=2000 N_ITER=200 ===
|
=== N_P=2000 N_ITER=200 ===
|
||||||
W(n) per iteration: 288148000.00 flops
|
W(n) per iteration: 288148000.00 flops
|
||||||
Q(n) per iteration: 128056 bytes
|
Q(n) per iteration: 128056 bytes
|
||||||
I(n): 2250.17 flops/byte
|
I(n): 2250.17 flops/byte
|
||||||
W(n): 57629601792.00 flops
|
W(n): 57629601792.00 flops
|
||||||
T(n): 4888108544.00 cycles
|
T(n): 6726832128.00 cycles
|
||||||
P(n): 11.79 flops/cycle
|
P(n): 8.57 flops/cycle
|
||||||
|
|
||||||
=== N_P=5000 N_ITER=200 ===
|
=== N_P=5000 N_ITER=200 ===
|
||||||
W(n) per iteration: 1800369920.00 flops
|
W(n) per iteration: 1800369920.00 flops
|
||||||
Q(n) per iteration: 320056 bytes
|
Q(n) per iteration: 320056 bytes
|
||||||
I(n): 5625.17 flops/byte
|
I(n): 5625.17 flops/byte
|
||||||
W(n): 360073986048.00 flops
|
W(n): 360073986048.00 flops
|
||||||
T(n): 30235383808.00 cycles
|
T(n): 41595662336.00 cycles
|
||||||
P(n): 11.91 flops/cycle
|
P(n): 8.66 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=10000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 2905772800.00 flops
|
||||||
|
Q(n) per iteration: 640056 bytes
|
||||||
|
I(n): 4539.87 flops/byte
|
||||||
|
W(n): 581154570240.00 flops
|
||||||
|
T(n): 166348996608.00 cycles
|
||||||
|
P(n): 3.49 flops/cycle
|
||||||
|
|
||||||
|
|||||||
@@ -1,66 +1,66 @@
|
|||||||
rm -f main_* run_tests *.o *.s variants/*.s variants/*.o headers/*.s headers/*.o
|
rm -f main_* run_tests *.o *.s variants/*.s variants/*.o headers/*.s headers/*.o
|
||||||
/usr/bin/g++ main-float.cpp ./variants/variant_float_inlining_SoA_AVX2_polyexp.cpp -o main_float_inlining_SoA_AVX2_polyexp -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1
|
/usr/bin/g++ main-float.cpp ./variants/variant_float_inlining_SoA_AVX2_polyexp_expfix.cpp -o main_float_inlining_SoA_AVX2_polyexp_expfix -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1
|
||||||
=== N_P=50 N_ITER=200 ===
|
=== N_P=50 N_ITER=200 ===
|
||||||
W(n) per iteration: 183700.00 flops
|
W(n) per iteration: 183700.00 flops
|
||||||
Q(n) per iteration: 3256 bytes
|
Q(n) per iteration: 3256 bytes
|
||||||
I(n): 56.42 flops/byte
|
I(n): 56.42 flops/byte
|
||||||
W(n): 36740000.00 flops
|
W(n): 36740000.00 flops
|
||||||
T(n): 4573347.00 cycles
|
T(n): 5885449.00 cycles
|
||||||
P(n): 8.03 flops/cycle
|
P(n): 6.24 flops/cycle
|
||||||
|
|
||||||
=== N_P=100 N_ITER=200 ===
|
=== N_P=100 N_ITER=200 ===
|
||||||
W(n) per iteration: 727400.00 flops
|
W(n) per iteration: 727400.00 flops
|
||||||
Q(n) per iteration: 6456 bytes
|
Q(n) per iteration: 6456 bytes
|
||||||
I(n): 112.67 flops/byte
|
I(n): 112.67 flops/byte
|
||||||
W(n): 145480000.00 flops
|
W(n): 145480000.00 flops
|
||||||
T(n): 14972852.00 cycles
|
T(n): 19775262.00 cycles
|
||||||
P(n): 9.72 flops/cycle
|
P(n): 7.36 flops/cycle
|
||||||
|
|
||||||
=== N_P=200 N_ITER=200 ===
|
=== N_P=200 N_ITER=200 ===
|
||||||
W(n) per iteration: 2894800.00 flops
|
W(n) per iteration: 2894800.00 flops
|
||||||
Q(n) per iteration: 12856 bytes
|
Q(n) per iteration: 12856 bytes
|
||||||
I(n): 225.17 flops/byte
|
I(n): 225.17 flops/byte
|
||||||
W(n): 578960000.00 flops
|
W(n): 578960000.00 flops
|
||||||
T(n): 53246808.00 cycles
|
T(n): 71759640.00 cycles
|
||||||
P(n): 10.87 flops/cycle
|
P(n): 8.07 flops/cycle
|
||||||
|
|
||||||
=== N_P=500 N_ITER=200 ===
|
=== N_P=500 N_ITER=200 ===
|
||||||
W(n) per iteration: 18037000.00 flops
|
W(n) per iteration: 18037000.00 flops
|
||||||
Q(n) per iteration: 32056 bytes
|
Q(n) per iteration: 32056 bytes
|
||||||
I(n): 562.67 flops/byte
|
I(n): 562.67 flops/byte
|
||||||
W(n): 3607399936.00 flops
|
W(n): 3607399936.00 flops
|
||||||
T(n): 317441728.00 cycles
|
T(n): 442073856.00 cycles
|
||||||
P(n): 11.36 flops/cycle
|
P(n): 8.16 flops/cycle
|
||||||
|
|
||||||
=== N_P=1000 N_ITER=200 ===
|
=== N_P=1000 N_ITER=200 ===
|
||||||
W(n) per iteration: 72074000.00 flops
|
W(n) per iteration: 72074000.00 flops
|
||||||
Q(n) per iteration: 64056 bytes
|
Q(n) per iteration: 64056 bytes
|
||||||
I(n): 1125.17 flops/byte
|
I(n): 1125.17 flops/byte
|
||||||
W(n): 14414799872.00 flops
|
W(n): 14414799872.00 flops
|
||||||
T(n): 1237166592.00 cycles
|
T(n): 1698162944.00 cycles
|
||||||
P(n): 11.65 flops/cycle
|
P(n): 8.49 flops/cycle
|
||||||
|
|
||||||
=== N_P=2000 N_ITER=200 ===
|
=== N_P=2000 N_ITER=200 ===
|
||||||
W(n) per iteration: 288148000.00 flops
|
W(n) per iteration: 288148000.00 flops
|
||||||
Q(n) per iteration: 128056 bytes
|
Q(n) per iteration: 128056 bytes
|
||||||
I(n): 2250.17 flops/byte
|
I(n): 2250.17 flops/byte
|
||||||
W(n): 57629601792.00 flops
|
W(n): 57629601792.00 flops
|
||||||
T(n): 4899325440.00 cycles
|
T(n): 6719285248.00 cycles
|
||||||
P(n): 11.76 flops/cycle
|
P(n): 8.58 flops/cycle
|
||||||
|
|
||||||
=== N_P=5000 N_ITER=200 ===
|
=== N_P=5000 N_ITER=200 ===
|
||||||
W(n) per iteration: 1800369920.00 flops
|
W(n) per iteration: 1800369920.00 flops
|
||||||
Q(n) per iteration: 320056 bytes
|
Q(n) per iteration: 320056 bytes
|
||||||
I(n): 5625.17 flops/byte
|
I(n): 5625.17 flops/byte
|
||||||
W(n): 360073986048.00 flops
|
W(n): 360073986048.00 flops
|
||||||
T(n): 30502610944.00 cycles
|
T(n): 41795964928.00 cycles
|
||||||
P(n): 11.80 flops/cycle
|
P(n): 8.62 flops/cycle
|
||||||
|
|
||||||
=== N_P=10000 N_ITER=200 ===
|
=== N_P=10000 N_ITER=200 ===
|
||||||
W(n) per iteration: 2905772800.00 flops
|
W(n) per iteration: 2905772800.00 flops
|
||||||
Q(n) per iteration: 640056 bytes
|
Q(n) per iteration: 640056 bytes
|
||||||
I(n): 4539.87 flops/byte
|
I(n): 4539.87 flops/byte
|
||||||
W(n): 581154570240.00 flops
|
W(n): 581154570240.00 flops
|
||||||
T(n): 122120396800.00 cycles
|
T(n): 166340608000.00 cycles
|
||||||
P(n): 4.76 flops/cycle
|
P(n): 3.49 flops/cycle
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,64 @@
|
|||||||
|
=== N_P=50 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 183700.00 flops
|
||||||
|
Q(n) per iteration: 3256 bytes
|
||||||
|
I(n): 56.42 flops/byte
|
||||||
|
W(n): 36740000.00 flops
|
||||||
|
T(n): 5839795.00 cycles
|
||||||
|
P(n): 6.29 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=100 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 727400.00 flops
|
||||||
|
Q(n) per iteration: 6456 bytes
|
||||||
|
I(n): 112.67 flops/byte
|
||||||
|
W(n): 145480000.00 flops
|
||||||
|
T(n): 19706848.00 cycles
|
||||||
|
P(n): 7.38 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=200 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 2894800.00 flops
|
||||||
|
Q(n) per iteration: 12856 bytes
|
||||||
|
I(n): 225.17 flops/byte
|
||||||
|
W(n): 578960000.00 flops
|
||||||
|
T(n): 71913632.00 cycles
|
||||||
|
P(n): 8.05 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=500 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 18037000.00 flops
|
||||||
|
Q(n) per iteration: 32056 bytes
|
||||||
|
I(n): 562.67 flops/byte
|
||||||
|
W(n): 3607399936.00 flops
|
||||||
|
T(n): 431199296.00 cycles
|
||||||
|
P(n): 8.37 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=1000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 72074000.00 flops
|
||||||
|
Q(n) per iteration: 64056 bytes
|
||||||
|
I(n): 1125.17 flops/byte
|
||||||
|
W(n): 14414799872.00 flops
|
||||||
|
T(n): 1710698496.00 cycles
|
||||||
|
P(n): 8.43 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=2000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 288148000.00 flops
|
||||||
|
Q(n) per iteration: 128056 bytes
|
||||||
|
I(n): 2250.17 flops/byte
|
||||||
|
W(n): 57629601792.00 flops
|
||||||
|
T(n): 6773665792.00 cycles
|
||||||
|
P(n): 8.51 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=5000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 1800369920.00 flops
|
||||||
|
Q(n) per iteration: 320056 bytes
|
||||||
|
I(n): 5625.17 flops/byte
|
||||||
|
W(n): 360073986048.00 flops
|
||||||
|
T(n): 43346759680.00 cycles
|
||||||
|
P(n): 8.31 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=10000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 2905772800.00 flops
|
||||||
|
Q(n) per iteration: 640056 bytes
|
||||||
|
I(n): 4539.87 flops/byte
|
||||||
|
W(n): 581154570240.00 flops
|
||||||
|
T(n): 169504800768.00 cycles
|
||||||
|
P(n): 3.43 flops/cycle
|
||||||
|
|
||||||
@@ -1,58 +1,66 @@
|
|||||||
rm -f main_* run_tests *.o *.s variants/*.s variants/*.o headers/*.s headers/*.o
|
rm -f main_* run_tests *.o *.s variants/*.s variants/*.o headers/*.s headers/*.o
|
||||||
/usr/bin/g++ main-float.cpp ./variants/variant_float_inlining_SoA_AVX2_polyexp_rsqrt.cpp -o main_float_inlining_SoA_AVX2_polyexp_rsqrt -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1
|
/usr/bin/g++ main-float.cpp ./variants/variant_float_inlining_SoA_AVX2_polyexp_rsqrt_expfix.cpp -o main_float_inlining_SoA_AVX2_polyexp_rsqrt_expfix -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1
|
||||||
=== N_P=50 N_ITER=200 ===
|
=== N_P=50 N_ITER=200 ===
|
||||||
W(n) per iteration: 183700.00 flops
|
W(n) per iteration: 183700.00 flops
|
||||||
Q(n) per iteration: 3256 bytes
|
Q(n) per iteration: 3256 bytes
|
||||||
I(n): 56.42 flops/byte
|
I(n): 56.42 flops/byte
|
||||||
W(n): 36740000.00 flops
|
W(n): 36740000.00 flops
|
||||||
T(n): 3922583.00 cycles
|
T(n): 5075402.00 cycles
|
||||||
P(n): 9.37 flops/cycle
|
P(n): 7.24 flops/cycle
|
||||||
|
|
||||||
=== N_P=100 N_ITER=200 ===
|
=== N_P=100 N_ITER=200 ===
|
||||||
W(n) per iteration: 727400.00 flops
|
W(n) per iteration: 727400.00 flops
|
||||||
Q(n) per iteration: 6456 bytes
|
Q(n) per iteration: 6456 bytes
|
||||||
I(n): 112.67 flops/byte
|
I(n): 112.67 flops/byte
|
||||||
W(n): 145480000.00 flops
|
W(n): 145480000.00 flops
|
||||||
T(n): 12656640.00 cycles
|
T(n): 16874942.00 cycles
|
||||||
P(n): 11.49 flops/cycle
|
P(n): 8.62 flops/cycle
|
||||||
|
|
||||||
=== N_P=200 N_ITER=200 ===
|
=== N_P=200 N_ITER=200 ===
|
||||||
W(n) per iteration: 2894800.00 flops
|
W(n) per iteration: 2894800.00 flops
|
||||||
Q(n) per iteration: 12856 bytes
|
Q(n) per iteration: 12856 bytes
|
||||||
I(n): 225.17 flops/byte
|
I(n): 225.17 flops/byte
|
||||||
W(n): 578960000.00 flops
|
W(n): 578960000.00 flops
|
||||||
T(n): 44724200.00 cycles
|
T(n): 60586048.00 cycles
|
||||||
P(n): 12.95 flops/cycle
|
P(n): 9.56 flops/cycle
|
||||||
|
|
||||||
=== N_P=500 N_ITER=200 ===
|
=== N_P=500 N_ITER=200 ===
|
||||||
W(n) per iteration: 18037000.00 flops
|
W(n) per iteration: 18037000.00 flops
|
||||||
Q(n) per iteration: 32056 bytes
|
Q(n) per iteration: 32056 bytes
|
||||||
I(n): 562.67 flops/byte
|
I(n): 562.67 flops/byte
|
||||||
W(n): 3607399936.00 flops
|
W(n): 3607399936.00 flops
|
||||||
T(n): 264998976.00 cycles
|
T(n): 363991840.00 cycles
|
||||||
P(n): 13.61 flops/cycle
|
P(n): 9.91 flops/cycle
|
||||||
|
|
||||||
=== N_P=1000 N_ITER=200 ===
|
=== N_P=1000 N_ITER=200 ===
|
||||||
W(n) per iteration: 72074000.00 flops
|
W(n) per iteration: 72074000.00 flops
|
||||||
Q(n) per iteration: 64056 bytes
|
Q(n) per iteration: 64056 bytes
|
||||||
I(n): 1125.17 flops/byte
|
I(n): 1125.17 flops/byte
|
||||||
W(n): 14414799872.00 flops
|
W(n): 14414799872.00 flops
|
||||||
T(n): 1051923712.00 cycles
|
T(n): 1424352768.00 cycles
|
||||||
P(n): 13.70 flops/cycle
|
P(n): 10.12 flops/cycle
|
||||||
|
|
||||||
=== N_P=2000 N_ITER=200 ===
|
=== N_P=2000 N_ITER=200 ===
|
||||||
W(n) per iteration: 288148000.00 flops
|
W(n) per iteration: 288148000.00 flops
|
||||||
Q(n) per iteration: 128056 bytes
|
Q(n) per iteration: 128056 bytes
|
||||||
I(n): 2250.17 flops/byte
|
I(n): 2250.17 flops/byte
|
||||||
W(n): 57629601792.00 flops
|
W(n): 57629601792.00 flops
|
||||||
T(n): 4077504256.00 cycles
|
T(n): 5638619648.00 cycles
|
||||||
P(n): 14.13 flops/cycle
|
P(n): 10.22 flops/cycle
|
||||||
|
|
||||||
=== N_P=5000 N_ITER=200 ===
|
=== N_P=5000 N_ITER=200 ===
|
||||||
W(n) per iteration: 1800369920.00 flops
|
W(n) per iteration: 1800369920.00 flops
|
||||||
Q(n) per iteration: 320056 bytes
|
Q(n) per iteration: 320056 bytes
|
||||||
I(n): 5625.17 flops/byte
|
I(n): 5625.17 flops/byte
|
||||||
W(n): 360073986048.00 flops
|
W(n): 360073986048.00 flops
|
||||||
T(n): 25317951488.00 cycles
|
T(n): 35081228288.00 cycles
|
||||||
P(n): 14.22 flops/cycle
|
P(n): 10.26 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=10000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 2905772800.00 flops
|
||||||
|
Q(n) per iteration: 640056 bytes
|
||||||
|
I(n): 4539.87 flops/byte
|
||||||
|
W(n): 581154570240.00 flops
|
||||||
|
T(n): 140734889984.00 cycles
|
||||||
|
P(n): 4.13 flops/cycle
|
||||||
|
|
||||||
|
|||||||
@@ -1,66 +1,64 @@
|
|||||||
rm -f main_* run_tests *.o *.s variants/*.s variants/*.o headers/*.s headers/*.o
|
|
||||||
/usr/bin/g++ main-float.cpp ./variants/variant_float_inlining_SoA_AVX2_polyexp_rsqrt.cpp -o main_float_inlining_SoA_AVX2_polyexp_rsqrt -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1
|
|
||||||
=== N_P=50 N_ITER=200 ===
|
=== N_P=50 N_ITER=200 ===
|
||||||
W(n) per iteration: 183700.00 flops
|
W(n) per iteration: 183700.00 flops
|
||||||
Q(n) per iteration: 3256 bytes
|
Q(n) per iteration: 3256 bytes
|
||||||
I(n): 56.42 flops/byte
|
I(n): 56.42 flops/byte
|
||||||
W(n): 36740000.00 flops
|
W(n): 36740000.00 flops
|
||||||
T(n): 3968185.50 cycles
|
T(n): 5095124.00 cycles
|
||||||
P(n): 9.26 flops/cycle
|
P(n): 7.21 flops/cycle
|
||||||
|
|
||||||
=== N_P=100 N_ITER=200 ===
|
=== N_P=100 N_ITER=200 ===
|
||||||
W(n) per iteration: 727400.00 flops
|
W(n) per iteration: 727400.00 flops
|
||||||
Q(n) per iteration: 6456 bytes
|
Q(n) per iteration: 6456 bytes
|
||||||
I(n): 112.67 flops/byte
|
I(n): 112.67 flops/byte
|
||||||
W(n): 145480000.00 flops
|
W(n): 145480000.00 flops
|
||||||
T(n): 12830122.00 cycles
|
T(n): 16958378.00 cycles
|
||||||
P(n): 11.34 flops/cycle
|
P(n): 8.58 flops/cycle
|
||||||
|
|
||||||
=== N_P=200 N_ITER=200 ===
|
=== N_P=200 N_ITER=200 ===
|
||||||
W(n) per iteration: 2894800.00 flops
|
W(n) per iteration: 2894800.00 flops
|
||||||
Q(n) per iteration: 12856 bytes
|
Q(n) per iteration: 12856 bytes
|
||||||
I(n): 225.17 flops/byte
|
I(n): 225.17 flops/byte
|
||||||
W(n): 578960000.00 flops
|
W(n): 578960000.00 flops
|
||||||
T(n): 45279400.00 cycles
|
T(n): 60894740.00 cycles
|
||||||
P(n): 12.79 flops/cycle
|
P(n): 9.51 flops/cycle
|
||||||
|
|
||||||
=== N_P=500 N_ITER=200 ===
|
=== N_P=500 N_ITER=200 ===
|
||||||
W(n) per iteration: 18037000.00 flops
|
W(n) per iteration: 18037000.00 flops
|
||||||
Q(n) per iteration: 32056 bytes
|
Q(n) per iteration: 32056 bytes
|
||||||
I(n): 562.67 flops/byte
|
I(n): 562.67 flops/byte
|
||||||
W(n): 3607399936.00 flops
|
W(n): 3607399936.00 flops
|
||||||
T(n): 268426256.00 cycles
|
T(n): 364922464.00 cycles
|
||||||
P(n): 13.44 flops/cycle
|
P(n): 9.89 flops/cycle
|
||||||
|
|
||||||
=== N_P=1000 N_ITER=200 ===
|
=== N_P=1000 N_ITER=200 ===
|
||||||
W(n) per iteration: 72074000.00 flops
|
W(n) per iteration: 72074000.00 flops
|
||||||
Q(n) per iteration: 64056 bytes
|
Q(n) per iteration: 64056 bytes
|
||||||
I(n): 1125.17 flops/byte
|
I(n): 1125.17 flops/byte
|
||||||
W(n): 14414799872.00 flops
|
W(n): 14414799872.00 flops
|
||||||
T(n): 1064596800.00 cycles
|
T(n): 1432131456.00 cycles
|
||||||
P(n): 13.54 flops/cycle
|
P(n): 10.07 flops/cycle
|
||||||
|
|
||||||
=== N_P=2000 N_ITER=200 ===
|
=== N_P=2000 N_ITER=200 ===
|
||||||
W(n) per iteration: 288148000.00 flops
|
W(n) per iteration: 288148000.00 flops
|
||||||
Q(n) per iteration: 128056 bytes
|
Q(n) per iteration: 128056 bytes
|
||||||
I(n): 2250.17 flops/byte
|
I(n): 2250.17 flops/byte
|
||||||
W(n): 57629601792.00 flops
|
W(n): 57629601792.00 flops
|
||||||
T(n): 4126754304.00 cycles
|
T(n): 5669585408.00 cycles
|
||||||
P(n): 13.96 flops/cycle
|
P(n): 10.16 flops/cycle
|
||||||
|
|
||||||
=== N_P=5000 N_ITER=200 ===
|
=== N_P=5000 N_ITER=200 ===
|
||||||
W(n) per iteration: 1800369920.00 flops
|
W(n) per iteration: 1800369920.00 flops
|
||||||
Q(n) per iteration: 320056 bytes
|
Q(n) per iteration: 320056 bytes
|
||||||
I(n): 5625.17 flops/byte
|
I(n): 5625.17 flops/byte
|
||||||
W(n): 360073986048.00 flops
|
W(n): 360073986048.00 flops
|
||||||
T(n): 25623275520.00 cycles
|
T(n): 35706060800.00 cycles
|
||||||
P(n): 14.05 flops/cycle
|
P(n): 10.08 flops/cycle
|
||||||
|
|
||||||
=== N_P=10000 N_ITER=200 ===
|
=== N_P=10000 N_ITER=200 ===
|
||||||
W(n) per iteration: 2905772800.00 flops
|
W(n) per iteration: 2905772800.00 flops
|
||||||
Q(n) per iteration: 640056 bytes
|
Q(n) per iteration: 640056 bytes
|
||||||
I(n): 4539.87 flops/byte
|
I(n): 4539.87 flops/byte
|
||||||
W(n): 581154570240.00 flops
|
W(n): 581154570240.00 flops
|
||||||
T(n): 102223626240.00 cycles
|
T(n): 143150546944.00 cycles
|
||||||
P(n): 5.69 flops/cycle
|
P(n): 4.06 flops/cycle
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,64 @@
|
|||||||
|
=== N_P=50 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 183700.00 flops
|
||||||
|
Q(n) per iteration: 3256 bytes
|
||||||
|
I(n): 56.42 flops/byte
|
||||||
|
W(n): 36740000.00 flops
|
||||||
|
T(n): 5107488.00 cycles
|
||||||
|
P(n): 7.19 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=100 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 727400.00 flops
|
||||||
|
Q(n) per iteration: 6456 bytes
|
||||||
|
I(n): 112.67 flops/byte
|
||||||
|
W(n): 145480000.00 flops
|
||||||
|
T(n): 16972588.00 cycles
|
||||||
|
P(n): 8.57 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=200 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 2894800.00 flops
|
||||||
|
Q(n) per iteration: 12856 bytes
|
||||||
|
I(n): 225.17 flops/byte
|
||||||
|
W(n): 578960000.00 flops
|
||||||
|
T(n): 61120552.00 cycles
|
||||||
|
P(n): 9.47 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=500 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 18037000.00 flops
|
||||||
|
Q(n) per iteration: 32056 bytes
|
||||||
|
I(n): 562.67 flops/byte
|
||||||
|
W(n): 3607399936.00 flops
|
||||||
|
T(n): 375650720.00 cycles
|
||||||
|
P(n): 9.60 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=1000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 72074000.00 flops
|
||||||
|
Q(n) per iteration: 64056 bytes
|
||||||
|
I(n): 1125.17 flops/byte
|
||||||
|
W(n): 14414799872.00 flops
|
||||||
|
T(n): 1444334464.00 cycles
|
||||||
|
P(n): 9.98 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=2000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 288148000.00 flops
|
||||||
|
Q(n) per iteration: 128056 bytes
|
||||||
|
I(n): 2250.17 flops/byte
|
||||||
|
W(n): 57629601792.00 flops
|
||||||
|
T(n): 5717088768.00 cycles
|
||||||
|
P(n): 10.08 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=5000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 1800369920.00 flops
|
||||||
|
Q(n) per iteration: 320056 bytes
|
||||||
|
I(n): 5625.17 flops/byte
|
||||||
|
W(n): 360073986048.00 flops
|
||||||
|
T(n): 36025249792.00 cycles
|
||||||
|
P(n): 10.00 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=10000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 2905772800.00 flops
|
||||||
|
Q(n) per iteration: 640056 bytes
|
||||||
|
I(n): 4539.87 flops/byte
|
||||||
|
W(n): 581154570240.00 flops
|
||||||
|
T(n): 143378251776.00 cycles
|
||||||
|
P(n): 4.05 flops/cycle
|
||||||
|
|
||||||
@@ -1,58 +1,66 @@
|
|||||||
rm -f main_* run_tests *.o *.s variants/*.s variants/*.o headers/*.s headers/*.o
|
rm -f main_* run_tests *.o *.s variants/*.s variants/*.o headers/*.s headers/*.o
|
||||||
/usr/bin/g++ main-float.cpp ./variants/variant_float_inlining_SoA_AVX2_polyexp_rsqrt_loopopt.cpp -o main_float_inlining_SoA_AVX2_polyexp_rsqrt_loopopt -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1
|
/usr/bin/g++ main-float.cpp ./variants/variant_float_inlining_SoA_AVX2_polyexp_rsqrt_loopopt_expfix.cpp -o main_float_inlining_SoA_AVX2_polyexp_rsqrt_loopopt_expfix -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1
|
||||||
=== N_P=50 N_ITER=200 ===
|
=== N_P=50 N_ITER=200 ===
|
||||||
W(n) per iteration: 183700.00 flops
|
W(n) per iteration: 183700.00 flops
|
||||||
Q(n) per iteration: 3256 bytes
|
Q(n) per iteration: 3256 bytes
|
||||||
I(n): 56.42 flops/byte
|
I(n): 56.42 flops/byte
|
||||||
W(n): 36740000.00 flops
|
W(n): 36740000.00 flops
|
||||||
T(n): 3857942.00 cycles
|
T(n): 4870774.50 cycles
|
||||||
P(n): 9.52 flops/cycle
|
P(n): 7.54 flops/cycle
|
||||||
|
|
||||||
=== N_P=100 N_ITER=200 ===
|
=== N_P=100 N_ITER=200 ===
|
||||||
W(n) per iteration: 727400.00 flops
|
W(n) per iteration: 727400.00 flops
|
||||||
Q(n) per iteration: 6456 bytes
|
Q(n) per iteration: 6456 bytes
|
||||||
I(n): 112.67 flops/byte
|
I(n): 112.67 flops/byte
|
||||||
W(n): 145480000.00 flops
|
W(n): 145480000.00 flops
|
||||||
T(n): 11939004.00 cycles
|
T(n): 15640118.00 cycles
|
||||||
P(n): 12.19 flops/cycle
|
P(n): 9.30 flops/cycle
|
||||||
|
|
||||||
=== N_P=200 N_ITER=200 ===
|
=== N_P=200 N_ITER=200 ===
|
||||||
W(n) per iteration: 2894800.00 flops
|
W(n) per iteration: 2894800.00 flops
|
||||||
Q(n) per iteration: 12856 bytes
|
Q(n) per iteration: 12856 bytes
|
||||||
I(n): 225.17 flops/byte
|
I(n): 225.17 flops/byte
|
||||||
W(n): 578960000.00 flops
|
W(n): 578960000.00 flops
|
||||||
T(n): 41343432.00 cycles
|
T(n): 55310808.00 cycles
|
||||||
P(n): 14.00 flops/cycle
|
P(n): 10.47 flops/cycle
|
||||||
|
|
||||||
=== N_P=500 N_ITER=200 ===
|
=== N_P=500 N_ITER=200 ===
|
||||||
W(n) per iteration: 18037000.00 flops
|
W(n) per iteration: 18037000.00 flops
|
||||||
Q(n) per iteration: 32056 bytes
|
Q(n) per iteration: 32056 bytes
|
||||||
I(n): 562.67 flops/byte
|
I(n): 562.67 flops/byte
|
||||||
W(n): 3607399936.00 flops
|
W(n): 3607399936.00 flops
|
||||||
T(n): 242607552.00 cycles
|
T(n): 329563872.00 cycles
|
||||||
P(n): 14.87 flops/cycle
|
P(n): 10.95 flops/cycle
|
||||||
|
|
||||||
=== N_P=1000 N_ITER=200 ===
|
=== N_P=1000 N_ITER=200 ===
|
||||||
W(n) per iteration: 72074000.00 flops
|
W(n) per iteration: 72074000.00 flops
|
||||||
Q(n) per iteration: 64056 bytes
|
Q(n) per iteration: 64056 bytes
|
||||||
I(n): 1125.17 flops/byte
|
I(n): 1125.17 flops/byte
|
||||||
W(n): 14414799872.00 flops
|
W(n): 14414799872.00 flops
|
||||||
T(n): 939774144.00 cycles
|
T(n): 1283268352.00 cycles
|
||||||
P(n): 15.34 flops/cycle
|
P(n): 11.23 flops/cycle
|
||||||
|
|
||||||
=== N_P=2000 N_ITER=200 ===
|
=== N_P=2000 N_ITER=200 ===
|
||||||
W(n) per iteration: 288148000.00 flops
|
W(n) per iteration: 288148000.00 flops
|
||||||
Q(n) per iteration: 128056 bytes
|
Q(n) per iteration: 128056 bytes
|
||||||
I(n): 2250.17 flops/byte
|
I(n): 2250.17 flops/byte
|
||||||
W(n): 57629601792.00 flops
|
W(n): 57629601792.00 flops
|
||||||
T(n): 3710422272.00 cycles
|
T(n): 5083250688.00 cycles
|
||||||
P(n): 15.53 flops/cycle
|
P(n): 11.34 flops/cycle
|
||||||
|
|
||||||
=== N_P=5000 N_ITER=200 ===
|
=== N_P=5000 N_ITER=200 ===
|
||||||
W(n) per iteration: 1800369920.00 flops
|
W(n) per iteration: 1800369920.00 flops
|
||||||
Q(n) per iteration: 320056 bytes
|
Q(n) per iteration: 320056 bytes
|
||||||
I(n): 5625.17 flops/byte
|
I(n): 5625.17 flops/byte
|
||||||
W(n): 360073986048.00 flops
|
W(n): 360073986048.00 flops
|
||||||
T(n): 23019415552.00 cycles
|
T(n): 31586570240.00 cycles
|
||||||
P(n): 15.64 flops/cycle
|
P(n): 11.40 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=10000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 2905772800.00 flops
|
||||||
|
Q(n) per iteration: 640056 bytes
|
||||||
|
I(n): 4539.87 flops/byte
|
||||||
|
W(n): 581154570240.00 flops
|
||||||
|
T(n): 126882955264.00 cycles
|
||||||
|
P(n): 4.58 flops/cycle
|
||||||
|
|
||||||
|
|||||||
@@ -1,66 +1,64 @@
|
|||||||
rm -f main_* run_tests *.o *.s variants/*.s variants/*.o headers/*.s headers/*.o
|
|
||||||
/usr/bin/g++ main-float.cpp ./variants/variant_float_inlining_SoA_AVX2_polyexp_rsqrt_loopopt.cpp -o main_float_inlining_SoA_AVX2_polyexp_rsqrt_loopopt -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1
|
|
||||||
=== N_P=50 N_ITER=200 ===
|
=== N_P=50 N_ITER=200 ===
|
||||||
W(n) per iteration: 183700.00 flops
|
W(n) per iteration: 183700.00 flops
|
||||||
Q(n) per iteration: 3256 bytes
|
Q(n) per iteration: 3256 bytes
|
||||||
I(n): 56.42 flops/byte
|
I(n): 56.42 flops/byte
|
||||||
W(n): 36740000.00 flops
|
W(n): 36740000.00 flops
|
||||||
T(n): 3896576.25 cycles
|
T(n): 4872185.50 cycles
|
||||||
P(n): 9.43 flops/cycle
|
P(n): 7.54 flops/cycle
|
||||||
|
|
||||||
=== N_P=100 N_ITER=200 ===
|
=== N_P=100 N_ITER=200 ===
|
||||||
W(n) per iteration: 727400.00 flops
|
W(n) per iteration: 727400.00 flops
|
||||||
Q(n) per iteration: 6456 bytes
|
Q(n) per iteration: 6456 bytes
|
||||||
I(n): 112.67 flops/byte
|
I(n): 112.67 flops/byte
|
||||||
W(n): 145480000.00 flops
|
W(n): 145480000.00 flops
|
||||||
T(n): 12081705.00 cycles
|
T(n): 15664138.00 cycles
|
||||||
P(n): 12.04 flops/cycle
|
P(n): 9.29 flops/cycle
|
||||||
|
|
||||||
=== N_P=200 N_ITER=200 ===
|
=== N_P=200 N_ITER=200 ===
|
||||||
W(n) per iteration: 2894800.00 flops
|
W(n) per iteration: 2894800.00 flops
|
||||||
Q(n) per iteration: 12856 bytes
|
Q(n) per iteration: 12856 bytes
|
||||||
I(n): 225.17 flops/byte
|
I(n): 225.17 flops/byte
|
||||||
W(n): 578960000.00 flops
|
W(n): 578960000.00 flops
|
||||||
T(n): 41848524.00 cycles
|
T(n): 55368740.00 cycles
|
||||||
P(n): 13.83 flops/cycle
|
P(n): 10.46 flops/cycle
|
||||||
|
|
||||||
=== N_P=500 N_ITER=200 ===
|
=== N_P=500 N_ITER=200 ===
|
||||||
W(n) per iteration: 18037000.00 flops
|
W(n) per iteration: 18037000.00 flops
|
||||||
Q(n) per iteration: 32056 bytes
|
Q(n) per iteration: 32056 bytes
|
||||||
I(n): 562.67 flops/byte
|
I(n): 562.67 flops/byte
|
||||||
W(n): 3607399936.00 flops
|
W(n): 3607399936.00 flops
|
||||||
T(n): 245348896.00 cycles
|
T(n): 329987008.00 cycles
|
||||||
P(n): 14.70 flops/cycle
|
P(n): 10.93 flops/cycle
|
||||||
|
|
||||||
=== N_P=1000 N_ITER=200 ===
|
=== N_P=1000 N_ITER=200 ===
|
||||||
W(n) per iteration: 72074000.00 flops
|
W(n) per iteration: 72074000.00 flops
|
||||||
Q(n) per iteration: 64056 bytes
|
Q(n) per iteration: 64056 bytes
|
||||||
I(n): 1125.17 flops/byte
|
I(n): 1125.17 flops/byte
|
||||||
W(n): 14414799872.00 flops
|
W(n): 14414799872.00 flops
|
||||||
T(n): 950120256.00 cycles
|
T(n): 1293044736.00 cycles
|
||||||
P(n): 15.17 flops/cycle
|
P(n): 11.15 flops/cycle
|
||||||
|
|
||||||
=== N_P=2000 N_ITER=200 ===
|
=== N_P=2000 N_ITER=200 ===
|
||||||
W(n) per iteration: 288148000.00 flops
|
W(n) per iteration: 288148000.00 flops
|
||||||
Q(n) per iteration: 128056 bytes
|
Q(n) per iteration: 128056 bytes
|
||||||
I(n): 2250.17 flops/byte
|
I(n): 2250.17 flops/byte
|
||||||
W(n): 57629601792.00 flops
|
W(n): 57629601792.00 flops
|
||||||
T(n): 3760375296.00 cycles
|
T(n): 5130688512.00 cycles
|
||||||
P(n): 15.33 flops/cycle
|
P(n): 11.23 flops/cycle
|
||||||
|
|
||||||
=== N_P=5000 N_ITER=200 ===
|
=== N_P=5000 N_ITER=200 ===
|
||||||
W(n) per iteration: 1800369920.00 flops
|
W(n) per iteration: 1800369920.00 flops
|
||||||
Q(n) per iteration: 320056 bytes
|
Q(n) per iteration: 320056 bytes
|
||||||
I(n): 5625.17 flops/byte
|
I(n): 5625.17 flops/byte
|
||||||
W(n): 360073986048.00 flops
|
W(n): 360073986048.00 flops
|
||||||
T(n): 23338608640.00 cycles
|
T(n): 32060348416.00 cycles
|
||||||
P(n): 15.43 flops/cycle
|
P(n): 11.23 flops/cycle
|
||||||
|
|
||||||
=== N_P=10000 N_ITER=200 ===
|
=== N_P=10000 N_ITER=200 ===
|
||||||
W(n) per iteration: 2905772800.00 flops
|
W(n) per iteration: 2905772800.00 flops
|
||||||
Q(n) per iteration: 640056 bytes
|
Q(n) per iteration: 640056 bytes
|
||||||
I(n): 4539.87 flops/byte
|
I(n): 4539.87 flops/byte
|
||||||
W(n): 581154570240.00 flops
|
W(n): 581154570240.00 flops
|
||||||
T(n): 93044531200.00 cycles
|
T(n): 129057972224.00 cycles
|
||||||
P(n): 6.25 flops/cycle
|
P(n): 4.50 flops/cycle
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,64 @@
|
|||||||
|
=== N_P=50 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 183700.00 flops
|
||||||
|
Q(n) per iteration: 3256 bytes
|
||||||
|
I(n): 56.42 flops/byte
|
||||||
|
W(n): 36740000.00 flops
|
||||||
|
T(n): 4901788.00 cycles
|
||||||
|
P(n): 7.50 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=100 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 727400.00 flops
|
||||||
|
Q(n) per iteration: 6456 bytes
|
||||||
|
I(n): 112.67 flops/byte
|
||||||
|
W(n): 145480000.00 flops
|
||||||
|
T(n): 15669965.00 cycles
|
||||||
|
P(n): 9.28 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=200 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 2894800.00 flops
|
||||||
|
Q(n) per iteration: 12856 bytes
|
||||||
|
I(n): 225.17 flops/byte
|
||||||
|
W(n): 578960000.00 flops
|
||||||
|
T(n): 55911480.00 cycles
|
||||||
|
P(n): 10.35 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=500 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 18037000.00 flops
|
||||||
|
Q(n) per iteration: 32056 bytes
|
||||||
|
I(n): 562.67 flops/byte
|
||||||
|
W(n): 3607399936.00 flops
|
||||||
|
T(n): 338225088.00 cycles
|
||||||
|
P(n): 10.67 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=1000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 72074000.00 flops
|
||||||
|
Q(n) per iteration: 64056 bytes
|
||||||
|
I(n): 1125.17 flops/byte
|
||||||
|
W(n): 14414799872.00 flops
|
||||||
|
T(n): 1302161408.00 cycles
|
||||||
|
P(n): 11.07 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=2000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 288148000.00 flops
|
||||||
|
Q(n) per iteration: 128056 bytes
|
||||||
|
I(n): 2250.17 flops/byte
|
||||||
|
W(n): 57629601792.00 flops
|
||||||
|
T(n): 5189515776.00 cycles
|
||||||
|
P(n): 11.11 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=5000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 1800369920.00 flops
|
||||||
|
Q(n) per iteration: 320056 bytes
|
||||||
|
I(n): 5625.17 flops/byte
|
||||||
|
W(n): 360073986048.00 flops
|
||||||
|
T(n): 32577761280.00 cycles
|
||||||
|
P(n): 11.05 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=10000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 2905772800.00 flops
|
||||||
|
Q(n) per iteration: 640056 bytes
|
||||||
|
I(n): 4539.87 flops/byte
|
||||||
|
W(n): 581154570240.00 flops
|
||||||
|
T(n): 129035010048.00 cycles
|
||||||
|
P(n): 4.50 flops/cycle
|
||||||
|
|
||||||
@@ -1,58 +1,66 @@
|
|||||||
rm -f main_* run_tests *.o *.s variants/*.s variants/*.o headers/*.s headers/*.o
|
rm -f main_* run_tests *.o *.s variants/*.s variants/*.o headers/*.s headers/*.o
|
||||||
/usr/bin/g++ main-float.cpp ./variants/variant_float_inlining_SoA_AVX512_polyexp.cpp -o main_float_inlining_SoA_AVX512_polyexp -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1
|
/usr/bin/g++ main-float.cpp ./variants/variant_float_inlining_SoA_AVX512_polyexp_expfix.cpp -o main_float_inlining_SoA_AVX512_polyexp_expfix -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1
|
||||||
=== N_P=50 N_ITER=200 ===
|
=== N_P=50 N_ITER=200 ===
|
||||||
W(n) per iteration: 183700.00 flops
|
W(n) per iteration: 183700.00 flops
|
||||||
Q(n) per iteration: 3256 bytes
|
Q(n) per iteration: 3256 bytes
|
||||||
I(n): 56.42 flops/byte
|
I(n): 56.42 flops/byte
|
||||||
W(n): 36740000.00 flops
|
W(n): 36740000.00 flops
|
||||||
T(n): 3952082.50 cycles
|
T(n): 4618692.00 cycles
|
||||||
P(n): 9.30 flops/cycle
|
P(n): 7.95 flops/cycle
|
||||||
|
|
||||||
=== N_P=100 N_ITER=200 ===
|
=== N_P=100 N_ITER=200 ===
|
||||||
W(n) per iteration: 727400.00 flops
|
W(n) per iteration: 727400.00 flops
|
||||||
Q(n) per iteration: 6456 bytes
|
Q(n) per iteration: 6456 bytes
|
||||||
I(n): 112.67 flops/byte
|
I(n): 112.67 flops/byte
|
||||||
W(n): 145480000.00 flops
|
W(n): 145480000.00 flops
|
||||||
T(n): 11806225.00 cycles
|
T(n): 14020708.00 cycles
|
||||||
P(n): 12.32 flops/cycle
|
P(n): 10.38 flops/cycle
|
||||||
|
|
||||||
=== N_P=200 N_ITER=200 ===
|
=== N_P=200 N_ITER=200 ===
|
||||||
W(n) per iteration: 2894800.00 flops
|
W(n) per iteration: 2894800.00 flops
|
||||||
Q(n) per iteration: 12856 bytes
|
Q(n) per iteration: 12856 bytes
|
||||||
I(n): 225.17 flops/byte
|
I(n): 225.17 flops/byte
|
||||||
W(n): 578960000.00 flops
|
W(n): 578960000.00 flops
|
||||||
T(n): 39147728.00 cycles
|
T(n): 47426524.00 cycles
|
||||||
P(n): 14.79 flops/cycle
|
P(n): 12.21 flops/cycle
|
||||||
|
|
||||||
=== N_P=500 N_ITER=200 ===
|
=== N_P=500 N_ITER=200 ===
|
||||||
W(n) per iteration: 18037000.00 flops
|
W(n) per iteration: 18037000.00 flops
|
||||||
Q(n) per iteration: 32056 bytes
|
Q(n) per iteration: 32056 bytes
|
||||||
I(n): 562.67 flops/byte
|
I(n): 562.67 flops/byte
|
||||||
W(n): 3607399936.00 flops
|
W(n): 3607399936.00 flops
|
||||||
T(n): 220870336.00 cycles
|
T(n): 271672832.00 cycles
|
||||||
P(n): 16.33 flops/cycle
|
P(n): 13.28 flops/cycle
|
||||||
|
|
||||||
=== N_P=1000 N_ITER=200 ===
|
=== N_P=1000 N_ITER=200 ===
|
||||||
W(n) per iteration: 72074000.00 flops
|
W(n) per iteration: 72074000.00 flops
|
||||||
Q(n) per iteration: 64056 bytes
|
Q(n) per iteration: 64056 bytes
|
||||||
I(n): 1125.17 flops/byte
|
I(n): 1125.17 flops/byte
|
||||||
W(n): 14414799872.00 flops
|
W(n): 14414799872.00 flops
|
||||||
T(n): 843467072.00 cycles
|
T(n): 1041892096.00 cycles
|
||||||
P(n): 17.09 flops/cycle
|
P(n): 13.84 flops/cycle
|
||||||
|
|
||||||
=== N_P=2000 N_ITER=200 ===
|
=== N_P=2000 N_ITER=200 ===
|
||||||
W(n) per iteration: 288148000.00 flops
|
W(n) per iteration: 288148000.00 flops
|
||||||
Q(n) per iteration: 128056 bytes
|
Q(n) per iteration: 128056 bytes
|
||||||
I(n): 2250.17 flops/byte
|
I(n): 2250.17 flops/byte
|
||||||
W(n): 57629601792.00 flops
|
W(n): 57629601792.00 flops
|
||||||
T(n): 3297570560.00 cycles
|
T(n): 4086357760.00 cycles
|
||||||
P(n): 17.48 flops/cycle
|
P(n): 14.10 flops/cycle
|
||||||
|
|
||||||
=== N_P=5000 N_ITER=200 ===
|
=== N_P=5000 N_ITER=200 ===
|
||||||
W(n) per iteration: 1800369920.00 flops
|
W(n) per iteration: 1800369920.00 flops
|
||||||
Q(n) per iteration: 320056 bytes
|
Q(n) per iteration: 320056 bytes
|
||||||
I(n): 5625.17 flops/byte
|
I(n): 5625.17 flops/byte
|
||||||
W(n): 360073986048.00 flops
|
W(n): 360073986048.00 flops
|
||||||
T(n): 20527921152.00 cycles
|
T(n): 25345890304.00 cycles
|
||||||
P(n): 17.54 flops/cycle
|
P(n): 14.21 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=10000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 2905772800.00 flops
|
||||||
|
Q(n) per iteration: 640056 bytes
|
||||||
|
I(n): 4539.87 flops/byte
|
||||||
|
W(n): 581154570240.00 flops
|
||||||
|
T(n): 100797374464.00 cycles
|
||||||
|
P(n): 5.77 flops/cycle
|
||||||
|
|
||||||
|
|||||||
@@ -1,66 +1,66 @@
|
|||||||
rm -f main_* run_tests *.o *.s variants/*.s variants/*.o headers/*.s headers/*.o
|
rm -f main_* run_tests *.o *.s variants/*.s variants/*.o headers/*.s headers/*.o
|
||||||
/usr/bin/g++ main-float.cpp ./variants/variant_float_inlining_SoA_AVX512_polyexp.cpp -o main_float_inlining_SoA_AVX512_polyexp -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1
|
/usr/bin/g++ main-float.cpp ./variants/variant_float_inlining_SoA_AVX512_polyexp_expfix.cpp -o main_float_inlining_SoA_AVX512_polyexp_expfix -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1
|
||||||
=== N_P=50 N_ITER=200 ===
|
=== N_P=50 N_ITER=200 ===
|
||||||
W(n) per iteration: 183700.00 flops
|
W(n) per iteration: 183700.00 flops
|
||||||
Q(n) per iteration: 3256 bytes
|
Q(n) per iteration: 3256 bytes
|
||||||
I(n): 56.42 flops/byte
|
I(n): 56.42 flops/byte
|
||||||
W(n): 36740000.00 flops
|
W(n): 36740000.00 flops
|
||||||
T(n): 3995093.75 cycles
|
T(n): 4660804.50 cycles
|
||||||
P(n): 9.20 flops/cycle
|
P(n): 7.88 flops/cycle
|
||||||
|
|
||||||
=== N_P=100 N_ITER=200 ===
|
=== N_P=100 N_ITER=200 ===
|
||||||
W(n) per iteration: 727400.00 flops
|
W(n) per iteration: 727400.00 flops
|
||||||
Q(n) per iteration: 6456 bytes
|
Q(n) per iteration: 6456 bytes
|
||||||
I(n): 112.67 flops/byte
|
I(n): 112.67 flops/byte
|
||||||
W(n): 145480000.00 flops
|
W(n): 145480000.00 flops
|
||||||
T(n): 11929089.00 cycles
|
T(n): 14015782.00 cycles
|
||||||
P(n): 12.20 flops/cycle
|
P(n): 10.38 flops/cycle
|
||||||
|
|
||||||
=== N_P=200 N_ITER=200 ===
|
=== N_P=200 N_ITER=200 ===
|
||||||
W(n) per iteration: 2894800.00 flops
|
W(n) per iteration: 2894800.00 flops
|
||||||
Q(n) per iteration: 12856 bytes
|
Q(n) per iteration: 12856 bytes
|
||||||
I(n): 225.17 flops/byte
|
I(n): 225.17 flops/byte
|
||||||
W(n): 578960000.00 flops
|
W(n): 578960000.00 flops
|
||||||
T(n): 39616448.00 cycles
|
T(n): 47630040.00 cycles
|
||||||
P(n): 14.61 flops/cycle
|
P(n): 12.16 flops/cycle
|
||||||
|
|
||||||
=== N_P=500 N_ITER=200 ===
|
=== N_P=500 N_ITER=200 ===
|
||||||
W(n) per iteration: 18037000.00 flops
|
W(n) per iteration: 18037000.00 flops
|
||||||
Q(n) per iteration: 32056 bytes
|
Q(n) per iteration: 32056 bytes
|
||||||
I(n): 562.67 flops/byte
|
I(n): 562.67 flops/byte
|
||||||
W(n): 3607399936.00 flops
|
W(n): 3607399936.00 flops
|
||||||
T(n): 223771808.00 cycles
|
T(n): 272007200.00 cycles
|
||||||
P(n): 16.12 flops/cycle
|
P(n): 13.26 flops/cycle
|
||||||
|
|
||||||
=== N_P=1000 N_ITER=200 ===
|
=== N_P=1000 N_ITER=200 ===
|
||||||
W(n) per iteration: 72074000.00 flops
|
W(n) per iteration: 72074000.00 flops
|
||||||
Q(n) per iteration: 64056 bytes
|
Q(n) per iteration: 64056 bytes
|
||||||
I(n): 1125.17 flops/byte
|
I(n): 1125.17 flops/byte
|
||||||
W(n): 14414799872.00 flops
|
W(n): 14414799872.00 flops
|
||||||
T(n): 854663616.00 cycles
|
T(n): 1042778816.00 cycles
|
||||||
P(n): 16.87 flops/cycle
|
P(n): 13.82 flops/cycle
|
||||||
|
|
||||||
=== N_P=2000 N_ITER=200 ===
|
=== N_P=2000 N_ITER=200 ===
|
||||||
W(n) per iteration: 288148000.00 flops
|
W(n) per iteration: 288148000.00 flops
|
||||||
Q(n) per iteration: 128056 bytes
|
Q(n) per iteration: 128056 bytes
|
||||||
I(n): 2250.17 flops/byte
|
I(n): 2250.17 flops/byte
|
||||||
W(n): 57629601792.00 flops
|
W(n): 57629601792.00 flops
|
||||||
T(n): 3338979072.00 cycles
|
T(n): 4092400640.00 cycles
|
||||||
P(n): 17.26 flops/cycle
|
P(n): 14.08 flops/cycle
|
||||||
|
|
||||||
=== N_P=5000 N_ITER=200 ===
|
=== N_P=5000 N_ITER=200 ===
|
||||||
W(n) per iteration: 1800369920.00 flops
|
W(n) per iteration: 1800369920.00 flops
|
||||||
Q(n) per iteration: 320056 bytes
|
Q(n) per iteration: 320056 bytes
|
||||||
I(n): 5625.17 flops/byte
|
I(n): 5625.17 flops/byte
|
||||||
W(n): 360073986048.00 flops
|
W(n): 360073986048.00 flops
|
||||||
T(n): 20689987584.00 cycles
|
T(n): 25352386560.00 cycles
|
||||||
P(n): 17.40 flops/cycle
|
P(n): 14.20 flops/cycle
|
||||||
|
|
||||||
=== N_P=10000 N_ITER=200 ===
|
=== N_P=10000 N_ITER=200 ===
|
||||||
W(n) per iteration: 2905772800.00 flops
|
W(n) per iteration: 2905772800.00 flops
|
||||||
Q(n) per iteration: 640056 bytes
|
Q(n) per iteration: 640056 bytes
|
||||||
I(n): 4539.87 flops/byte
|
I(n): 4539.87 flops/byte
|
||||||
W(n): 581154570240.00 flops
|
W(n): 581154570240.00 flops
|
||||||
T(n): 82361786368.00 cycles
|
T(n): 101285814272.00 cycles
|
||||||
P(n): 7.06 flops/cycle
|
P(n): 5.74 flops/cycle
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,66 @@
|
|||||||
|
rm -f main_* run_tests *.o *.s variants/*.s variants/*.o headers/*.s headers/*.o
|
||||||
|
/usr/bin/g++ main-float.cpp ./variants/variant_float_inlining_SoA_AVX512_polyexp_expfix.cpp -o main_float_inlining_SoA_AVX512_polyexp_expfix -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1
|
||||||
|
=== N_P=50 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 183700.00 flops
|
||||||
|
Q(n) per iteration: 3256 bytes
|
||||||
|
I(n): 56.42 flops/byte
|
||||||
|
W(n): 36740000.00 flops
|
||||||
|
T(n): 4633135.50 cycles
|
||||||
|
P(n): 7.93 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=100 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 727400.00 flops
|
||||||
|
Q(n) per iteration: 6456 bytes
|
||||||
|
I(n): 112.67 flops/byte
|
||||||
|
W(n): 145480000.00 flops
|
||||||
|
T(n): 14098810.00 cycles
|
||||||
|
P(n): 10.32 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=200 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 2894800.00 flops
|
||||||
|
Q(n) per iteration: 12856 bytes
|
||||||
|
I(n): 225.17 flops/byte
|
||||||
|
W(n): 578960000.00 flops
|
||||||
|
T(n): 47519168.00 cycles
|
||||||
|
P(n): 12.18 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=500 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 18037000.00 flops
|
||||||
|
Q(n) per iteration: 32056 bytes
|
||||||
|
I(n): 562.67 flops/byte
|
||||||
|
W(n): 3607399936.00 flops
|
||||||
|
T(n): 272423904.00 cycles
|
||||||
|
P(n): 13.24 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=1000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 72074000.00 flops
|
||||||
|
Q(n) per iteration: 64056 bytes
|
||||||
|
I(n): 1125.17 flops/byte
|
||||||
|
W(n): 14414799872.00 flops
|
||||||
|
T(n): 1060791424.00 cycles
|
||||||
|
P(n): 13.59 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=2000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 288148000.00 flops
|
||||||
|
Q(n) per iteration: 128056 bytes
|
||||||
|
I(n): 2250.17 flops/byte
|
||||||
|
W(n): 57629601792.00 flops
|
||||||
|
T(n): 4102831872.00 cycles
|
||||||
|
P(n): 14.05 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=5000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 1800369920.00 flops
|
||||||
|
Q(n) per iteration: 320056 bytes
|
||||||
|
I(n): 5625.17 flops/byte
|
||||||
|
W(n): 360073986048.00 flops
|
||||||
|
T(n): 25357774848.00 cycles
|
||||||
|
P(n): 14.20 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=10000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 2905772800.00 flops
|
||||||
|
Q(n) per iteration: 640056 bytes
|
||||||
|
I(n): 4539.87 flops/byte
|
||||||
|
W(n): 581154570240.00 flops
|
||||||
|
T(n): 100551254016.00 cycles
|
||||||
|
P(n): 5.78 flops/cycle
|
||||||
|
|
||||||
@@ -1,58 +1,66 @@
|
|||||||
rm -f main_* run_tests *.o *.s variants/*.s variants/*.o headers/*.s headers/*.o
|
rm -f main_* run_tests *.o *.s variants/*.s variants/*.o headers/*.s headers/*.o
|
||||||
/usr/bin/g++ main-float.cpp ./variants/variant_float_inlining_SoA_AVX512_polyexp_fastinvsqrt.cpp -o main_float_inlining_SoA_AVX512_polyexp_fastinvsqrt -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1
|
/usr/bin/g++ main-float.cpp ./variants/variant_float_inlining_SoA_AVX512_polyexp_fastinvsqrt_expfix.cpp -o main_float_inlining_SoA_AVX512_polyexp_fastinvsqrt_expfix -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1
|
||||||
=== N_P=50 N_ITER=200 ===
|
=== N_P=50 N_ITER=200 ===
|
||||||
W(n) per iteration: 183700.00 flops
|
W(n) per iteration: 183700.00 flops
|
||||||
Q(n) per iteration: 3256 bytes
|
Q(n) per iteration: 3256 bytes
|
||||||
I(n): 56.42 flops/byte
|
I(n): 56.42 flops/byte
|
||||||
W(n): 36740000.00 flops
|
W(n): 36740000.00 flops
|
||||||
T(n): 4235088.00 cycles
|
T(n): 4899351.00 cycles
|
||||||
P(n): 8.68 flops/cycle
|
P(n): 7.50 flops/cycle
|
||||||
|
|
||||||
=== N_P=100 N_ITER=200 ===
|
=== N_P=100 N_ITER=200 ===
|
||||||
W(n) per iteration: 727400.00 flops
|
W(n) per iteration: 727400.00 flops
|
||||||
Q(n) per iteration: 6456 bytes
|
Q(n) per iteration: 6456 bytes
|
||||||
I(n): 112.67 flops/byte
|
I(n): 112.67 flops/byte
|
||||||
W(n): 145480000.00 flops
|
W(n): 145480000.00 flops
|
||||||
T(n): 12301878.00 cycles
|
T(n): 14704840.00 cycles
|
||||||
P(n): 11.83 flops/cycle
|
P(n): 9.89 flops/cycle
|
||||||
|
|
||||||
=== N_P=200 N_ITER=200 ===
|
=== N_P=200 N_ITER=200 ===
|
||||||
W(n) per iteration: 2894800.00 flops
|
W(n) per iteration: 2894800.00 flops
|
||||||
Q(n) per iteration: 12856 bytes
|
Q(n) per iteration: 12856 bytes
|
||||||
I(n): 225.17 flops/byte
|
I(n): 225.17 flops/byte
|
||||||
W(n): 578960000.00 flops
|
W(n): 578960000.00 flops
|
||||||
T(n): 40178688.00 cycles
|
T(n): 48870456.00 cycles
|
||||||
P(n): 14.41 flops/cycle
|
P(n): 11.85 flops/cycle
|
||||||
|
|
||||||
=== N_P=500 N_ITER=200 ===
|
=== N_P=500 N_ITER=200 ===
|
||||||
W(n) per iteration: 18037000.00 flops
|
W(n) per iteration: 18037000.00 flops
|
||||||
Q(n) per iteration: 32056 bytes
|
Q(n) per iteration: 32056 bytes
|
||||||
I(n): 562.67 flops/byte
|
I(n): 562.67 flops/byte
|
||||||
W(n): 3607399936.00 flops
|
W(n): 3607399936.00 flops
|
||||||
T(n): 223423168.00 cycles
|
T(n): 274548320.00 cycles
|
||||||
P(n): 16.15 flops/cycle
|
P(n): 13.14 flops/cycle
|
||||||
|
|
||||||
=== N_P=1000 N_ITER=200 ===
|
=== N_P=1000 N_ITER=200 ===
|
||||||
W(n) per iteration: 72074000.00 flops
|
W(n) per iteration: 72074000.00 flops
|
||||||
Q(n) per iteration: 64056 bytes
|
Q(n) per iteration: 64056 bytes
|
||||||
I(n): 1125.17 flops/byte
|
I(n): 1125.17 flops/byte
|
||||||
W(n): 14414799872.00 flops
|
W(n): 14414799872.00 flops
|
||||||
T(n): 848105152.00 cycles
|
T(n): 1067638016.00 cycles
|
||||||
P(n): 17.00 flops/cycle
|
P(n): 13.50 flops/cycle
|
||||||
|
|
||||||
=== N_P=2000 N_ITER=200 ===
|
=== N_P=2000 N_ITER=200 ===
|
||||||
W(n) per iteration: 288148000.00 flops
|
W(n) per iteration: 288148000.00 flops
|
||||||
Q(n) per iteration: 128056 bytes
|
Q(n) per iteration: 128056 bytes
|
||||||
I(n): 2250.17 flops/byte
|
I(n): 2250.17 flops/byte
|
||||||
W(n): 57629601792.00 flops
|
W(n): 57629601792.00 flops
|
||||||
T(n): 3303374080.00 cycles
|
T(n): 4133780736.00 cycles
|
||||||
P(n): 17.45 flops/cycle
|
P(n): 13.94 flops/cycle
|
||||||
|
|
||||||
=== N_P=5000 N_ITER=200 ===
|
=== N_P=5000 N_ITER=200 ===
|
||||||
W(n) per iteration: 1800369920.00 flops
|
W(n) per iteration: 1800369920.00 flops
|
||||||
Q(n) per iteration: 320056 bytes
|
Q(n) per iteration: 320056 bytes
|
||||||
I(n): 5625.17 flops/byte
|
I(n): 5625.17 flops/byte
|
||||||
W(n): 360073986048.00 flops
|
W(n): 360073986048.00 flops
|
||||||
T(n): 20445360128.00 cycles
|
T(n): 25536294912.00 cycles
|
||||||
P(n): 17.61 flops/cycle
|
P(n): 14.10 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=10000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 2905772800.00 flops
|
||||||
|
Q(n) per iteration: 640056 bytes
|
||||||
|
I(n): 4539.87 flops/byte
|
||||||
|
W(n): 581154570240.00 flops
|
||||||
|
T(n): 101531860992.00 cycles
|
||||||
|
P(n): 5.72 flops/cycle
|
||||||
|
|
||||||
|
|||||||
@@ -1,66 +1,66 @@
|
|||||||
rm -f main_* run_tests *.o *.s variants/*.s variants/*.o headers/*.s headers/*.o
|
rm -f main_* run_tests *.o *.s variants/*.s variants/*.o headers/*.s headers/*.o
|
||||||
/usr/bin/g++ main-float.cpp ./variants/variant_float_inlining_SoA_AVX512_polyexp_fastinvsqrt.cpp -o main_float_inlining_SoA_AVX512_polyexp_fastinvsqrt -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1
|
/usr/bin/g++ main-float.cpp ./variants/variant_float_inlining_SoA_AVX512_polyexp_fastinvsqrt_expfix.cpp -o main_float_inlining_SoA_AVX512_polyexp_fastinvsqrt_expfix -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1
|
||||||
=== N_P=50 N_ITER=200 ===
|
=== N_P=50 N_ITER=200 ===
|
||||||
W(n) per iteration: 183700.00 flops
|
W(n) per iteration: 183700.00 flops
|
||||||
Q(n) per iteration: 3256 bytes
|
Q(n) per iteration: 3256 bytes
|
||||||
I(n): 56.42 flops/byte
|
I(n): 56.42 flops/byte
|
||||||
W(n): 36740000.00 flops
|
W(n): 36740000.00 flops
|
||||||
T(n): 4261088.00 cycles
|
T(n): 4906050.00 cycles
|
||||||
P(n): 8.62 flops/cycle
|
P(n): 7.49 flops/cycle
|
||||||
|
|
||||||
=== N_P=100 N_ITER=200 ===
|
=== N_P=100 N_ITER=200 ===
|
||||||
W(n) per iteration: 727400.00 flops
|
W(n) per iteration: 727400.00 flops
|
||||||
Q(n) per iteration: 6456 bytes
|
Q(n) per iteration: 6456 bytes
|
||||||
I(n): 112.67 flops/byte
|
I(n): 112.67 flops/byte
|
||||||
W(n): 145480000.00 flops
|
W(n): 145480000.00 flops
|
||||||
T(n): 12455221.00 cycles
|
T(n): 14798538.00 cycles
|
||||||
P(n): 11.68 flops/cycle
|
P(n): 9.83 flops/cycle
|
||||||
|
|
||||||
=== N_P=200 N_ITER=200 ===
|
=== N_P=200 N_ITER=200 ===
|
||||||
W(n) per iteration: 2894800.00 flops
|
W(n) per iteration: 2894800.00 flops
|
||||||
Q(n) per iteration: 12856 bytes
|
Q(n) per iteration: 12856 bytes
|
||||||
I(n): 225.17 flops/byte
|
I(n): 225.17 flops/byte
|
||||||
W(n): 578960000.00 flops
|
W(n): 578960000.00 flops
|
||||||
T(n): 40661000.00 cycles
|
T(n): 48817384.00 cycles
|
||||||
P(n): 14.24 flops/cycle
|
P(n): 11.86 flops/cycle
|
||||||
|
|
||||||
=== N_P=500 N_ITER=200 ===
|
=== N_P=500 N_ITER=200 ===
|
||||||
W(n) per iteration: 18037000.00 flops
|
W(n) per iteration: 18037000.00 flops
|
||||||
Q(n) per iteration: 32056 bytes
|
Q(n) per iteration: 32056 bytes
|
||||||
I(n): 562.67 flops/byte
|
I(n): 562.67 flops/byte
|
||||||
W(n): 3607399936.00 flops
|
W(n): 3607399936.00 flops
|
||||||
T(n): 226296576.00 cycles
|
T(n): 276943584.00 cycles
|
||||||
P(n): 15.94 flops/cycle
|
P(n): 13.03 flops/cycle
|
||||||
|
|
||||||
=== N_P=1000 N_ITER=200 ===
|
=== N_P=1000 N_ITER=200 ===
|
||||||
W(n) per iteration: 72074000.00 flops
|
W(n) per iteration: 72074000.00 flops
|
||||||
Q(n) per iteration: 64056 bytes
|
Q(n) per iteration: 64056 bytes
|
||||||
I(n): 1125.17 flops/byte
|
I(n): 1125.17 flops/byte
|
||||||
W(n): 14414799872.00 flops
|
W(n): 14414799872.00 flops
|
||||||
T(n): 859257920.00 cycles
|
T(n): 1052295168.00 cycles
|
||||||
P(n): 16.78 flops/cycle
|
P(n): 13.70 flops/cycle
|
||||||
|
|
||||||
=== N_P=2000 N_ITER=200 ===
|
=== N_P=2000 N_ITER=200 ===
|
||||||
W(n) per iteration: 288148000.00 flops
|
W(n) per iteration: 288148000.00 flops
|
||||||
Q(n) per iteration: 128056 bytes
|
Q(n) per iteration: 128056 bytes
|
||||||
I(n): 2250.17 flops/byte
|
I(n): 2250.17 flops/byte
|
||||||
W(n): 57629601792.00 flops
|
W(n): 57629601792.00 flops
|
||||||
T(n): 3344503808.00 cycles
|
T(n): 4133724672.00 cycles
|
||||||
P(n): 17.23 flops/cycle
|
P(n): 13.94 flops/cycle
|
||||||
|
|
||||||
=== N_P=5000 N_ITER=200 ===
|
=== N_P=5000 N_ITER=200 ===
|
||||||
W(n) per iteration: 1800369920.00 flops
|
W(n) per iteration: 1800369920.00 flops
|
||||||
Q(n) per iteration: 320056 bytes
|
Q(n) per iteration: 320056 bytes
|
||||||
I(n): 5625.17 flops/byte
|
I(n): 5625.17 flops/byte
|
||||||
W(n): 360073986048.00 flops
|
W(n): 360073986048.00 flops
|
||||||
T(n): 20797153280.00 cycles
|
T(n): 25570220032.00 cycles
|
||||||
P(n): 17.31 flops/cycle
|
P(n): 14.08 flops/cycle
|
||||||
|
|
||||||
=== N_P=10000 N_ITER=200 ===
|
=== N_P=10000 N_ITER=200 ===
|
||||||
W(n) per iteration: 2905772800.00 flops
|
W(n) per iteration: 2905772800.00 flops
|
||||||
Q(n) per iteration: 640056 bytes
|
Q(n) per iteration: 640056 bytes
|
||||||
I(n): 4539.87 flops/byte
|
I(n): 4539.87 flops/byte
|
||||||
W(n): 581154570240.00 flops
|
W(n): 581154570240.00 flops
|
||||||
T(n): 82334916608.00 cycles
|
T(n): 101490999296.00 cycles
|
||||||
P(n): 7.06 flops/cycle
|
P(n): 5.73 flops/cycle
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,66 @@
|
|||||||
|
rm -f main_* run_tests *.o *.s variants/*.s variants/*.o headers/*.s headers/*.o
|
||||||
|
/usr/bin/g++ main-float.cpp ./variants/variant_float_inlining_SoA_AVX512_polyexp_fastinvsqrt_expfix.cpp -o main_float_inlining_SoA_AVX512_polyexp_fastinvsqrt_expfix -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1
|
||||||
|
=== N_P=50 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 183700.00 flops
|
||||||
|
Q(n) per iteration: 3256 bytes
|
||||||
|
I(n): 56.42 flops/byte
|
||||||
|
W(n): 36740000.00 flops
|
||||||
|
T(n): 4896082.00 cycles
|
||||||
|
P(n): 7.50 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=100 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 727400.00 flops
|
||||||
|
Q(n) per iteration: 6456 bytes
|
||||||
|
I(n): 112.67 flops/byte
|
||||||
|
W(n): 145480000.00 flops
|
||||||
|
T(n): 14589518.00 cycles
|
||||||
|
P(n): 9.97 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=200 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 2894800.00 flops
|
||||||
|
Q(n) per iteration: 12856 bytes
|
||||||
|
I(n): 225.17 flops/byte
|
||||||
|
W(n): 578960000.00 flops
|
||||||
|
T(n): 48579536.00 cycles
|
||||||
|
P(n): 11.92 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=500 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 18037000.00 flops
|
||||||
|
Q(n) per iteration: 32056 bytes
|
||||||
|
I(n): 562.67 flops/byte
|
||||||
|
W(n): 3607399936.00 flops
|
||||||
|
T(n): 275277376.00 cycles
|
||||||
|
P(n): 13.10 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=1000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 72074000.00 flops
|
||||||
|
Q(n) per iteration: 64056 bytes
|
||||||
|
I(n): 1125.17 flops/byte
|
||||||
|
W(n): 14414799872.00 flops
|
||||||
|
T(n): 1050094400.00 cycles
|
||||||
|
P(n): 13.73 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=2000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 288148000.00 flops
|
||||||
|
Q(n) per iteration: 128056 bytes
|
||||||
|
I(n): 2250.17 flops/byte
|
||||||
|
W(n): 57629601792.00 flops
|
||||||
|
T(n): 4110344448.00 cycles
|
||||||
|
P(n): 14.02 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=5000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 1800369920.00 flops
|
||||||
|
Q(n) per iteration: 320056 bytes
|
||||||
|
I(n): 5625.17 flops/byte
|
||||||
|
W(n): 360073986048.00 flops
|
||||||
|
T(n): 25639516160.00 cycles
|
||||||
|
P(n): 14.04 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=10000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 2905772800.00 flops
|
||||||
|
Q(n) per iteration: 640056 bytes
|
||||||
|
I(n): 4539.87 flops/byte
|
||||||
|
W(n): 581154570240.00 flops
|
||||||
|
T(n): 101213003776.00 cycles
|
||||||
|
P(n): 5.74 flops/cycle
|
||||||
|
|
||||||
@@ -1,58 +1,66 @@
|
|||||||
rm -f main_* run_tests *.o *.s variants/*.s variants/*.o headers/*.s headers/*.o
|
rm -f main_* run_tests *.o *.s variants/*.s variants/*.o headers/*.s headers/*.o
|
||||||
/usr/bin/g++ main-float.cpp ./variants/variant_float_inlining_SoA_AVX512_polyexp_moreavx.cpp -o main_float_inlining_SoA_AVX512_polyexp_moreavx -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1
|
/usr/bin/g++ main-float.cpp ./variants/variant_float_inlining_SoA_AVX512_polyexp_moreavx_expfix.cpp -o main_float_inlining_SoA_AVX512_polyexp_moreavx_expfix -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1
|
||||||
=== N_P=50 N_ITER=200 ===
|
=== N_P=50 N_ITER=200 ===
|
||||||
W(n) per iteration: 183700.00 flops
|
W(n) per iteration: 183700.00 flops
|
||||||
Q(n) per iteration: 3256 bytes
|
Q(n) per iteration: 3256 bytes
|
||||||
I(n): 56.42 flops/byte
|
I(n): 56.42 flops/byte
|
||||||
W(n): 36740000.00 flops
|
W(n): 36740000.00 flops
|
||||||
T(n): 3667923.00 cycles
|
T(n): 4444855.00 cycles
|
||||||
P(n): 10.02 flops/cycle
|
P(n): 8.27 flops/cycle
|
||||||
|
|
||||||
=== N_P=100 N_ITER=200 ===
|
=== N_P=100 N_ITER=200 ===
|
||||||
W(n) per iteration: 727400.00 flops
|
W(n) per iteration: 727400.00 flops
|
||||||
Q(n) per iteration: 6456 bytes
|
Q(n) per iteration: 6456 bytes
|
||||||
I(n): 112.67 flops/byte
|
I(n): 112.67 flops/byte
|
||||||
W(n): 145480000.00 flops
|
W(n): 145480000.00 flops
|
||||||
T(n): 11422578.00 cycles
|
T(n): 13834708.00 cycles
|
||||||
P(n): 12.74 flops/cycle
|
P(n): 10.52 flops/cycle
|
||||||
|
|
||||||
=== N_P=200 N_ITER=200 ===
|
=== N_P=200 N_ITER=200 ===
|
||||||
W(n) per iteration: 2894800.00 flops
|
W(n) per iteration: 2894800.00 flops
|
||||||
Q(n) per iteration: 12856 bytes
|
Q(n) per iteration: 12856 bytes
|
||||||
I(n): 225.17 flops/byte
|
I(n): 225.17 flops/byte
|
||||||
W(n): 578960000.00 flops
|
W(n): 578960000.00 flops
|
||||||
T(n): 37820328.00 cycles
|
T(n): 47410956.00 cycles
|
||||||
P(n): 15.31 flops/cycle
|
P(n): 12.21 flops/cycle
|
||||||
|
|
||||||
=== N_P=500 N_ITER=200 ===
|
=== N_P=500 N_ITER=200 ===
|
||||||
W(n) per iteration: 18037000.00 flops
|
W(n) per iteration: 18037000.00 flops
|
||||||
Q(n) per iteration: 32056 bytes
|
Q(n) per iteration: 32056 bytes
|
||||||
I(n): 562.67 flops/byte
|
I(n): 562.67 flops/byte
|
||||||
W(n): 3607399936.00 flops
|
W(n): 3607399936.00 flops
|
||||||
T(n): 216471376.00 cycles
|
T(n): 276381408.00 cycles
|
||||||
P(n): 16.66 flops/cycle
|
P(n): 13.05 flops/cycle
|
||||||
|
|
||||||
=== N_P=1000 N_ITER=200 ===
|
=== N_P=1000 N_ITER=200 ===
|
||||||
W(n) per iteration: 72074000.00 flops
|
W(n) per iteration: 72074000.00 flops
|
||||||
Q(n) per iteration: 64056 bytes
|
Q(n) per iteration: 64056 bytes
|
||||||
I(n): 1125.17 flops/byte
|
I(n): 1125.17 flops/byte
|
||||||
W(n): 14414799872.00 flops
|
W(n): 14414799872.00 flops
|
||||||
T(n): 832166400.00 cycles
|
T(n): 1067362496.00 cycles
|
||||||
P(n): 17.32 flops/cycle
|
P(n): 13.51 flops/cycle
|
||||||
|
|
||||||
=== N_P=2000 N_ITER=200 ===
|
=== N_P=2000 N_ITER=200 ===
|
||||||
W(n) per iteration: 288148000.00 flops
|
W(n) per iteration: 288148000.00 flops
|
||||||
Q(n) per iteration: 128056 bytes
|
Q(n) per iteration: 128056 bytes
|
||||||
I(n): 2250.17 flops/byte
|
I(n): 2250.17 flops/byte
|
||||||
W(n): 57629601792.00 flops
|
W(n): 57629601792.00 flops
|
||||||
T(n): 3253410304.00 cycles
|
T(n): 4156325376.00 cycles
|
||||||
P(n): 17.71 flops/cycle
|
P(n): 13.87 flops/cycle
|
||||||
|
|
||||||
=== N_P=5000 N_ITER=200 ===
|
=== N_P=5000 N_ITER=200 ===
|
||||||
W(n) per iteration: 1800369920.00 flops
|
W(n) per iteration: 1800369920.00 flops
|
||||||
Q(n) per iteration: 320056 bytes
|
Q(n) per iteration: 320056 bytes
|
||||||
I(n): 5625.17 flops/byte
|
I(n): 5625.17 flops/byte
|
||||||
W(n): 360073986048.00 flops
|
W(n): 360073986048.00 flops
|
||||||
T(n): 20200312832.00 cycles
|
T(n): 26170245120.00 cycles
|
||||||
P(n): 17.83 flops/cycle
|
P(n): 13.76 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=10000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 2905772800.00 flops
|
||||||
|
Q(n) per iteration: 640056 bytes
|
||||||
|
I(n): 4539.87 flops/byte
|
||||||
|
W(n): 581154570240.00 flops
|
||||||
|
T(n): 104163885056.00 cycles
|
||||||
|
P(n): 5.58 flops/cycle
|
||||||
|
|
||||||
|
|||||||
@@ -1,66 +1,66 @@
|
|||||||
rm -f main_* run_tests *.o *.s variants/*.s variants/*.o headers/*.s headers/*.o
|
rm -f main_* run_tests *.o *.s variants/*.s variants/*.o headers/*.s headers/*.o
|
||||||
/usr/bin/g++ main-float.cpp ./variants/variant_float_inlining_SoA_AVX512_polyexp_moreavx.cpp -o main_float_inlining_SoA_AVX512_polyexp_moreavx -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1
|
/usr/bin/g++ main-float.cpp ./variants/variant_float_inlining_SoA_AVX512_polyexp_moreavx_expfix.cpp -o main_float_inlining_SoA_AVX512_polyexp_moreavx_expfix -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1
|
||||||
=== N_P=50 N_ITER=200 ===
|
=== N_P=50 N_ITER=200 ===
|
||||||
W(n) per iteration: 183700.00 flops
|
W(n) per iteration: 183700.00 flops
|
||||||
Q(n) per iteration: 3256 bytes
|
Q(n) per iteration: 3256 bytes
|
||||||
I(n): 56.42 flops/byte
|
I(n): 56.42 flops/byte
|
||||||
W(n): 36740000.00 flops
|
W(n): 36740000.00 flops
|
||||||
T(n): 3700145.00 cycles
|
T(n): 4415419.00 cycles
|
||||||
P(n): 9.93 flops/cycle
|
P(n): 8.32 flops/cycle
|
||||||
|
|
||||||
=== N_P=100 N_ITER=200 ===
|
=== N_P=100 N_ITER=200 ===
|
||||||
W(n) per iteration: 727400.00 flops
|
W(n) per iteration: 727400.00 flops
|
||||||
Q(n) per iteration: 6456 bytes
|
Q(n) per iteration: 6456 bytes
|
||||||
I(n): 112.67 flops/byte
|
I(n): 112.67 flops/byte
|
||||||
W(n): 145480000.00 flops
|
W(n): 145480000.00 flops
|
||||||
T(n): 11292105.00 cycles
|
T(n): 13731945.00 cycles
|
||||||
P(n): 12.88 flops/cycle
|
P(n): 10.59 flops/cycle
|
||||||
|
|
||||||
=== N_P=200 N_ITER=200 ===
|
=== N_P=200 N_ITER=200 ===
|
||||||
W(n) per iteration: 2894800.00 flops
|
W(n) per iteration: 2894800.00 flops
|
||||||
Q(n) per iteration: 12856 bytes
|
Q(n) per iteration: 12856 bytes
|
||||||
I(n): 225.17 flops/byte
|
I(n): 225.17 flops/byte
|
||||||
W(n): 578960000.00 flops
|
W(n): 578960000.00 flops
|
||||||
T(n): 38161324.00 cycles
|
T(n): 47216112.00 cycles
|
||||||
P(n): 15.17 flops/cycle
|
P(n): 12.26 flops/cycle
|
||||||
|
|
||||||
=== N_P=500 N_ITER=200 ===
|
=== N_P=500 N_ITER=200 ===
|
||||||
W(n) per iteration: 18037000.00 flops
|
W(n) per iteration: 18037000.00 flops
|
||||||
Q(n) per iteration: 32056 bytes
|
Q(n) per iteration: 32056 bytes
|
||||||
I(n): 562.67 flops/byte
|
I(n): 562.67 flops/byte
|
||||||
W(n): 3607399936.00 flops
|
W(n): 3607399936.00 flops
|
||||||
T(n): 218794224.00 cycles
|
T(n): 273902208.00 cycles
|
||||||
P(n): 16.49 flops/cycle
|
P(n): 13.17 flops/cycle
|
||||||
|
|
||||||
=== N_P=1000 N_ITER=200 ===
|
=== N_P=1000 N_ITER=200 ===
|
||||||
W(n) per iteration: 72074000.00 flops
|
W(n) per iteration: 72074000.00 flops
|
||||||
Q(n) per iteration: 64056 bytes
|
Q(n) per iteration: 64056 bytes
|
||||||
I(n): 1125.17 flops/byte
|
I(n): 1125.17 flops/byte
|
||||||
W(n): 14414799872.00 flops
|
W(n): 14414799872.00 flops
|
||||||
T(n): 840880000.00 cycles
|
T(n): 1066031616.00 cycles
|
||||||
P(n): 17.14 flops/cycle
|
P(n): 13.52 flops/cycle
|
||||||
|
|
||||||
=== N_P=2000 N_ITER=200 ===
|
=== N_P=2000 N_ITER=200 ===
|
||||||
W(n) per iteration: 288148000.00 flops
|
W(n) per iteration: 288148000.00 flops
|
||||||
Q(n) per iteration: 128056 bytes
|
Q(n) per iteration: 128056 bytes
|
||||||
I(n): 2250.17 flops/byte
|
I(n): 2250.17 flops/byte
|
||||||
W(n): 57629601792.00 flops
|
W(n): 57629601792.00 flops
|
||||||
T(n): 3292569344.00 cycles
|
T(n): 4168480512.00 cycles
|
||||||
P(n): 17.50 flops/cycle
|
P(n): 13.83 flops/cycle
|
||||||
|
|
||||||
=== N_P=5000 N_ITER=200 ===
|
=== N_P=5000 N_ITER=200 ===
|
||||||
W(n) per iteration: 1800369920.00 flops
|
W(n) per iteration: 1800369920.00 flops
|
||||||
Q(n) per iteration: 320056 bytes
|
Q(n) per iteration: 320056 bytes
|
||||||
I(n): 5625.17 flops/byte
|
I(n): 5625.17 flops/byte
|
||||||
W(n): 360073986048.00 flops
|
W(n): 360073986048.00 flops
|
||||||
T(n): 20442466304.00 cycles
|
T(n): 25959776256.00 cycles
|
||||||
P(n): 17.61 flops/cycle
|
P(n): 13.87 flops/cycle
|
||||||
|
|
||||||
=== N_P=10000 N_ITER=200 ===
|
=== N_P=10000 N_ITER=200 ===
|
||||||
W(n) per iteration: 2905772800.00 flops
|
W(n) per iteration: 2905772800.00 flops
|
||||||
Q(n) per iteration: 640056 bytes
|
Q(n) per iteration: 640056 bytes
|
||||||
I(n): 4539.87 flops/byte
|
I(n): 4539.87 flops/byte
|
||||||
W(n): 581154570240.00 flops
|
W(n): 581154570240.00 flops
|
||||||
T(n): 81447813120.00 cycles
|
T(n): 103256596480.00 cycles
|
||||||
P(n): 7.14 flops/cycle
|
P(n): 5.63 flops/cycle
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,66 @@
|
|||||||
|
rm -f main_* run_tests *.o *.s variants/*.s variants/*.o headers/*.s headers/*.o
|
||||||
|
/usr/bin/g++ main-float.cpp ./variants/variant_float_inlining_SoA_AVX512_polyexp_moreavx_expfix.cpp -o main_float_inlining_SoA_AVX512_polyexp_moreavx_expfix -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1
|
||||||
|
=== N_P=50 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 183700.00 flops
|
||||||
|
Q(n) per iteration: 3256 bytes
|
||||||
|
I(n): 56.42 flops/byte
|
||||||
|
W(n): 36740000.00 flops
|
||||||
|
T(n): 4421310.50 cycles
|
||||||
|
P(n): 8.31 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=100 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 727400.00 flops
|
||||||
|
Q(n) per iteration: 6456 bytes
|
||||||
|
I(n): 112.67 flops/byte
|
||||||
|
W(n): 145480000.00 flops
|
||||||
|
T(n): 13851305.00 cycles
|
||||||
|
P(n): 10.50 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=200 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 2894800.00 flops
|
||||||
|
Q(n) per iteration: 12856 bytes
|
||||||
|
I(n): 225.17 flops/byte
|
||||||
|
W(n): 578960000.00 flops
|
||||||
|
T(n): 47453300.00 cycles
|
||||||
|
P(n): 12.20 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=500 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 18037000.00 flops
|
||||||
|
Q(n) per iteration: 32056 bytes
|
||||||
|
I(n): 562.67 flops/byte
|
||||||
|
W(n): 3607399936.00 flops
|
||||||
|
T(n): 275350432.00 cycles
|
||||||
|
P(n): 13.10 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=1000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 72074000.00 flops
|
||||||
|
Q(n) per iteration: 64056 bytes
|
||||||
|
I(n): 1125.17 flops/byte
|
||||||
|
W(n): 14414799872.00 flops
|
||||||
|
T(n): 1059425216.00 cycles
|
||||||
|
P(n): 13.61 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=2000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 288148000.00 flops
|
||||||
|
Q(n) per iteration: 128056 bytes
|
||||||
|
I(n): 2250.17 flops/byte
|
||||||
|
W(n): 57629601792.00 flops
|
||||||
|
T(n): 4161480448.00 cycles
|
||||||
|
P(n): 13.85 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=5000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 1800369920.00 flops
|
||||||
|
Q(n) per iteration: 320056 bytes
|
||||||
|
I(n): 5625.17 flops/byte
|
||||||
|
W(n): 360073986048.00 flops
|
||||||
|
T(n): 25909958656.00 cycles
|
||||||
|
P(n): 13.90 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=10000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 2905772800.00 flops
|
||||||
|
Q(n) per iteration: 640056 bytes
|
||||||
|
I(n): 4539.87 flops/byte
|
||||||
|
W(n): 581154570240.00 flops
|
||||||
|
T(n): 102891044864.00 cycles
|
||||||
|
P(n): 5.65 flops/cycle
|
||||||
|
|
||||||
@@ -1,58 +1,66 @@
|
|||||||
rm -f main_* run_tests *.o *.s variants/*.s variants/*.o headers/*.s headers/*.o
|
rm -f main_* run_tests *.o *.s variants/*.s variants/*.o headers/*.s headers/*.o
|
||||||
/usr/bin/g++ main-float.cpp ./variants/variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2.cpp -o main_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2 -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1
|
/usr/bin/g++ main-float.cpp ./variants/variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_expfix.cpp -o main_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_expfix -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1
|
||||||
=== N_P=50 N_ITER=200 ===
|
=== N_P=50 N_ITER=200 ===
|
||||||
W(n) per iteration: 183700.00 flops
|
W(n) per iteration: 183700.00 flops
|
||||||
Q(n) per iteration: 3256 bytes
|
Q(n) per iteration: 3256 bytes
|
||||||
I(n): 56.42 flops/byte
|
I(n): 56.42 flops/byte
|
||||||
W(n): 36740000.00 flops
|
W(n): 36740000.00 flops
|
||||||
T(n): 3477458.00 cycles
|
T(n): 4116743.00 cycles
|
||||||
P(n): 10.57 flops/cycle
|
P(n): 8.92 flops/cycle
|
||||||
|
|
||||||
=== N_P=100 N_ITER=200 ===
|
=== N_P=100 N_ITER=200 ===
|
||||||
W(n) per iteration: 727400.00 flops
|
W(n) per iteration: 727400.00 flops
|
||||||
Q(n) per iteration: 6456 bytes
|
Q(n) per iteration: 6456 bytes
|
||||||
I(n): 112.67 flops/byte
|
I(n): 112.67 flops/byte
|
||||||
W(n): 145480000.00 flops
|
W(n): 145480000.00 flops
|
||||||
T(n): 11784472.00 cycles
|
T(n): 14193060.00 cycles
|
||||||
P(n): 12.35 flops/cycle
|
P(n): 10.25 flops/cycle
|
||||||
|
|
||||||
=== N_P=200 N_ITER=200 ===
|
=== N_P=200 N_ITER=200 ===
|
||||||
W(n) per iteration: 2894800.00 flops
|
W(n) per iteration: 2894800.00 flops
|
||||||
Q(n) per iteration: 12856 bytes
|
Q(n) per iteration: 12856 bytes
|
||||||
I(n): 225.17 flops/byte
|
I(n): 225.17 flops/byte
|
||||||
W(n): 578960000.00 flops
|
W(n): 578960000.00 flops
|
||||||
T(n): 38291872.00 cycles
|
T(n): 46275016.00 cycles
|
||||||
P(n): 15.12 flops/cycle
|
P(n): 12.51 flops/cycle
|
||||||
|
|
||||||
=== N_P=500 N_ITER=200 ===
|
=== N_P=500 N_ITER=200 ===
|
||||||
W(n) per iteration: 18037000.00 flops
|
W(n) per iteration: 18037000.00 flops
|
||||||
Q(n) per iteration: 32056 bytes
|
Q(n) per iteration: 32056 bytes
|
||||||
I(n): 562.67 flops/byte
|
I(n): 562.67 flops/byte
|
||||||
W(n): 3607399936.00 flops
|
W(n): 3607399936.00 flops
|
||||||
T(n): 202935328.00 cycles
|
T(n): 250446432.00 cycles
|
||||||
P(n): 17.78 flops/cycle
|
P(n): 14.40 flops/cycle
|
||||||
|
|
||||||
=== N_P=1000 N_ITER=200 ===
|
=== N_P=1000 N_ITER=200 ===
|
||||||
W(n) per iteration: 72074000.00 flops
|
W(n) per iteration: 72074000.00 flops
|
||||||
Q(n) per iteration: 64056 bytes
|
Q(n) per iteration: 64056 bytes
|
||||||
I(n): 1125.17 flops/byte
|
I(n): 1125.17 flops/byte
|
||||||
W(n): 14414799872.00 flops
|
W(n): 14414799872.00 flops
|
||||||
T(n): 792025088.00 cycles
|
T(n): 977844992.00 cycles
|
||||||
P(n): 18.20 flops/cycle
|
P(n): 14.74 flops/cycle
|
||||||
|
|
||||||
=== N_P=2000 N_ITER=200 ===
|
=== N_P=2000 N_ITER=200 ===
|
||||||
W(n) per iteration: 288148000.00 flops
|
W(n) per iteration: 288148000.00 flops
|
||||||
Q(n) per iteration: 128056 bytes
|
Q(n) per iteration: 128056 bytes
|
||||||
I(n): 2250.17 flops/byte
|
I(n): 2250.17 flops/byte
|
||||||
W(n): 57629601792.00 flops
|
W(n): 57629601792.00 flops
|
||||||
T(n): 3083133952.00 cycles
|
T(n): 3811610624.00 cycles
|
||||||
P(n): 18.69 flops/cycle
|
P(n): 15.12 flops/cycle
|
||||||
|
|
||||||
=== N_P=5000 N_ITER=200 ===
|
=== N_P=5000 N_ITER=200 ===
|
||||||
W(n) per iteration: 1800369920.00 flops
|
W(n) per iteration: 1800369920.00 flops
|
||||||
Q(n) per iteration: 320056 bytes
|
Q(n) per iteration: 320056 bytes
|
||||||
I(n): 5625.17 flops/byte
|
I(n): 5625.17 flops/byte
|
||||||
W(n): 360073986048.00 flops
|
W(n): 360073986048.00 flops
|
||||||
T(n): 19033051136.00 cycles
|
T(n): 23616888832.00 cycles
|
||||||
P(n): 18.92 flops/cycle
|
P(n): 15.25 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=10000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 2905772800.00 flops
|
||||||
|
Q(n) per iteration: 640056 bytes
|
||||||
|
I(n): 4539.87 flops/byte
|
||||||
|
W(n): 581154570240.00 flops
|
||||||
|
T(n): 94000291840.00 cycles
|
||||||
|
P(n): 6.18 flops/cycle
|
||||||
|
|
||||||
|
|||||||
@@ -1,66 +1,66 @@
|
|||||||
rm -f main_* run_tests *.o *.s variants/*.s variants/*.o headers/*.s headers/*.o
|
rm -f main_* run_tests *.o *.s variants/*.s variants/*.o headers/*.s headers/*.o
|
||||||
/usr/bin/g++ main-float.cpp ./variants/variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2.cpp -o main_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2 -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1
|
/usr/bin/g++ main-float.cpp ./variants/variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_expfix.cpp -o main_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_expfix -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1
|
||||||
=== N_P=50 N_ITER=200 ===
|
=== N_P=50 N_ITER=200 ===
|
||||||
W(n) per iteration: 183700.00 flops
|
W(n) per iteration: 183700.00 flops
|
||||||
Q(n) per iteration: 3256 bytes
|
Q(n) per iteration: 3256 bytes
|
||||||
I(n): 56.42 flops/byte
|
I(n): 56.42 flops/byte
|
||||||
W(n): 36740000.00 flops
|
W(n): 36740000.00 flops
|
||||||
T(n): 3489274.50 cycles
|
T(n): 4130377.00 cycles
|
||||||
P(n): 10.53 flops/cycle
|
P(n): 8.90 flops/cycle
|
||||||
|
|
||||||
=== N_P=100 N_ITER=200 ===
|
=== N_P=100 N_ITER=200 ===
|
||||||
W(n) per iteration: 727400.00 flops
|
W(n) per iteration: 727400.00 flops
|
||||||
Q(n) per iteration: 6456 bytes
|
Q(n) per iteration: 6456 bytes
|
||||||
I(n): 112.67 flops/byte
|
I(n): 112.67 flops/byte
|
||||||
W(n): 145480000.00 flops
|
W(n): 145480000.00 flops
|
||||||
T(n): 11797675.00 cycles
|
T(n): 14179700.00 cycles
|
||||||
P(n): 12.33 flops/cycle
|
P(n): 10.26 flops/cycle
|
||||||
|
|
||||||
=== N_P=200 N_ITER=200 ===
|
=== N_P=200 N_ITER=200 ===
|
||||||
W(n) per iteration: 2894800.00 flops
|
W(n) per iteration: 2894800.00 flops
|
||||||
Q(n) per iteration: 12856 bytes
|
Q(n) per iteration: 12856 bytes
|
||||||
I(n): 225.17 flops/byte
|
I(n): 225.17 flops/byte
|
||||||
W(n): 578960000.00 flops
|
W(n): 578960000.00 flops
|
||||||
T(n): 38045456.00 cycles
|
T(n): 46318220.00 cycles
|
||||||
P(n): 15.22 flops/cycle
|
P(n): 12.50 flops/cycle
|
||||||
|
|
||||||
=== N_P=500 N_ITER=200 ===
|
=== N_P=500 N_ITER=200 ===
|
||||||
W(n) per iteration: 18037000.00 flops
|
W(n) per iteration: 18037000.00 flops
|
||||||
Q(n) per iteration: 32056 bytes
|
Q(n) per iteration: 32056 bytes
|
||||||
I(n): 562.67 flops/byte
|
I(n): 562.67 flops/byte
|
||||||
W(n): 3607399936.00 flops
|
W(n): 3607399936.00 flops
|
||||||
T(n): 203912944.00 cycles
|
T(n): 250998336.00 cycles
|
||||||
P(n): 17.69 flops/cycle
|
P(n): 14.37 flops/cycle
|
||||||
|
|
||||||
=== N_P=1000 N_ITER=200 ===
|
=== N_P=1000 N_ITER=200 ===
|
||||||
W(n) per iteration: 72074000.00 flops
|
W(n) per iteration: 72074000.00 flops
|
||||||
Q(n) per iteration: 64056 bytes
|
Q(n) per iteration: 64056 bytes
|
||||||
I(n): 1125.17 flops/byte
|
I(n): 1125.17 flops/byte
|
||||||
W(n): 14414799872.00 flops
|
W(n): 14414799872.00 flops
|
||||||
T(n): 794322688.00 cycles
|
T(n): 982180672.00 cycles
|
||||||
P(n): 18.15 flops/cycle
|
P(n): 14.68 flops/cycle
|
||||||
|
|
||||||
=== N_P=2000 N_ITER=200 ===
|
=== N_P=2000 N_ITER=200 ===
|
||||||
W(n) per iteration: 288148000.00 flops
|
W(n) per iteration: 288148000.00 flops
|
||||||
Q(n) per iteration: 128056 bytes
|
Q(n) per iteration: 128056 bytes
|
||||||
I(n): 2250.17 flops/byte
|
I(n): 2250.17 flops/byte
|
||||||
W(n): 57629601792.00 flops
|
W(n): 57629601792.00 flops
|
||||||
T(n): 3086995712.00 cycles
|
T(n): 3805426944.00 cycles
|
||||||
P(n): 18.67 flops/cycle
|
P(n): 15.14 flops/cycle
|
||||||
|
|
||||||
=== N_P=5000 N_ITER=200 ===
|
=== N_P=5000 N_ITER=200 ===
|
||||||
W(n) per iteration: 1800369920.00 flops
|
W(n) per iteration: 1800369920.00 flops
|
||||||
Q(n) per iteration: 320056 bytes
|
Q(n) per iteration: 320056 bytes
|
||||||
I(n): 5625.17 flops/byte
|
I(n): 5625.17 flops/byte
|
||||||
W(n): 360073986048.00 flops
|
W(n): 360073986048.00 flops
|
||||||
T(n): 19067494400.00 cycles
|
T(n): 23592302592.00 cycles
|
||||||
P(n): 18.88 flops/cycle
|
P(n): 15.26 flops/cycle
|
||||||
|
|
||||||
=== N_P=10000 N_ITER=200 ===
|
=== N_P=10000 N_ITER=200 ===
|
||||||
W(n) per iteration: 2905772800.00 flops
|
W(n) per iteration: 2905772800.00 flops
|
||||||
Q(n) per iteration: 640056 bytes
|
Q(n) per iteration: 640056 bytes
|
||||||
I(n): 4539.87 flops/byte
|
I(n): 4539.87 flops/byte
|
||||||
W(n): 581154570240.00 flops
|
W(n): 581154570240.00 flops
|
||||||
T(n): 75557011456.00 cycles
|
T(n): 93937680384.00 cycles
|
||||||
P(n): 7.69 flops/cycle
|
P(n): 6.19 flops/cycle
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,66 @@
|
|||||||
|
rm -f main_* run_tests *.o *.s variants/*.s variants/*.o headers/*.s headers/*.o
|
||||||
|
/usr/bin/g++ main-float.cpp ./variants/variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_expfix.cpp -o main_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_expfix -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1
|
||||||
|
=== N_P=50 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 183700.00 flops
|
||||||
|
Q(n) per iteration: 3256 bytes
|
||||||
|
I(n): 56.42 flops/byte
|
||||||
|
W(n): 36740000.00 flops
|
||||||
|
T(n): 4107580.00 cycles
|
||||||
|
P(n): 8.94 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=100 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 727400.00 flops
|
||||||
|
Q(n) per iteration: 6456 bytes
|
||||||
|
I(n): 112.67 flops/byte
|
||||||
|
W(n): 145480000.00 flops
|
||||||
|
T(n): 14142018.00 cycles
|
||||||
|
P(n): 10.29 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=200 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 2894800.00 flops
|
||||||
|
Q(n) per iteration: 12856 bytes
|
||||||
|
I(n): 225.17 flops/byte
|
||||||
|
W(n): 578960000.00 flops
|
||||||
|
T(n): 46132236.00 cycles
|
||||||
|
P(n): 12.55 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=500 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 18037000.00 flops
|
||||||
|
Q(n) per iteration: 32056 bytes
|
||||||
|
I(n): 562.67 flops/byte
|
||||||
|
W(n): 3607399936.00 flops
|
||||||
|
T(n): 248790048.00 cycles
|
||||||
|
P(n): 14.50 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=1000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 72074000.00 flops
|
||||||
|
Q(n) per iteration: 64056 bytes
|
||||||
|
I(n): 1125.17 flops/byte
|
||||||
|
W(n): 14414799872.00 flops
|
||||||
|
T(n): 974417088.00 cycles
|
||||||
|
P(n): 14.79 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=2000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 288148000.00 flops
|
||||||
|
Q(n) per iteration: 128056 bytes
|
||||||
|
I(n): 2250.17 flops/byte
|
||||||
|
W(n): 57629601792.00 flops
|
||||||
|
T(n): 3791391744.00 cycles
|
||||||
|
P(n): 15.20 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=5000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 1800369920.00 flops
|
||||||
|
Q(n) per iteration: 320056 bytes
|
||||||
|
I(n): 5625.17 flops/byte
|
||||||
|
W(n): 360073986048.00 flops
|
||||||
|
T(n): 23488210944.00 cycles
|
||||||
|
P(n): 15.33 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=10000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 2905772800.00 flops
|
||||||
|
Q(n) per iteration: 640056 bytes
|
||||||
|
I(n): 4539.87 flops/byte
|
||||||
|
W(n): 581154570240.00 flops
|
||||||
|
T(n): 93195214848.00 cycles
|
||||||
|
P(n): 6.24 flops/cycle
|
||||||
|
|
||||||
@@ -1,58 +1,66 @@
|
|||||||
rm -f main_* run_tests *.o *.s variants/*.s variants/*.o headers/*.s headers/*.o
|
rm -f main_* run_tests *.o *.s variants/*.s variants/*.o headers/*.s headers/*.o
|
||||||
/usr/bin/g++ main-float.cpp ./variants/variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_moreilp.cpp -o main_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_moreilp -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1
|
/usr/bin/g++ main-float.cpp ./variants/variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_moreilp_expfix.cpp -o main_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_moreilp_expfix -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1
|
||||||
=== N_P=50 N_ITER=200 ===
|
=== N_P=50 N_ITER=200 ===
|
||||||
W(n) per iteration: 183700.00 flops
|
W(n) per iteration: 183700.00 flops
|
||||||
Q(n) per iteration: 3256 bytes
|
Q(n) per iteration: 3256 bytes
|
||||||
I(n): 56.42 flops/byte
|
I(n): 56.42 flops/byte
|
||||||
W(n): 36740000.00 flops
|
W(n): 36740000.00 flops
|
||||||
T(n): 3500766.25 cycles
|
T(n): 4119329.50 cycles
|
||||||
P(n): 10.49 flops/cycle
|
P(n): 8.92 flops/cycle
|
||||||
|
|
||||||
=== N_P=100 N_ITER=200 ===
|
=== N_P=100 N_ITER=200 ===
|
||||||
W(n) per iteration: 727400.00 flops
|
W(n) per iteration: 727400.00 flops
|
||||||
Q(n) per iteration: 6456 bytes
|
Q(n) per iteration: 6456 bytes
|
||||||
I(n): 112.67 flops/byte
|
I(n): 112.67 flops/byte
|
||||||
W(n): 145480000.00 flops
|
W(n): 145480000.00 flops
|
||||||
T(n): 11807499.00 cycles
|
T(n): 14140615.00 cycles
|
||||||
P(n): 12.32 flops/cycle
|
P(n): 10.29 flops/cycle
|
||||||
|
|
||||||
=== N_P=200 N_ITER=200 ===
|
=== N_P=200 N_ITER=200 ===
|
||||||
W(n) per iteration: 2894800.00 flops
|
W(n) per iteration: 2894800.00 flops
|
||||||
Q(n) per iteration: 12856 bytes
|
Q(n) per iteration: 12856 bytes
|
||||||
I(n): 225.17 flops/byte
|
I(n): 225.17 flops/byte
|
||||||
W(n): 578960000.00 flops
|
W(n): 578960000.00 flops
|
||||||
T(n): 38032600.00 cycles
|
T(n): 46104904.00 cycles
|
||||||
P(n): 15.22 flops/cycle
|
P(n): 12.56 flops/cycle
|
||||||
|
|
||||||
=== N_P=500 N_ITER=200 ===
|
=== N_P=500 N_ITER=200 ===
|
||||||
W(n) per iteration: 18037000.00 flops
|
W(n) per iteration: 18037000.00 flops
|
||||||
Q(n) per iteration: 32056 bytes
|
Q(n) per iteration: 32056 bytes
|
||||||
I(n): 562.67 flops/byte
|
I(n): 562.67 flops/byte
|
||||||
W(n): 3607399936.00 flops
|
W(n): 3607399936.00 flops
|
||||||
T(n): 204147360.00 cycles
|
T(n): 248777184.00 cycles
|
||||||
P(n): 17.67 flops/cycle
|
P(n): 14.50 flops/cycle
|
||||||
|
|
||||||
=== N_P=1000 N_ITER=200 ===
|
=== N_P=1000 N_ITER=200 ===
|
||||||
W(n) per iteration: 72074000.00 flops
|
W(n) per iteration: 72074000.00 flops
|
||||||
Q(n) per iteration: 64056 bytes
|
Q(n) per iteration: 64056 bytes
|
||||||
I(n): 1125.17 flops/byte
|
I(n): 1125.17 flops/byte
|
||||||
W(n): 14414799872.00 flops
|
W(n): 14414799872.00 flops
|
||||||
T(n): 791926400.00 cycles
|
T(n): 972575296.00 cycles
|
||||||
P(n): 18.20 flops/cycle
|
P(n): 14.82 flops/cycle
|
||||||
|
|
||||||
=== N_P=2000 N_ITER=200 ===
|
=== N_P=2000 N_ITER=200 ===
|
||||||
W(n) per iteration: 288148000.00 flops
|
W(n) per iteration: 288148000.00 flops
|
||||||
Q(n) per iteration: 128056 bytes
|
Q(n) per iteration: 128056 bytes
|
||||||
I(n): 2250.17 flops/byte
|
I(n): 2250.17 flops/byte
|
||||||
W(n): 57629601792.00 flops
|
W(n): 57629601792.00 flops
|
||||||
T(n): 3074645504.00 cycles
|
T(n): 3793779712.00 cycles
|
||||||
P(n): 18.74 flops/cycle
|
P(n): 15.19 flops/cycle
|
||||||
|
|
||||||
=== N_P=5000 N_ITER=200 ===
|
=== N_P=5000 N_ITER=200 ===
|
||||||
W(n) per iteration: 1800369920.00 flops
|
W(n) per iteration: 1800369920.00 flops
|
||||||
Q(n) per iteration: 320056 bytes
|
Q(n) per iteration: 320056 bytes
|
||||||
I(n): 5625.17 flops/byte
|
I(n): 5625.17 flops/byte
|
||||||
W(n): 360073986048.00 flops
|
W(n): 360073986048.00 flops
|
||||||
T(n): 19024320512.00 cycles
|
T(n): 23662673920.00 cycles
|
||||||
P(n): 18.93 flops/cycle
|
P(n): 15.22 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=10000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 2905772800.00 flops
|
||||||
|
Q(n) per iteration: 640056 bytes
|
||||||
|
I(n): 4539.87 flops/byte
|
||||||
|
W(n): 581154570240.00 flops
|
||||||
|
T(n): 93648879616.00 cycles
|
||||||
|
P(n): 6.21 flops/cycle
|
||||||
|
|
||||||
|
|||||||
@@ -1,66 +1,66 @@
|
|||||||
rm -f main_* run_tests *.o *.s variants/*.s variants/*.o headers/*.s headers/*.o
|
rm -f main_* run_tests *.o *.s variants/*.s variants/*.o headers/*.s headers/*.o
|
||||||
/usr/bin/g++ main-float.cpp ./variants/variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_moreilp.cpp -o main_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_moreilp -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1
|
/usr/bin/g++ main-float.cpp ./variants/variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_moreilp_expfix.cpp -o main_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_moreilp_expfix -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1
|
||||||
=== N_P=50 N_ITER=200 ===
|
=== N_P=50 N_ITER=200 ===
|
||||||
W(n) per iteration: 183700.00 flops
|
W(n) per iteration: 183700.00 flops
|
||||||
Q(n) per iteration: 3256 bytes
|
Q(n) per iteration: 3256 bytes
|
||||||
I(n): 56.42 flops/byte
|
I(n): 56.42 flops/byte
|
||||||
W(n): 36740000.00 flops
|
W(n): 36740000.00 flops
|
||||||
T(n): 3498589.50 cycles
|
T(n): 4131873.00 cycles
|
||||||
P(n): 10.50 flops/cycle
|
P(n): 8.89 flops/cycle
|
||||||
|
|
||||||
=== N_P=100 N_ITER=200 ===
|
=== N_P=100 N_ITER=200 ===
|
||||||
W(n) per iteration: 727400.00 flops
|
W(n) per iteration: 727400.00 flops
|
||||||
Q(n) per iteration: 6456 bytes
|
Q(n) per iteration: 6456 bytes
|
||||||
I(n): 112.67 flops/byte
|
I(n): 112.67 flops/byte
|
||||||
W(n): 145480000.00 flops
|
W(n): 145480000.00 flops
|
||||||
T(n): 11758110.00 cycles
|
T(n): 14207365.00 cycles
|
||||||
P(n): 12.37 flops/cycle
|
P(n): 10.24 flops/cycle
|
||||||
|
|
||||||
=== N_P=200 N_ITER=200 ===
|
=== N_P=200 N_ITER=200 ===
|
||||||
W(n) per iteration: 2894800.00 flops
|
W(n) per iteration: 2894800.00 flops
|
||||||
Q(n) per iteration: 12856 bytes
|
Q(n) per iteration: 12856 bytes
|
||||||
I(n): 225.17 flops/byte
|
I(n): 225.17 flops/byte
|
||||||
W(n): 578960000.00 flops
|
W(n): 578960000.00 flops
|
||||||
T(n): 37864020.00 cycles
|
T(n): 46157304.00 cycles
|
||||||
P(n): 15.29 flops/cycle
|
P(n): 12.54 flops/cycle
|
||||||
|
|
||||||
=== N_P=500 N_ITER=200 ===
|
=== N_P=500 N_ITER=200 ===
|
||||||
W(n) per iteration: 18037000.00 flops
|
W(n) per iteration: 18037000.00 flops
|
||||||
Q(n) per iteration: 32056 bytes
|
Q(n) per iteration: 32056 bytes
|
||||||
I(n): 562.67 flops/byte
|
I(n): 562.67 flops/byte
|
||||||
W(n): 3607399936.00 flops
|
W(n): 3607399936.00 flops
|
||||||
T(n): 202672640.00 cycles
|
T(n): 249512304.00 cycles
|
||||||
P(n): 17.80 flops/cycle
|
P(n): 14.46 flops/cycle
|
||||||
|
|
||||||
=== N_P=1000 N_ITER=200 ===
|
=== N_P=1000 N_ITER=200 ===
|
||||||
W(n) per iteration: 72074000.00 flops
|
W(n) per iteration: 72074000.00 flops
|
||||||
Q(n) per iteration: 64056 bytes
|
Q(n) per iteration: 64056 bytes
|
||||||
I(n): 1125.17 flops/byte
|
I(n): 1125.17 flops/byte
|
||||||
W(n): 14414799872.00 flops
|
W(n): 14414799872.00 flops
|
||||||
T(n): 790035264.00 cycles
|
T(n): 974145152.00 cycles
|
||||||
P(n): 18.25 flops/cycle
|
P(n): 14.80 flops/cycle
|
||||||
|
|
||||||
=== N_P=2000 N_ITER=200 ===
|
=== N_P=2000 N_ITER=200 ===
|
||||||
W(n) per iteration: 288148000.00 flops
|
W(n) per iteration: 288148000.00 flops
|
||||||
Q(n) per iteration: 128056 bytes
|
Q(n) per iteration: 128056 bytes
|
||||||
I(n): 2250.17 flops/byte
|
I(n): 2250.17 flops/byte
|
||||||
W(n): 57629601792.00 flops
|
W(n): 57629601792.00 flops
|
||||||
T(n): 3070306304.00 cycles
|
T(n): 3796545280.00 cycles
|
||||||
P(n): 18.77 flops/cycle
|
P(n): 15.18 flops/cycle
|
||||||
|
|
||||||
=== N_P=5000 N_ITER=200 ===
|
=== N_P=5000 N_ITER=200 ===
|
||||||
W(n) per iteration: 1800369920.00 flops
|
W(n) per iteration: 1800369920.00 flops
|
||||||
Q(n) per iteration: 320056 bytes
|
Q(n) per iteration: 320056 bytes
|
||||||
I(n): 5625.17 flops/byte
|
I(n): 5625.17 flops/byte
|
||||||
W(n): 360073986048.00 flops
|
W(n): 360073986048.00 flops
|
||||||
T(n): 18978818048.00 cycles
|
T(n): 23539767296.00 cycles
|
||||||
P(n): 18.97 flops/cycle
|
P(n): 15.30 flops/cycle
|
||||||
|
|
||||||
=== N_P=10000 N_ITER=200 ===
|
=== N_P=10000 N_ITER=200 ===
|
||||||
W(n) per iteration: 2905772800.00 flops
|
W(n) per iteration: 2905772800.00 flops
|
||||||
Q(n) per iteration: 640056 bytes
|
Q(n) per iteration: 640056 bytes
|
||||||
I(n): 4539.87 flops/byte
|
I(n): 4539.87 flops/byte
|
||||||
W(n): 581154570240.00 flops
|
W(n): 581154570240.00 flops
|
||||||
T(n): 75496284160.00 cycles
|
T(n): 93385080832.00 cycles
|
||||||
P(n): 7.70 flops/cycle
|
P(n): 6.22 flops/cycle
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,66 @@
|
|||||||
|
rm -f main_* run_tests *.o *.s variants/*.s variants/*.o headers/*.s headers/*.o
|
||||||
|
/usr/bin/g++ main-float.cpp ./variants/variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_moreilp_expfix.cpp -o main_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_moreilp_expfix -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1
|
||||||
|
=== N_P=50 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 183700.00 flops
|
||||||
|
Q(n) per iteration: 3256 bytes
|
||||||
|
I(n): 56.42 flops/byte
|
||||||
|
W(n): 36740000.00 flops
|
||||||
|
T(n): 4133901.25 cycles
|
||||||
|
P(n): 8.89 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=100 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 727400.00 flops
|
||||||
|
Q(n) per iteration: 6456 bytes
|
||||||
|
I(n): 112.67 flops/byte
|
||||||
|
W(n): 145480000.00 flops
|
||||||
|
T(n): 14286805.00 cycles
|
||||||
|
P(n): 10.18 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=200 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 2894800.00 flops
|
||||||
|
Q(n) per iteration: 12856 bytes
|
||||||
|
I(n): 225.17 flops/byte
|
||||||
|
W(n): 578960000.00 flops
|
||||||
|
T(n): 46514768.00 cycles
|
||||||
|
P(n): 12.45 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=500 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 18037000.00 flops
|
||||||
|
Q(n) per iteration: 32056 bytes
|
||||||
|
I(n): 562.67 flops/byte
|
||||||
|
W(n): 3607399936.00 flops
|
||||||
|
T(n): 250415104.00 cycles
|
||||||
|
P(n): 14.41 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=1000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 72074000.00 flops
|
||||||
|
Q(n) per iteration: 64056 bytes
|
||||||
|
I(n): 1125.17 flops/byte
|
||||||
|
W(n): 14414799872.00 flops
|
||||||
|
T(n): 979476864.00 cycles
|
||||||
|
P(n): 14.72 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=2000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 288148000.00 flops
|
||||||
|
Q(n) per iteration: 128056 bytes
|
||||||
|
I(n): 2250.17 flops/byte
|
||||||
|
W(n): 57629601792.00 flops
|
||||||
|
T(n): 3790536448.00 cycles
|
||||||
|
P(n): 15.20 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=5000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 1800369920.00 flops
|
||||||
|
Q(n) per iteration: 320056 bytes
|
||||||
|
I(n): 5625.17 flops/byte
|
||||||
|
W(n): 360073986048.00 flops
|
||||||
|
T(n): 23435288576.00 cycles
|
||||||
|
P(n): 15.36 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=10000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 2905772800.00 flops
|
||||||
|
Q(n) per iteration: 640056 bytes
|
||||||
|
I(n): 4539.87 flops/byte
|
||||||
|
W(n): 581154570240.00 flops
|
||||||
|
T(n): 93591674880.00 cycles
|
||||||
|
P(n): 6.21 flops/cycle
|
||||||
|
|
||||||
@@ -1,58 +1,66 @@
|
|||||||
rm -f main_* run_tests *.o *.s variants/*.s variants/*.o headers/*.s headers/*.o
|
rm -f main_* run_tests *.o *.s variants/*.s variants/*.o headers/*.s headers/*.o
|
||||||
/usr/bin/g++ main-float.cpp ./variants/variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_rsqrt.cpp -o main_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_rsqrt -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1
|
/usr/bin/g++ main-float.cpp ./variants/variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_rsqrt_expfix.cpp -o main_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_rsqrt_expfix -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1
|
||||||
=== N_P=50 N_ITER=200 ===
|
=== N_P=50 N_ITER=200 ===
|
||||||
W(n) per iteration: 183700.00 flops
|
W(n) per iteration: 183700.00 flops
|
||||||
Q(n) per iteration: 3256 bytes
|
Q(n) per iteration: 3256 bytes
|
||||||
I(n): 56.42 flops/byte
|
I(n): 56.42 flops/byte
|
||||||
W(n): 36740000.00 flops
|
W(n): 36740000.00 flops
|
||||||
T(n): 3466542.50 cycles
|
T(n): 4119765.00 cycles
|
||||||
P(n): 10.60 flops/cycle
|
P(n): 8.92 flops/cycle
|
||||||
|
|
||||||
=== N_P=100 N_ITER=200 ===
|
=== N_P=100 N_ITER=200 ===
|
||||||
W(n) per iteration: 727400.00 flops
|
W(n) per iteration: 727400.00 flops
|
||||||
Q(n) per iteration: 6456 bytes
|
Q(n) per iteration: 6456 bytes
|
||||||
I(n): 112.67 flops/byte
|
I(n): 112.67 flops/byte
|
||||||
W(n): 145480000.00 flops
|
W(n): 145480000.00 flops
|
||||||
T(n): 11758505.00 cycles
|
T(n): 14158772.00 cycles
|
||||||
P(n): 12.37 flops/cycle
|
P(n): 10.27 flops/cycle
|
||||||
|
|
||||||
=== N_P=200 N_ITER=200 ===
|
=== N_P=200 N_ITER=200 ===
|
||||||
W(n) per iteration: 2894800.00 flops
|
W(n) per iteration: 2894800.00 flops
|
||||||
Q(n) per iteration: 12856 bytes
|
Q(n) per iteration: 12856 bytes
|
||||||
I(n): 225.17 flops/byte
|
I(n): 225.17 flops/byte
|
||||||
W(n): 578960000.00 flops
|
W(n): 578960000.00 flops
|
||||||
T(n): 38354536.00 cycles
|
T(n): 46276376.00 cycles
|
||||||
P(n): 15.09 flops/cycle
|
P(n): 12.51 flops/cycle
|
||||||
|
|
||||||
=== N_P=500 N_ITER=200 ===
|
=== N_P=500 N_ITER=200 ===
|
||||||
W(n) per iteration: 18037000.00 flops
|
W(n) per iteration: 18037000.00 flops
|
||||||
Q(n) per iteration: 32056 bytes
|
Q(n) per iteration: 32056 bytes
|
||||||
I(n): 562.67 flops/byte
|
I(n): 562.67 flops/byte
|
||||||
W(n): 3607399936.00 flops
|
W(n): 3607399936.00 flops
|
||||||
T(n): 203609408.00 cycles
|
T(n): 249878624.00 cycles
|
||||||
P(n): 17.72 flops/cycle
|
P(n): 14.44 flops/cycle
|
||||||
|
|
||||||
=== N_P=1000 N_ITER=200 ===
|
=== N_P=1000 N_ITER=200 ===
|
||||||
W(n) per iteration: 72074000.00 flops
|
W(n) per iteration: 72074000.00 flops
|
||||||
Q(n) per iteration: 64056 bytes
|
Q(n) per iteration: 64056 bytes
|
||||||
I(n): 1125.17 flops/byte
|
I(n): 1125.17 flops/byte
|
||||||
W(n): 14414799872.00 flops
|
W(n): 14414799872.00 flops
|
||||||
T(n): 792448704.00 cycles
|
T(n): 982863872.00 cycles
|
||||||
P(n): 18.19 flops/cycle
|
P(n): 14.67 flops/cycle
|
||||||
|
|
||||||
=== N_P=2000 N_ITER=200 ===
|
=== N_P=2000 N_ITER=200 ===
|
||||||
W(n) per iteration: 288148000.00 flops
|
W(n) per iteration: 288148000.00 flops
|
||||||
Q(n) per iteration: 128056 bytes
|
Q(n) per iteration: 128056 bytes
|
||||||
I(n): 2250.17 flops/byte
|
I(n): 2250.17 flops/byte
|
||||||
W(n): 57629601792.00 flops
|
W(n): 57629601792.00 flops
|
||||||
T(n): 3076762624.00 cycles
|
T(n): 3826156544.00 cycles
|
||||||
P(n): 18.73 flops/cycle
|
P(n): 15.06 flops/cycle
|
||||||
|
|
||||||
=== N_P=5000 N_ITER=200 ===
|
=== N_P=5000 N_ITER=200 ===
|
||||||
W(n) per iteration: 1800369920.00 flops
|
W(n) per iteration: 1800369920.00 flops
|
||||||
Q(n) per iteration: 320056 bytes
|
Q(n) per iteration: 320056 bytes
|
||||||
I(n): 5625.17 flops/byte
|
I(n): 5625.17 flops/byte
|
||||||
W(n): 360073986048.00 flops
|
W(n): 360073986048.00 flops
|
||||||
T(n): 19086870528.00 cycles
|
T(n): 23693496320.00 cycles
|
||||||
P(n): 18.87 flops/cycle
|
P(n): 15.20 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=10000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 2905772800.00 flops
|
||||||
|
Q(n) per iteration: 640056 bytes
|
||||||
|
I(n): 4539.87 flops/byte
|
||||||
|
W(n): 581154570240.00 flops
|
||||||
|
T(n): 94222524416.00 cycles
|
||||||
|
P(n): 6.17 flops/cycle
|
||||||
|
|
||||||
|
|||||||
@@ -1,66 +1,66 @@
|
|||||||
rm -f main_* run_tests *.o *.s variants/*.s variants/*.o headers/*.s headers/*.o
|
rm -f main_* run_tests *.o *.s variants/*.s variants/*.o headers/*.s headers/*.o
|
||||||
/usr/bin/g++ main-float.cpp ./variants/variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_rsqrt.cpp -o main_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_rsqrt -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1
|
/usr/bin/g++ main-float.cpp ./variants/variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_rsqrt_expfix.cpp -o main_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_rsqrt_expfix -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1
|
||||||
=== N_P=50 N_ITER=200 ===
|
=== N_P=50 N_ITER=200 ===
|
||||||
W(n) per iteration: 183700.00 flops
|
W(n) per iteration: 183700.00 flops
|
||||||
Q(n) per iteration: 3256 bytes
|
Q(n) per iteration: 3256 bytes
|
||||||
I(n): 56.42 flops/byte
|
I(n): 56.42 flops/byte
|
||||||
W(n): 36740000.00 flops
|
W(n): 36740000.00 flops
|
||||||
T(n): 3470556.25 cycles
|
T(n): 4102695.50 cycles
|
||||||
P(n): 10.59 flops/cycle
|
P(n): 8.96 flops/cycle
|
||||||
|
|
||||||
=== N_P=100 N_ITER=200 ===
|
=== N_P=100 N_ITER=200 ===
|
||||||
W(n) per iteration: 727400.00 flops
|
W(n) per iteration: 727400.00 flops
|
||||||
Q(n) per iteration: 6456 bytes
|
Q(n) per iteration: 6456 bytes
|
||||||
I(n): 112.67 flops/byte
|
I(n): 112.67 flops/byte
|
||||||
W(n): 145480000.00 flops
|
W(n): 145480000.00 flops
|
||||||
T(n): 11748129.00 cycles
|
T(n): 14151872.00 cycles
|
||||||
P(n): 12.38 flops/cycle
|
P(n): 10.28 flops/cycle
|
||||||
|
|
||||||
=== N_P=200 N_ITER=200 ===
|
=== N_P=200 N_ITER=200 ===
|
||||||
W(n) per iteration: 2894800.00 flops
|
W(n) per iteration: 2894800.00 flops
|
||||||
Q(n) per iteration: 12856 bytes
|
Q(n) per iteration: 12856 bytes
|
||||||
I(n): 225.17 flops/byte
|
I(n): 225.17 flops/byte
|
||||||
W(n): 578960000.00 flops
|
W(n): 578960000.00 flops
|
||||||
T(n): 37961964.00 cycles
|
T(n): 46248272.00 cycles
|
||||||
P(n): 15.25 flops/cycle
|
P(n): 12.52 flops/cycle
|
||||||
|
|
||||||
=== N_P=500 N_ITER=200 ===
|
=== N_P=500 N_ITER=200 ===
|
||||||
W(n) per iteration: 18037000.00 flops
|
W(n) per iteration: 18037000.00 flops
|
||||||
Q(n) per iteration: 32056 bytes
|
Q(n) per iteration: 32056 bytes
|
||||||
I(n): 562.67 flops/byte
|
I(n): 562.67 flops/byte
|
||||||
W(n): 3607399936.00 flops
|
W(n): 3607399936.00 flops
|
||||||
T(n): 203245888.00 cycles
|
T(n): 249935680.00 cycles
|
||||||
P(n): 17.75 flops/cycle
|
P(n): 14.43 flops/cycle
|
||||||
|
|
||||||
=== N_P=1000 N_ITER=200 ===
|
=== N_P=1000 N_ITER=200 ===
|
||||||
W(n) per iteration: 72074000.00 flops
|
W(n) per iteration: 72074000.00 flops
|
||||||
Q(n) per iteration: 64056 bytes
|
Q(n) per iteration: 64056 bytes
|
||||||
I(n): 1125.17 flops/byte
|
I(n): 1125.17 flops/byte
|
||||||
W(n): 14414799872.00 flops
|
W(n): 14414799872.00 flops
|
||||||
T(n): 792723072.00 cycles
|
T(n): 977354240.00 cycles
|
||||||
P(n): 18.18 flops/cycle
|
P(n): 14.75 flops/cycle
|
||||||
|
|
||||||
=== N_P=2000 N_ITER=200 ===
|
=== N_P=2000 N_ITER=200 ===
|
||||||
W(n) per iteration: 288148000.00 flops
|
W(n) per iteration: 288148000.00 flops
|
||||||
Q(n) per iteration: 128056 bytes
|
Q(n) per iteration: 128056 bytes
|
||||||
I(n): 2250.17 flops/byte
|
I(n): 2250.17 flops/byte
|
||||||
W(n): 57629601792.00 flops
|
W(n): 57629601792.00 flops
|
||||||
T(n): 3083602944.00 cycles
|
T(n): 3821584896.00 cycles
|
||||||
P(n): 18.69 flops/cycle
|
P(n): 15.08 flops/cycle
|
||||||
|
|
||||||
=== N_P=5000 N_ITER=200 ===
|
=== N_P=5000 N_ITER=200 ===
|
||||||
W(n) per iteration: 1800369920.00 flops
|
W(n) per iteration: 1800369920.00 flops
|
||||||
Q(n) per iteration: 320056 bytes
|
Q(n) per iteration: 320056 bytes
|
||||||
I(n): 5625.17 flops/byte
|
I(n): 5625.17 flops/byte
|
||||||
W(n): 360073986048.00 flops
|
W(n): 360073986048.00 flops
|
||||||
T(n): 19105830912.00 cycles
|
T(n): 23594674176.00 cycles
|
||||||
P(n): 18.85 flops/cycle
|
P(n): 15.26 flops/cycle
|
||||||
|
|
||||||
=== N_P=10000 N_ITER=200 ===
|
=== N_P=10000 N_ITER=200 ===
|
||||||
W(n) per iteration: 2905772800.00 flops
|
W(n) per iteration: 2905772800.00 flops
|
||||||
Q(n) per iteration: 640056 bytes
|
Q(n) per iteration: 640056 bytes
|
||||||
I(n): 4539.87 flops/byte
|
I(n): 4539.87 flops/byte
|
||||||
W(n): 581154570240.00 flops
|
W(n): 581154570240.00 flops
|
||||||
T(n): 75556601856.00 cycles
|
T(n): 94093844480.00 cycles
|
||||||
P(n): 7.69 flops/cycle
|
P(n): 6.18 flops/cycle
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,66 @@
|
|||||||
|
rm -f main_* run_tests *.o *.s variants/*.s variants/*.o headers/*.s headers/*.o
|
||||||
|
/usr/bin/g++ main-float.cpp ./variants/variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_rsqrt_expfix.cpp -o main_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_rsqrt_expfix -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1
|
||||||
|
=== N_P=50 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 183700.00 flops
|
||||||
|
Q(n) per iteration: 3256 bytes
|
||||||
|
I(n): 56.42 flops/byte
|
||||||
|
W(n): 36740000.00 flops
|
||||||
|
T(n): 4124268.00 cycles
|
||||||
|
P(n): 8.91 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=100 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 727400.00 flops
|
||||||
|
Q(n) per iteration: 6456 bytes
|
||||||
|
I(n): 112.67 flops/byte
|
||||||
|
W(n): 145480000.00 flops
|
||||||
|
T(n): 14218675.00 cycles
|
||||||
|
P(n): 10.23 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=200 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 2894800.00 flops
|
||||||
|
Q(n) per iteration: 12856 bytes
|
||||||
|
I(n): 225.17 flops/byte
|
||||||
|
W(n): 578960000.00 flops
|
||||||
|
T(n): 46843476.00 cycles
|
||||||
|
P(n): 12.36 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=500 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 18037000.00 flops
|
||||||
|
Q(n) per iteration: 32056 bytes
|
||||||
|
I(n): 562.67 flops/byte
|
||||||
|
W(n): 3607399936.00 flops
|
||||||
|
T(n): 250210640.00 cycles
|
||||||
|
P(n): 14.42 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=1000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 72074000.00 flops
|
||||||
|
Q(n) per iteration: 64056 bytes
|
||||||
|
I(n): 1125.17 flops/byte
|
||||||
|
W(n): 14414799872.00 flops
|
||||||
|
T(n): 982352128.00 cycles
|
||||||
|
P(n): 14.67 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=2000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 288148000.00 flops
|
||||||
|
Q(n) per iteration: 128056 bytes
|
||||||
|
I(n): 2250.17 flops/byte
|
||||||
|
W(n): 57629601792.00 flops
|
||||||
|
T(n): 3823222016.00 cycles
|
||||||
|
P(n): 15.07 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=5000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 1800369920.00 flops
|
||||||
|
Q(n) per iteration: 320056 bytes
|
||||||
|
I(n): 5625.17 flops/byte
|
||||||
|
W(n): 360073986048.00 flops
|
||||||
|
T(n): 23695175680.00 cycles
|
||||||
|
P(n): 15.20 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=10000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 2905772800.00 flops
|
||||||
|
Q(n) per iteration: 640056 bytes
|
||||||
|
I(n): 4539.87 flops/byte
|
||||||
|
W(n): 581154570240.00 flops
|
||||||
|
T(n): 94304829440.00 cycles
|
||||||
|
P(n): 6.16 flops/cycle
|
||||||
|
|
||||||
@@ -1,58 +1,66 @@
|
|||||||
rm -f main_* run_tests *.o *.s variants/*.s variants/*.o headers/*.s headers/*.o
|
rm -f main_* run_tests *.o *.s variants/*.s variants/*.o headers/*.s headers/*.o
|
||||||
/usr/bin/g++ main-float.cpp ./variants/variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_rsqrt_morersqrt.cpp -o main_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_rsqrt_morersqrt -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1
|
/usr/bin/g++ main-float.cpp ./variants/variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_rsqrt_morersqrt_expfix.cpp -o main_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_rsqrt_morersqrt_expfix -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1
|
||||||
=== N_P=50 N_ITER=200 ===
|
=== N_P=50 N_ITER=200 ===
|
||||||
W(n) per iteration: 183700.00 flops
|
W(n) per iteration: 183700.00 flops
|
||||||
Q(n) per iteration: 3256 bytes
|
Q(n) per iteration: 3256 bytes
|
||||||
I(n): 56.42 flops/byte
|
I(n): 56.42 flops/byte
|
||||||
W(n): 36740000.00 flops
|
W(n): 36740000.00 flops
|
||||||
T(n): 2966264.00 cycles
|
T(n): 3472917.50 cycles
|
||||||
P(n): 12.39 flops/cycle
|
P(n): 10.58 flops/cycle
|
||||||
|
|
||||||
=== N_P=100 N_ITER=200 ===
|
=== N_P=100 N_ITER=200 ===
|
||||||
W(n) per iteration: 727400.00 flops
|
W(n) per iteration: 727400.00 flops
|
||||||
Q(n) per iteration: 6456 bytes
|
Q(n) per iteration: 6456 bytes
|
||||||
I(n): 112.67 flops/byte
|
I(n): 112.67 flops/byte
|
||||||
W(n): 145480000.00 flops
|
W(n): 145480000.00 flops
|
||||||
T(n): 9680198.00 cycles
|
T(n): 11763622.00 cycles
|
||||||
P(n): 15.03 flops/cycle
|
P(n): 12.37 flops/cycle
|
||||||
|
|
||||||
=== N_P=200 N_ITER=200 ===
|
=== N_P=200 N_ITER=200 ===
|
||||||
W(n) per iteration: 2894800.00 flops
|
W(n) per iteration: 2894800.00 flops
|
||||||
Q(n) per iteration: 12856 bytes
|
Q(n) per iteration: 12856 bytes
|
||||||
I(n): 225.17 flops/byte
|
I(n): 225.17 flops/byte
|
||||||
W(n): 578960000.00 flops
|
W(n): 578960000.00 flops
|
||||||
T(n): 30652810.00 cycles
|
T(n): 38070640.00 cycles
|
||||||
P(n): 18.89 flops/cycle
|
P(n): 15.21 flops/cycle
|
||||||
|
|
||||||
=== N_P=500 N_ITER=200 ===
|
=== N_P=500 N_ITER=200 ===
|
||||||
W(n) per iteration: 18037000.00 flops
|
W(n) per iteration: 18037000.00 flops
|
||||||
Q(n) per iteration: 32056 bytes
|
Q(n) per iteration: 32056 bytes
|
||||||
I(n): 562.67 flops/byte
|
I(n): 562.67 flops/byte
|
||||||
W(n): 3607399936.00 flops
|
W(n): 3607399936.00 flops
|
||||||
T(n): 160992976.00 cycles
|
T(n): 204154320.00 cycles
|
||||||
P(n): 22.41 flops/cycle
|
P(n): 17.67 flops/cycle
|
||||||
|
|
||||||
=== N_P=1000 N_ITER=200 ===
|
=== N_P=1000 N_ITER=200 ===
|
||||||
W(n) per iteration: 72074000.00 flops
|
W(n) per iteration: 72074000.00 flops
|
||||||
Q(n) per iteration: 64056 bytes
|
Q(n) per iteration: 64056 bytes
|
||||||
I(n): 1125.17 flops/byte
|
I(n): 1125.17 flops/byte
|
||||||
W(n): 14414799872.00 flops
|
W(n): 14414799872.00 flops
|
||||||
T(n): 629138816.00 cycles
|
T(n): 798999808.00 cycles
|
||||||
P(n): 22.91 flops/cycle
|
P(n): 18.04 flops/cycle
|
||||||
|
|
||||||
=== N_P=2000 N_ITER=200 ===
|
=== N_P=2000 N_ITER=200 ===
|
||||||
W(n) per iteration: 288148000.00 flops
|
W(n) per iteration: 288148000.00 flops
|
||||||
Q(n) per iteration: 128056 bytes
|
Q(n) per iteration: 128056 bytes
|
||||||
I(n): 2250.17 flops/byte
|
I(n): 2250.17 flops/byte
|
||||||
W(n): 57629601792.00 flops
|
W(n): 57629601792.00 flops
|
||||||
T(n): 2423142656.00 cycles
|
T(n): 3114275584.00 cycles
|
||||||
P(n): 23.78 flops/cycle
|
P(n): 18.50 flops/cycle
|
||||||
|
|
||||||
=== N_P=5000 N_ITER=200 ===
|
=== N_P=5000 N_ITER=200 ===
|
||||||
W(n) per iteration: 1800369920.00 flops
|
W(n) per iteration: 1800369920.00 flops
|
||||||
Q(n) per iteration: 320056 bytes
|
Q(n) per iteration: 320056 bytes
|
||||||
I(n): 5625.17 flops/byte
|
I(n): 5625.17 flops/byte
|
||||||
W(n): 360073986048.00 flops
|
W(n): 360073986048.00 flops
|
||||||
T(n): 15022035968.00 cycles
|
T(n): 19146825728.00 cycles
|
||||||
P(n): 23.97 flops/cycle
|
P(n): 18.81 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=10000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 2905772800.00 flops
|
||||||
|
Q(n) per iteration: 640056 bytes
|
||||||
|
I(n): 4539.87 flops/byte
|
||||||
|
W(n): 581154570240.00 flops
|
||||||
|
T(n): 76207964160.00 cycles
|
||||||
|
P(n): 7.63 flops/cycle
|
||||||
|
|
||||||
|
|||||||
@@ -1,66 +1,66 @@
|
|||||||
rm -f main_* run_tests *.o *.s variants/*.s variants/*.o headers/*.s headers/*.o
|
rm -f main_* run_tests *.o *.s variants/*.s variants/*.o headers/*.s headers/*.o
|
||||||
/usr/bin/g++ main-float.cpp ./variants/variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_rsqrt_morersqrt.cpp -o main_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_rsqrt_morersqrt -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1
|
/usr/bin/g++ main-float.cpp ./variants/variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_rsqrt_morersqrt_expfix.cpp -o main_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_rsqrt_morersqrt_expfix -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1
|
||||||
=== N_P=50 N_ITER=200 ===
|
=== N_P=50 N_ITER=200 ===
|
||||||
W(n) per iteration: 183700.00 flops
|
W(n) per iteration: 183700.00 flops
|
||||||
Q(n) per iteration: 3256 bytes
|
Q(n) per iteration: 3256 bytes
|
||||||
I(n): 56.42 flops/byte
|
I(n): 56.42 flops/byte
|
||||||
W(n): 36740000.00 flops
|
W(n): 36740000.00 flops
|
||||||
T(n): 2942563.50 cycles
|
T(n): 3503500.00 cycles
|
||||||
P(n): 12.49 flops/cycle
|
P(n): 10.49 flops/cycle
|
||||||
|
|
||||||
=== N_P=100 N_ITER=200 ===
|
=== N_P=100 N_ITER=200 ===
|
||||||
W(n) per iteration: 727400.00 flops
|
W(n) per iteration: 727400.00 flops
|
||||||
Q(n) per iteration: 6456 bytes
|
Q(n) per iteration: 6456 bytes
|
||||||
I(n): 112.67 flops/byte
|
I(n): 112.67 flops/byte
|
||||||
W(n): 145480000.00 flops
|
W(n): 145480000.00 flops
|
||||||
T(n): 9665785.00 cycles
|
T(n): 11802675.00 cycles
|
||||||
P(n): 15.05 flops/cycle
|
P(n): 12.33 flops/cycle
|
||||||
|
|
||||||
=== N_P=200 N_ITER=200 ===
|
=== N_P=200 N_ITER=200 ===
|
||||||
W(n) per iteration: 2894800.00 flops
|
W(n) per iteration: 2894800.00 flops
|
||||||
Q(n) per iteration: 12856 bytes
|
Q(n) per iteration: 12856 bytes
|
||||||
I(n): 225.17 flops/byte
|
I(n): 225.17 flops/byte
|
||||||
W(n): 578960000.00 flops
|
W(n): 578960000.00 flops
|
||||||
T(n): 30626330.00 cycles
|
T(n): 37947776.00 cycles
|
||||||
P(n): 18.90 flops/cycle
|
P(n): 15.26 flops/cycle
|
||||||
|
|
||||||
=== N_P=500 N_ITER=200 ===
|
=== N_P=500 N_ITER=200 ===
|
||||||
W(n) per iteration: 18037000.00 flops
|
W(n) per iteration: 18037000.00 flops
|
||||||
Q(n) per iteration: 32056 bytes
|
Q(n) per iteration: 32056 bytes
|
||||||
I(n): 562.67 flops/byte
|
I(n): 562.67 flops/byte
|
||||||
W(n): 3607399936.00 flops
|
W(n): 3607399936.00 flops
|
||||||
T(n): 161586752.00 cycles
|
T(n): 203323776.00 cycles
|
||||||
P(n): 22.32 flops/cycle
|
P(n): 17.74 flops/cycle
|
||||||
|
|
||||||
=== N_P=1000 N_ITER=200 ===
|
=== N_P=1000 N_ITER=200 ===
|
||||||
W(n) per iteration: 72074000.00 flops
|
W(n) per iteration: 72074000.00 flops
|
||||||
Q(n) per iteration: 64056 bytes
|
Q(n) per iteration: 64056 bytes
|
||||||
I(n): 1125.17 flops/byte
|
I(n): 1125.17 flops/byte
|
||||||
W(n): 14414799872.00 flops
|
W(n): 14414799872.00 flops
|
||||||
T(n): 626457472.00 cycles
|
T(n): 821986944.00 cycles
|
||||||
P(n): 23.01 flops/cycle
|
P(n): 17.54 flops/cycle
|
||||||
|
|
||||||
=== N_P=2000 N_ITER=200 ===
|
=== N_P=2000 N_ITER=200 ===
|
||||||
W(n) per iteration: 288148000.00 flops
|
W(n) per iteration: 288148000.00 flops
|
||||||
Q(n) per iteration: 128056 bytes
|
Q(n) per iteration: 128056 bytes
|
||||||
I(n): 2250.17 flops/byte
|
I(n): 2250.17 flops/byte
|
||||||
W(n): 57629601792.00 flops
|
W(n): 57629601792.00 flops
|
||||||
T(n): 2423129344.00 cycles
|
T(n): 3103710720.00 cycles
|
||||||
P(n): 23.78 flops/cycle
|
P(n): 18.57 flops/cycle
|
||||||
|
|
||||||
=== N_P=5000 N_ITER=200 ===
|
=== N_P=5000 N_ITER=200 ===
|
||||||
W(n) per iteration: 1800369920.00 flops
|
W(n) per iteration: 1800369920.00 flops
|
||||||
Q(n) per iteration: 320056 bytes
|
Q(n) per iteration: 320056 bytes
|
||||||
I(n): 5625.17 flops/byte
|
I(n): 5625.17 flops/byte
|
||||||
W(n): 360073986048.00 flops
|
W(n): 360073986048.00 flops
|
||||||
T(n): 14910323712.00 cycles
|
T(n): 19254915072.00 cycles
|
||||||
P(n): 24.15 flops/cycle
|
P(n): 18.70 flops/cycle
|
||||||
|
|
||||||
=== N_P=10000 N_ITER=200 ===
|
=== N_P=10000 N_ITER=200 ===
|
||||||
W(n) per iteration: 2905772800.00 flops
|
W(n) per iteration: 2905772800.00 flops
|
||||||
Q(n) per iteration: 640056 bytes
|
Q(n) per iteration: 640056 bytes
|
||||||
I(n): 4539.87 flops/byte
|
I(n): 4539.87 flops/byte
|
||||||
W(n): 581154570240.00 flops
|
W(n): 581154570240.00 flops
|
||||||
T(n): 59213176832.00 cycles
|
T(n): 76036898816.00 cycles
|
||||||
P(n): 9.81 flops/cycle
|
P(n): 7.64 flops/cycle
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,66 @@
|
|||||||
|
rm -f main_* run_tests *.o *.s variants/*.s variants/*.o headers/*.s headers/*.o
|
||||||
|
/usr/bin/g++ main-float.cpp ./variants/variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_rsqrt_morersqrt_expfix.cpp -o main_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_rsqrt_morersqrt_expfix -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1
|
||||||
|
=== N_P=50 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 183700.00 flops
|
||||||
|
Q(n) per iteration: 3256 bytes
|
||||||
|
I(n): 56.42 flops/byte
|
||||||
|
W(n): 36740000.00 flops
|
||||||
|
T(n): 3474629.50 cycles
|
||||||
|
P(n): 10.57 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=100 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 727400.00 flops
|
||||||
|
Q(n) per iteration: 6456 bytes
|
||||||
|
I(n): 112.67 flops/byte
|
||||||
|
W(n): 145480000.00 flops
|
||||||
|
T(n): 11869545.00 cycles
|
||||||
|
P(n): 12.26 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=200 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 2894800.00 flops
|
||||||
|
Q(n) per iteration: 12856 bytes
|
||||||
|
I(n): 225.17 flops/byte
|
||||||
|
W(n): 578960000.00 flops
|
||||||
|
T(n): 38112416.00 cycles
|
||||||
|
P(n): 15.19 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=500 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 18037000.00 flops
|
||||||
|
Q(n) per iteration: 32056 bytes
|
||||||
|
I(n): 562.67 flops/byte
|
||||||
|
W(n): 3607399936.00 flops
|
||||||
|
T(n): 203449264.00 cycles
|
||||||
|
P(n): 17.73 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=1000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 72074000.00 flops
|
||||||
|
Q(n) per iteration: 64056 bytes
|
||||||
|
I(n): 1125.17 flops/byte
|
||||||
|
W(n): 14414799872.00 flops
|
||||||
|
T(n): 816738752.00 cycles
|
||||||
|
P(n): 17.65 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=2000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 288148000.00 flops
|
||||||
|
Q(n) per iteration: 128056 bytes
|
||||||
|
I(n): 2250.17 flops/byte
|
||||||
|
W(n): 57629601792.00 flops
|
||||||
|
T(n): 3081998592.00 cycles
|
||||||
|
P(n): 18.70 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=5000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 1800369920.00 flops
|
||||||
|
Q(n) per iteration: 320056 bytes
|
||||||
|
I(n): 5625.17 flops/byte
|
||||||
|
W(n): 360073986048.00 flops
|
||||||
|
T(n): 19241965568.00 cycles
|
||||||
|
P(n): 18.71 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=10000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 2905772800.00 flops
|
||||||
|
Q(n) per iteration: 640056 bytes
|
||||||
|
I(n): 4539.87 flops/byte
|
||||||
|
W(n): 581154570240.00 flops
|
||||||
|
T(n): 76032835584.00 cycles
|
||||||
|
P(n): 7.64 flops/cycle
|
||||||
|
|
||||||
@@ -0,0 +1,66 @@
|
|||||||
|
rm -f main_* run_tests *.o *.s variants/*.s variants/*.o headers/*.s headers/*.o
|
||||||
|
/usr/bin/g++ main-float.cpp ./variants/variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_rsqrt_morersqrt_expfix_improved.cpp -o main_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_rsqrt_morersqrt_expfix_improved -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1
|
||||||
|
=== N_P=50 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 183700.00 flops
|
||||||
|
Q(n) per iteration: 3256 bytes
|
||||||
|
I(n): 56.42 flops/byte
|
||||||
|
W(n): 36740000.00 flops
|
||||||
|
T(n): 3443131.25 cycles
|
||||||
|
P(n): 10.67 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=100 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 727400.00 flops
|
||||||
|
Q(n) per iteration: 6456 bytes
|
||||||
|
I(n): 112.67 flops/byte
|
||||||
|
W(n): 145480000.00 flops
|
||||||
|
T(n): 11289992.00 cycles
|
||||||
|
P(n): 12.89 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=200 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 2894800.00 flops
|
||||||
|
Q(n) per iteration: 12856 bytes
|
||||||
|
I(n): 225.17 flops/byte
|
||||||
|
W(n): 578960000.00 flops
|
||||||
|
T(n): 36293512.00 cycles
|
||||||
|
P(n): 15.95 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=500 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 18037000.00 flops
|
||||||
|
Q(n) per iteration: 32056 bytes
|
||||||
|
I(n): 562.67 flops/byte
|
||||||
|
W(n): 3607399936.00 flops
|
||||||
|
T(n): 193259072.00 cycles
|
||||||
|
P(n): 18.67 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=1000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 72074000.00 flops
|
||||||
|
Q(n) per iteration: 64056 bytes
|
||||||
|
I(n): 1125.17 flops/byte
|
||||||
|
W(n): 14414799872.00 flops
|
||||||
|
T(n): 752713344.00 cycles
|
||||||
|
P(n): 19.15 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=2000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 288148000.00 flops
|
||||||
|
Q(n) per iteration: 128056 bytes
|
||||||
|
I(n): 2250.17 flops/byte
|
||||||
|
W(n): 57629601792.00 flops
|
||||||
|
T(n): 2940765440.00 cycles
|
||||||
|
P(n): 19.60 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=5000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 1800369920.00 flops
|
||||||
|
Q(n) per iteration: 320056 bytes
|
||||||
|
I(n): 5625.17 flops/byte
|
||||||
|
W(n): 360073986048.00 flops
|
||||||
|
T(n): 18122862592.00 cycles
|
||||||
|
P(n): 19.87 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=10000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 2905772800.00 flops
|
||||||
|
Q(n) per iteration: 640056 bytes
|
||||||
|
I(n): 4539.87 flops/byte
|
||||||
|
W(n): 581154570240.00 flops
|
||||||
|
T(n): 71869390848.00 cycles
|
||||||
|
P(n): 8.09 flops/cycle
|
||||||
|
|
||||||
@@ -0,0 +1,64 @@
|
|||||||
|
=== N_P=50 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 183700.00 flops
|
||||||
|
Q(n) per iteration: 3256 bytes
|
||||||
|
I(n): 56.42 flops/byte
|
||||||
|
W(n): 36740000.00 flops
|
||||||
|
T(n): 3387230.00 cycles
|
||||||
|
P(n): 10.85 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=100 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 727400.00 flops
|
||||||
|
Q(n) per iteration: 6456 bytes
|
||||||
|
I(n): 112.67 flops/byte
|
||||||
|
W(n): 145480000.00 flops
|
||||||
|
T(n): 11326786.00 cycles
|
||||||
|
P(n): 12.84 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=200 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 2894800.00 flops
|
||||||
|
Q(n) per iteration: 12856 bytes
|
||||||
|
I(n): 225.17 flops/byte
|
||||||
|
W(n): 578960000.00 flops
|
||||||
|
T(n): 36351516.00 cycles
|
||||||
|
P(n): 15.93 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=500 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 18037000.00 flops
|
||||||
|
Q(n) per iteration: 32056 bytes
|
||||||
|
I(n): 562.67 flops/byte
|
||||||
|
W(n): 3607399936.00 flops
|
||||||
|
T(n): 194490336.00 cycles
|
||||||
|
P(n): 18.55 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=1000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 72074000.00 flops
|
||||||
|
Q(n) per iteration: 64056 bytes
|
||||||
|
I(n): 1125.17 flops/byte
|
||||||
|
W(n): 14414799872.00 flops
|
||||||
|
T(n): 753201792.00 cycles
|
||||||
|
P(n): 19.14 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=2000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 288148000.00 flops
|
||||||
|
Q(n) per iteration: 128056 bytes
|
||||||
|
I(n): 2250.17 flops/byte
|
||||||
|
W(n): 57629601792.00 flops
|
||||||
|
T(n): 2954236416.00 cycles
|
||||||
|
P(n): 19.51 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=5000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 1800369920.00 flops
|
||||||
|
Q(n) per iteration: 320056 bytes
|
||||||
|
I(n): 5625.17 flops/byte
|
||||||
|
W(n): 360073986048.00 flops
|
||||||
|
T(n): 18356828160.00 cycles
|
||||||
|
P(n): 19.62 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=10000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 2905772800.00 flops
|
||||||
|
Q(n) per iteration: 640056 bytes
|
||||||
|
I(n): 4539.87 flops/byte
|
||||||
|
W(n): 581154570240.00 flops
|
||||||
|
T(n): 73678970880.00 cycles
|
||||||
|
P(n): 7.89 flops/cycle
|
||||||
|
|
||||||
@@ -0,0 +1,64 @@
|
|||||||
|
=== N_P=50 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 183700.00 flops
|
||||||
|
Q(n) per iteration: 3256 bytes
|
||||||
|
I(n): 56.42 flops/byte
|
||||||
|
W(n): 36740000.00 flops
|
||||||
|
T(n): 3445767.00 cycles
|
||||||
|
P(n): 10.66 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=100 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 727400.00 flops
|
||||||
|
Q(n) per iteration: 6456 bytes
|
||||||
|
I(n): 112.67 flops/byte
|
||||||
|
W(n): 145480000.00 flops
|
||||||
|
T(n): 11501729.00 cycles
|
||||||
|
P(n): 12.65 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=200 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 2894800.00 flops
|
||||||
|
Q(n) per iteration: 12856 bytes
|
||||||
|
I(n): 225.17 flops/byte
|
||||||
|
W(n): 578960000.00 flops
|
||||||
|
T(n): 36756200.00 cycles
|
||||||
|
P(n): 15.75 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=500 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 18037000.00 flops
|
||||||
|
Q(n) per iteration: 32056 bytes
|
||||||
|
I(n): 562.67 flops/byte
|
||||||
|
W(n): 3607399936.00 flops
|
||||||
|
T(n): 198376320.00 cycles
|
||||||
|
P(n): 18.18 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=1000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 72074000.00 flops
|
||||||
|
Q(n) per iteration: 64056 bytes
|
||||||
|
I(n): 1125.17 flops/byte
|
||||||
|
W(n): 14414799872.00 flops
|
||||||
|
T(n): 765950336.00 cycles
|
||||||
|
P(n): 18.82 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=2000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 288148000.00 flops
|
||||||
|
Q(n) per iteration: 128056 bytes
|
||||||
|
I(n): 2250.17 flops/byte
|
||||||
|
W(n): 57629601792.00 flops
|
||||||
|
T(n): 2987576576.00 cycles
|
||||||
|
P(n): 19.29 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=5000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 1800369920.00 flops
|
||||||
|
Q(n) per iteration: 320056 bytes
|
||||||
|
I(n): 5625.17 flops/byte
|
||||||
|
W(n): 360073986048.00 flops
|
||||||
|
T(n): 18625347584.00 cycles
|
||||||
|
P(n): 19.33 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=10000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 2905772800.00 flops
|
||||||
|
Q(n) per iteration: 640056 bytes
|
||||||
|
I(n): 4539.87 flops/byte
|
||||||
|
W(n): 581154570240.00 flops
|
||||||
|
T(n): 73340780544.00 cycles
|
||||||
|
P(n): 7.92 flops/cycle
|
||||||
|
|
||||||
@@ -0,0 +1,66 @@
|
|||||||
|
rm -f main_* run_tests *.o *.s variants/*.s variants/*.o headers/*.s headers/*.o
|
||||||
|
/usr/bin/g++ main-float.cpp ./variants/variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_rsqrt_morersqrt_expfix_improved_moreilp.cpp -o main_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_2_rsqrt_morersqrt_expfix_improved_moreilp -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1
|
||||||
|
=== N_P=50 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 183700.00 flops
|
||||||
|
Q(n) per iteration: 3256 bytes
|
||||||
|
I(n): 56.42 flops/byte
|
||||||
|
W(n): 36740000.00 flops
|
||||||
|
T(n): 2430659.75 cycles
|
||||||
|
P(n): 15.12 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=100 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 727400.00 flops
|
||||||
|
Q(n) per iteration: 6456 bytes
|
||||||
|
I(n): 112.67 flops/byte
|
||||||
|
W(n): 145480000.00 flops
|
||||||
|
T(n): 8285106.00 cycles
|
||||||
|
P(n): 17.56 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=200 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 2894800.00 flops
|
||||||
|
Q(n) per iteration: 12856 bytes
|
||||||
|
I(n): 225.17 flops/byte
|
||||||
|
W(n): 578960000.00 flops
|
||||||
|
T(n): 30615050.00 cycles
|
||||||
|
P(n): 18.91 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=500 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 18037000.00 flops
|
||||||
|
Q(n) per iteration: 32056 bytes
|
||||||
|
I(n): 562.67 flops/byte
|
||||||
|
W(n): 3607399936.00 flops
|
||||||
|
T(n): 186199040.00 cycles
|
||||||
|
P(n): 19.37 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=1000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 72074000.00 flops
|
||||||
|
Q(n) per iteration: 64056 bytes
|
||||||
|
I(n): 1125.17 flops/byte
|
||||||
|
W(n): 14414799872.00 flops
|
||||||
|
T(n): 728076288.00 cycles
|
||||||
|
P(n): 19.80 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=2000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 288148000.00 flops
|
||||||
|
Q(n) per iteration: 128056 bytes
|
||||||
|
I(n): 2250.17 flops/byte
|
||||||
|
W(n): 57629601792.00 flops
|
||||||
|
T(n): 2895743232.00 cycles
|
||||||
|
P(n): 19.90 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=5000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 1800369920.00 flops
|
||||||
|
Q(n) per iteration: 320056 bytes
|
||||||
|
I(n): 5625.17 flops/byte
|
||||||
|
W(n): 360073986048.00 flops
|
||||||
|
T(n): 18180956160.00 cycles
|
||||||
|
P(n): 19.81 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=10000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 2905772800.00 flops
|
||||||
|
Q(n) per iteration: 640056 bytes
|
||||||
|
I(n): 4539.87 flops/byte
|
||||||
|
W(n): 581154570240.00 flops
|
||||||
|
T(n): 72372396032.00 cycles
|
||||||
|
P(n): 8.03 flops/cycle
|
||||||
|
|
||||||
@@ -0,0 +1,64 @@
|
|||||||
|
=== N_P=50 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 183700.00 flops
|
||||||
|
Q(n) per iteration: 3256 bytes
|
||||||
|
I(n): 56.42 flops/byte
|
||||||
|
W(n): 36740000.00 flops
|
||||||
|
T(n): 2443465.25 cycles
|
||||||
|
P(n): 15.04 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=100 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 727400.00 flops
|
||||||
|
Q(n) per iteration: 6456 bytes
|
||||||
|
I(n): 112.67 flops/byte
|
||||||
|
W(n): 145480000.00 flops
|
||||||
|
T(n): 8370210.00 cycles
|
||||||
|
P(n): 17.38 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=200 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 2894800.00 flops
|
||||||
|
Q(n) per iteration: 12856 bytes
|
||||||
|
I(n): 225.17 flops/byte
|
||||||
|
W(n): 578960000.00 flops
|
||||||
|
T(n): 30839560.00 cycles
|
||||||
|
P(n): 18.77 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=500 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 18037000.00 flops
|
||||||
|
Q(n) per iteration: 32056 bytes
|
||||||
|
I(n): 562.67 flops/byte
|
||||||
|
W(n): 3607399936.00 flops
|
||||||
|
T(n): 185338336.00 cycles
|
||||||
|
P(n): 19.46 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=1000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 72074000.00 flops
|
||||||
|
Q(n) per iteration: 64056 bytes
|
||||||
|
I(n): 1125.17 flops/byte
|
||||||
|
W(n): 14414799872.00 flops
|
||||||
|
T(n): 737704256.00 cycles
|
||||||
|
P(n): 19.54 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=2000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 288148000.00 flops
|
||||||
|
Q(n) per iteration: 128056 bytes
|
||||||
|
I(n): 2250.17 flops/byte
|
||||||
|
W(n): 57629601792.00 flops
|
||||||
|
T(n): 2915981056.00 cycles
|
||||||
|
P(n): 19.76 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=5000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 1800369920.00 flops
|
||||||
|
Q(n) per iteration: 320056 bytes
|
||||||
|
I(n): 5625.17 flops/byte
|
||||||
|
W(n): 360073986048.00 flops
|
||||||
|
T(n): 18362775552.00 cycles
|
||||||
|
P(n): 19.61 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=10000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 2905772800.00 flops
|
||||||
|
Q(n) per iteration: 640056 bytes
|
||||||
|
I(n): 4539.87 flops/byte
|
||||||
|
W(n): 581154570240.00 flops
|
||||||
|
T(n): 73707225088.00 cycles
|
||||||
|
P(n): 7.88 flops/cycle
|
||||||
|
|
||||||
@@ -0,0 +1,64 @@
|
|||||||
|
=== N_P=50 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 183700.00 flops
|
||||||
|
Q(n) per iteration: 3256 bytes
|
||||||
|
I(n): 56.42 flops/byte
|
||||||
|
W(n): 36740000.00 flops
|
||||||
|
T(n): 2445340.00 cycles
|
||||||
|
P(n): 15.02 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=100 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 727400.00 flops
|
||||||
|
Q(n) per iteration: 6456 bytes
|
||||||
|
I(n): 112.67 flops/byte
|
||||||
|
W(n): 145480000.00 flops
|
||||||
|
T(n): 8350645.00 cycles
|
||||||
|
P(n): 17.42 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=200 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 2894800.00 flops
|
||||||
|
Q(n) per iteration: 12856 bytes
|
||||||
|
I(n): 225.17 flops/byte
|
||||||
|
W(n): 578960000.00 flops
|
||||||
|
T(n): 30609110.00 cycles
|
||||||
|
P(n): 18.91 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=500 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 18037000.00 flops
|
||||||
|
Q(n) per iteration: 32056 bytes
|
||||||
|
I(n): 562.67 flops/byte
|
||||||
|
W(n): 3607399936.00 flops
|
||||||
|
T(n): 186796768.00 cycles
|
||||||
|
P(n): 19.31 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=1000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 72074000.00 flops
|
||||||
|
Q(n) per iteration: 64056 bytes
|
||||||
|
I(n): 1125.17 flops/byte
|
||||||
|
W(n): 14414799872.00 flops
|
||||||
|
T(n): 733212800.00 cycles
|
||||||
|
P(n): 19.66 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=2000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 288148000.00 flops
|
||||||
|
Q(n) per iteration: 128056 bytes
|
||||||
|
I(n): 2250.17 flops/byte
|
||||||
|
W(n): 57629601792.00 flops
|
||||||
|
T(n): 2960800768.00 cycles
|
||||||
|
P(n): 19.46 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=5000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 1800369920.00 flops
|
||||||
|
Q(n) per iteration: 320056 bytes
|
||||||
|
I(n): 5625.17 flops/byte
|
||||||
|
W(n): 360073986048.00 flops
|
||||||
|
T(n): 18505687040.00 cycles
|
||||||
|
P(n): 19.46 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=10000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 2905772800.00 flops
|
||||||
|
Q(n) per iteration: 640056 bytes
|
||||||
|
I(n): 4539.87 flops/byte
|
||||||
|
W(n): 581154570240.00 flops
|
||||||
|
T(n): 73613836288.00 cycles
|
||||||
|
P(n): 7.89 flops/cycle
|
||||||
|
|
||||||
@@ -1,58 +1,66 @@
|
|||||||
rm -f main_* run_tests *.o *.s variants/*.s variants/*.o headers/*.s headers/*.o
|
rm -f main_* run_tests *.o *.s variants/*.s variants/*.o headers/*.s headers/*.o
|
||||||
/usr/bin/g++ main-float.cpp ./variants/variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_4.cpp -o main_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_4 -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1
|
/usr/bin/g++ main-float.cpp ./variants/variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_4_expfix.cpp -o main_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_4_expfix -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1
|
||||||
=== N_P=50 N_ITER=200 ===
|
=== N_P=50 N_ITER=200 ===
|
||||||
W(n) per iteration: 183700.00 flops
|
W(n) per iteration: 183700.00 flops
|
||||||
Q(n) per iteration: 3256 bytes
|
Q(n) per iteration: 3256 bytes
|
||||||
I(n): 56.42 flops/byte
|
I(n): 56.42 flops/byte
|
||||||
W(n): 36740000.00 flops
|
W(n): 36740000.00 flops
|
||||||
T(n): 3587017.50 cycles
|
T(n): 3897775.00 cycles
|
||||||
P(n): 10.24 flops/cycle
|
P(n): 9.43 flops/cycle
|
||||||
|
|
||||||
=== N_P=100 N_ITER=200 ===
|
=== N_P=100 N_ITER=200 ===
|
||||||
W(n) per iteration: 727400.00 flops
|
W(n) per iteration: 727400.00 flops
|
||||||
Q(n) per iteration: 6456 bytes
|
Q(n) per iteration: 6456 bytes
|
||||||
I(n): 112.67 flops/byte
|
I(n): 112.67 flops/byte
|
||||||
W(n): 145480000.00 flops
|
W(n): 145480000.00 flops
|
||||||
T(n): 12215910.00 cycles
|
T(n): 13522278.00 cycles
|
||||||
P(n): 11.91 flops/cycle
|
P(n): 10.76 flops/cycle
|
||||||
|
|
||||||
=== N_P=200 N_ITER=200 ===
|
=== N_P=200 N_ITER=200 ===
|
||||||
W(n) per iteration: 2894800.00 flops
|
W(n) per iteration: 2894800.00 flops
|
||||||
Q(n) per iteration: 12856 bytes
|
Q(n) per iteration: 12856 bytes
|
||||||
I(n): 225.17 flops/byte
|
I(n): 225.17 flops/byte
|
||||||
W(n): 578960000.00 flops
|
W(n): 578960000.00 flops
|
||||||
T(n): 44944608.00 cycles
|
T(n): 50063060.00 cycles
|
||||||
P(n): 12.88 flops/cycle
|
P(n): 11.56 flops/cycle
|
||||||
|
|
||||||
=== N_P=500 N_ITER=200 ===
|
=== N_P=500 N_ITER=200 ===
|
||||||
W(n) per iteration: 18037000.00 flops
|
W(n) per iteration: 18037000.00 flops
|
||||||
Q(n) per iteration: 32056 bytes
|
Q(n) per iteration: 32056 bytes
|
||||||
I(n): 562.67 flops/byte
|
I(n): 562.67 flops/byte
|
||||||
W(n): 3607399936.00 flops
|
W(n): 3607399936.00 flops
|
||||||
T(n): 214169936.00 cycles
|
T(n): 240297888.00 cycles
|
||||||
P(n): 16.84 flops/cycle
|
P(n): 15.01 flops/cycle
|
||||||
|
|
||||||
=== N_P=1000 N_ITER=200 ===
|
=== N_P=1000 N_ITER=200 ===
|
||||||
W(n) per iteration: 72074000.00 flops
|
W(n) per iteration: 72074000.00 flops
|
||||||
Q(n) per iteration: 64056 bytes
|
Q(n) per iteration: 64056 bytes
|
||||||
I(n): 1125.17 flops/byte
|
I(n): 1125.17 flops/byte
|
||||||
W(n): 14414799872.00 flops
|
W(n): 14414799872.00 flops
|
||||||
T(n): 828421248.00 cycles
|
T(n): 942706688.00 cycles
|
||||||
P(n): 17.40 flops/cycle
|
P(n): 15.29 flops/cycle
|
||||||
|
|
||||||
=== N_P=2000 N_ITER=200 ===
|
=== N_P=2000 N_ITER=200 ===
|
||||||
W(n) per iteration: 288148000.00 flops
|
W(n) per iteration: 288148000.00 flops
|
||||||
Q(n) per iteration: 128056 bytes
|
Q(n) per iteration: 128056 bytes
|
||||||
I(n): 2250.17 flops/byte
|
I(n): 2250.17 flops/byte
|
||||||
W(n): 57629601792.00 flops
|
W(n): 57629601792.00 flops
|
||||||
T(n): 3268490496.00 cycles
|
T(n): 3722795008.00 cycles
|
||||||
P(n): 17.63 flops/cycle
|
P(n): 15.48 flops/cycle
|
||||||
|
|
||||||
=== N_P=5000 N_ITER=200 ===
|
=== N_P=5000 N_ITER=200 ===
|
||||||
W(n) per iteration: 1800369920.00 flops
|
W(n) per iteration: 1800369920.00 flops
|
||||||
Q(n) per iteration: 320056 bytes
|
Q(n) per iteration: 320056 bytes
|
||||||
I(n): 5625.17 flops/byte
|
I(n): 5625.17 flops/byte
|
||||||
W(n): 360073986048.00 flops
|
W(n): 360073986048.00 flops
|
||||||
T(n): 20012742656.00 cycles
|
T(n): 22749288448.00 cycles
|
||||||
P(n): 17.99 flops/cycle
|
P(n): 15.83 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=10000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 2905772800.00 flops
|
||||||
|
Q(n) per iteration: 640056 bytes
|
||||||
|
I(n): 4539.87 flops/byte
|
||||||
|
W(n): 581154570240.00 flops
|
||||||
|
T(n): 90110476288.00 cycles
|
||||||
|
P(n): 6.45 flops/cycle
|
||||||
|
|
||||||
|
|||||||
@@ -1,66 +1,66 @@
|
|||||||
rm -f main_* run_tests *.o *.s variants/*.s variants/*.o headers/*.s headers/*.o
|
rm -f main_* run_tests *.o *.s variants/*.s variants/*.o headers/*.s headers/*.o
|
||||||
/usr/bin/g++ main-float.cpp ./variants/variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_4.cpp -o main_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_4 -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1
|
/usr/bin/g++ main-float.cpp ./variants/variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_4_expfix.cpp -o main_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_4_expfix -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1
|
||||||
=== N_P=50 N_ITER=200 ===
|
=== N_P=50 N_ITER=200 ===
|
||||||
W(n) per iteration: 183700.00 flops
|
W(n) per iteration: 183700.00 flops
|
||||||
Q(n) per iteration: 3256 bytes
|
Q(n) per iteration: 3256 bytes
|
||||||
I(n): 56.42 flops/byte
|
I(n): 56.42 flops/byte
|
||||||
W(n): 36740000.00 flops
|
W(n): 36740000.00 flops
|
||||||
T(n): 3567542.00 cycles
|
T(n): 3907767.50 cycles
|
||||||
P(n): 10.30 flops/cycle
|
P(n): 9.40 flops/cycle
|
||||||
|
|
||||||
=== N_P=100 N_ITER=200 ===
|
=== N_P=100 N_ITER=200 ===
|
||||||
W(n) per iteration: 727400.00 flops
|
W(n) per iteration: 727400.00 flops
|
||||||
Q(n) per iteration: 6456 bytes
|
Q(n) per iteration: 6456 bytes
|
||||||
I(n): 112.67 flops/byte
|
I(n): 112.67 flops/byte
|
||||||
W(n): 145480000.00 flops
|
W(n): 145480000.00 flops
|
||||||
T(n): 12180789.00 cycles
|
T(n): 13510660.00 cycles
|
||||||
P(n): 11.94 flops/cycle
|
P(n): 10.77 flops/cycle
|
||||||
|
|
||||||
=== N_P=200 N_ITER=200 ===
|
=== N_P=200 N_ITER=200 ===
|
||||||
W(n) per iteration: 2894800.00 flops
|
W(n) per iteration: 2894800.00 flops
|
||||||
Q(n) per iteration: 12856 bytes
|
Q(n) per iteration: 12856 bytes
|
||||||
I(n): 225.17 flops/byte
|
I(n): 225.17 flops/byte
|
||||||
W(n): 578960000.00 flops
|
W(n): 578960000.00 flops
|
||||||
T(n): 44522004.00 cycles
|
T(n): 50107380.00 cycles
|
||||||
P(n): 13.00 flops/cycle
|
P(n): 11.55 flops/cycle
|
||||||
|
|
||||||
=== N_P=500 N_ITER=200 ===
|
=== N_P=500 N_ITER=200 ===
|
||||||
W(n) per iteration: 18037000.00 flops
|
W(n) per iteration: 18037000.00 flops
|
||||||
Q(n) per iteration: 32056 bytes
|
Q(n) per iteration: 32056 bytes
|
||||||
I(n): 562.67 flops/byte
|
I(n): 562.67 flops/byte
|
||||||
W(n): 3607399936.00 flops
|
W(n): 3607399936.00 flops
|
||||||
T(n): 212099104.00 cycles
|
T(n): 239951200.00 cycles
|
||||||
P(n): 17.01 flops/cycle
|
P(n): 15.03 flops/cycle
|
||||||
|
|
||||||
=== N_P=1000 N_ITER=200 ===
|
=== N_P=1000 N_ITER=200 ===
|
||||||
W(n) per iteration: 72074000.00 flops
|
W(n) per iteration: 72074000.00 flops
|
||||||
Q(n) per iteration: 64056 bytes
|
Q(n) per iteration: 64056 bytes
|
||||||
I(n): 1125.17 flops/byte
|
I(n): 1125.17 flops/byte
|
||||||
W(n): 14414799872.00 flops
|
W(n): 14414799872.00 flops
|
||||||
T(n): 830612480.00 cycles
|
T(n): 940302272.00 cycles
|
||||||
P(n): 17.35 flops/cycle
|
P(n): 15.33 flops/cycle
|
||||||
|
|
||||||
=== N_P=2000 N_ITER=200 ===
|
=== N_P=2000 N_ITER=200 ===
|
||||||
W(n) per iteration: 288148000.00 flops
|
W(n) per iteration: 288148000.00 flops
|
||||||
Q(n) per iteration: 128056 bytes
|
Q(n) per iteration: 128056 bytes
|
||||||
I(n): 2250.17 flops/byte
|
I(n): 2250.17 flops/byte
|
||||||
W(n): 57629601792.00 flops
|
W(n): 57629601792.00 flops
|
||||||
T(n): 3272956672.00 cycles
|
T(n): 3722942720.00 cycles
|
||||||
P(n): 17.61 flops/cycle
|
P(n): 15.48 flops/cycle
|
||||||
|
|
||||||
=== N_P=5000 N_ITER=200 ===
|
=== N_P=5000 N_ITER=200 ===
|
||||||
W(n) per iteration: 1800369920.00 flops
|
W(n) per iteration: 1800369920.00 flops
|
||||||
Q(n) per iteration: 320056 bytes
|
Q(n) per iteration: 320056 bytes
|
||||||
I(n): 5625.17 flops/byte
|
I(n): 5625.17 flops/byte
|
||||||
W(n): 360073986048.00 flops
|
W(n): 360073986048.00 flops
|
||||||
T(n): 20105635840.00 cycles
|
T(n): 22711234560.00 cycles
|
||||||
P(n): 17.91 flops/cycle
|
P(n): 15.85 flops/cycle
|
||||||
|
|
||||||
=== N_P=10000 N_ITER=200 ===
|
=== N_P=10000 N_ITER=200 ===
|
||||||
W(n) per iteration: 2905772800.00 flops
|
W(n) per iteration: 2905772800.00 flops
|
||||||
Q(n) per iteration: 640056 bytes
|
Q(n) per iteration: 640056 bytes
|
||||||
I(n): 4539.87 flops/byte
|
I(n): 4539.87 flops/byte
|
||||||
W(n): 581154570240.00 flops
|
W(n): 581154570240.00 flops
|
||||||
T(n): 79669575680.00 cycles
|
T(n): 90064855040.00 cycles
|
||||||
P(n): 7.29 flops/cycle
|
P(n): 6.45 flops/cycle
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,66 @@
|
|||||||
|
rm -f main_* run_tests *.o *.s variants/*.s variants/*.o headers/*.s headers/*.o
|
||||||
|
/usr/bin/g++ main-float.cpp ./variants/variant_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_4_expfix.cpp -o main_float_inlining_SoA_AVX512_polyexp_moreavx_ilp_4_expfix -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1
|
||||||
|
=== N_P=50 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 183700.00 flops
|
||||||
|
Q(n) per iteration: 3256 bytes
|
||||||
|
I(n): 56.42 flops/byte
|
||||||
|
W(n): 36740000.00 flops
|
||||||
|
T(n): 3864792.00 cycles
|
||||||
|
P(n): 9.51 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=100 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 727400.00 flops
|
||||||
|
Q(n) per iteration: 6456 bytes
|
||||||
|
I(n): 112.67 flops/byte
|
||||||
|
W(n): 145480000.00 flops
|
||||||
|
T(n): 13472545.00 cycles
|
||||||
|
P(n): 10.80 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=200 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 2894800.00 flops
|
||||||
|
Q(n) per iteration: 12856 bytes
|
||||||
|
I(n): 225.17 flops/byte
|
||||||
|
W(n): 578960000.00 flops
|
||||||
|
T(n): 49757488.00 cycles
|
||||||
|
P(n): 11.64 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=500 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 18037000.00 flops
|
||||||
|
Q(n) per iteration: 32056 bytes
|
||||||
|
I(n): 562.67 flops/byte
|
||||||
|
W(n): 3607399936.00 flops
|
||||||
|
T(n): 238792880.00 cycles
|
||||||
|
P(n): 15.11 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=1000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 72074000.00 flops
|
||||||
|
Q(n) per iteration: 64056 bytes
|
||||||
|
I(n): 1125.17 flops/byte
|
||||||
|
W(n): 14414799872.00 flops
|
||||||
|
T(n): 953924224.00 cycles
|
||||||
|
P(n): 15.11 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=2000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 288148000.00 flops
|
||||||
|
Q(n) per iteration: 128056 bytes
|
||||||
|
I(n): 2250.17 flops/byte
|
||||||
|
W(n): 57629601792.00 flops
|
||||||
|
T(n): 3701525248.00 cycles
|
||||||
|
P(n): 15.57 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=5000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 1800369920.00 flops
|
||||||
|
Q(n) per iteration: 320056 bytes
|
||||||
|
I(n): 5625.17 flops/byte
|
||||||
|
W(n): 360073986048.00 flops
|
||||||
|
T(n): 22775025664.00 cycles
|
||||||
|
P(n): 15.81 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=10000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 2905772800.00 flops
|
||||||
|
Q(n) per iteration: 640056 bytes
|
||||||
|
I(n): 4539.87 flops/byte
|
||||||
|
W(n): 581154570240.00 flops
|
||||||
|
T(n): 90258751488.00 cycles
|
||||||
|
P(n): 6.44 flops/cycle
|
||||||
|
|
||||||
@@ -0,0 +1,58 @@
|
|||||||
|
rm -f main_* run_tests *.o *.s variants/*.s variants/*.o headers/*.s headers/*.o
|
||||||
|
sudo /usr/bin/g++ main-float.cpp ./variants/variant_float_inlining.cpp -o main_float_inlining -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1
|
||||||
|
=== N_P=50 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 183700.00 flops
|
||||||
|
Q(n) per iteration: 3256 bytes
|
||||||
|
I(n): 56.42 flops/byte
|
||||||
|
W(n): 36740000.00 flops
|
||||||
|
T(n): 10826171.00 cycles
|
||||||
|
P(n): 3.39 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=100 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 727400.00 flops
|
||||||
|
Q(n) per iteration: 6456 bytes
|
||||||
|
I(n): 112.67 flops/byte
|
||||||
|
W(n): 145480000.00 flops
|
||||||
|
T(n): 48929320.00 cycles
|
||||||
|
P(n): 2.97 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=200 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 2894800.00 flops
|
||||||
|
Q(n) per iteration: 12856 bytes
|
||||||
|
I(n): 225.17 flops/byte
|
||||||
|
W(n): 578960000.00 flops
|
||||||
|
T(n): 190686384.00 cycles
|
||||||
|
P(n): 3.04 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=500 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 18037000.00 flops
|
||||||
|
Q(n) per iteration: 32056 bytes
|
||||||
|
I(n): 562.67 flops/byte
|
||||||
|
W(n): 3607399936.00 flops
|
||||||
|
T(n): 1427274624.00 cycles
|
||||||
|
P(n): 2.53 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=1000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 72074000.00 flops
|
||||||
|
Q(n) per iteration: 64056 bytes
|
||||||
|
I(n): 1125.17 flops/byte
|
||||||
|
W(n): 14414799872.00 flops
|
||||||
|
T(n): 6172825600.00 cycles
|
||||||
|
P(n): 2.34 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=2000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 288148000.00 flops
|
||||||
|
Q(n) per iteration: 128056 bytes
|
||||||
|
I(n): 2250.17 flops/byte
|
||||||
|
W(n): 57629601792.00 flops
|
||||||
|
T(n): 27468242944.00 cycles
|
||||||
|
P(n): 2.10 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=5000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 1800369920.00 flops
|
||||||
|
Q(n) per iteration: 320056 bytes
|
||||||
|
I(n): 5625.17 flops/byte
|
||||||
|
W(n): 360073986048.00 flops
|
||||||
|
T(n): 192917569536.00 cycles
|
||||||
|
P(n): 1.87 flops/cycle
|
||||||
|
|
||||||
@@ -1,58 +1,66 @@
|
|||||||
rm -f main_* run_tests *.o *.s variants/*.s variants/*.o headers/*.s headers/*.o
|
rm -f main_* run_tests *.o *.s variants/*.s variants/*.o headers/*.s headers/*.o
|
||||||
/usr/bin/g++ main.cpp ./variants/variant_inlining_7_SoA_AVX2_polyexp.cpp -o main_inlining_7_SoA_AVX2_polyexp -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1
|
/usr/bin/g++ main.cpp ./variants/variant_inlining_7_SoA_AVX2_polyexp_expfix.cpp -o main_inlining_7_SoA_AVX2_polyexp_expfix -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1
|
||||||
=== N_P=50 N_ITER=200 ===
|
=== N_P=50 N_ITER=200 ===
|
||||||
W(n) per iteration: 183700.00 flops
|
W(n) per iteration: 183700.00 flops
|
||||||
Q(n) per iteration: 6512 bytes
|
Q(n) per iteration: 6512 bytes
|
||||||
I(n): 28.21 flops/byte
|
I(n): 28.21 flops/byte
|
||||||
W(n): 36740000.00 flops
|
W(n): 36740000.00 flops
|
||||||
T(n): 9225415.00 cycles
|
T(n): 11371033.75 cycles
|
||||||
P(n): 3.98 flops/cycle
|
P(n): 3.23 flops/cycle
|
||||||
|
|
||||||
=== N_P=100 N_ITER=200 ===
|
=== N_P=100 N_ITER=200 ===
|
||||||
W(n) per iteration: 727400.00 flops
|
W(n) per iteration: 727400.00 flops
|
||||||
Q(n) per iteration: 12912 bytes
|
Q(n) per iteration: 12912 bytes
|
||||||
I(n): 56.34 flops/byte
|
I(n): 56.34 flops/byte
|
||||||
W(n): 145480000.00 flops
|
W(n): 145480000.00 flops
|
||||||
T(n): 32320875.00 cycles
|
T(n): 39890030.00 cycles
|
||||||
P(n): 4.50 flops/cycle
|
P(n): 3.65 flops/cycle
|
||||||
|
|
||||||
=== N_P=200 N_ITER=200 ===
|
=== N_P=200 N_ITER=200 ===
|
||||||
W(n) per iteration: 2894800.00 flops
|
W(n) per iteration: 2894800.00 flops
|
||||||
Q(n) per iteration: 25712 bytes
|
Q(n) per iteration: 25712 bytes
|
||||||
I(n): 112.59 flops/byte
|
I(n): 112.59 flops/byte
|
||||||
W(n): 578960000.00 flops
|
W(n): 578960000.00 flops
|
||||||
T(n): 122392560.00 cycles
|
T(n): 153171560.00 cycles
|
||||||
P(n): 4.73 flops/cycle
|
P(n): 3.78 flops/cycle
|
||||||
|
|
||||||
=== N_P=500 N_ITER=200 ===
|
=== N_P=500 N_ITER=200 ===
|
||||||
W(n) per iteration: 18037000.00 flops
|
W(n) per iteration: 18037000.00 flops
|
||||||
Q(n) per iteration: 64112 bytes
|
Q(n) per iteration: 64112 bytes
|
||||||
I(n): 281.34 flops/byte
|
I(n): 281.34 flops/byte
|
||||||
W(n): 3607400000.00 flops
|
W(n): 3607400000.00 flops
|
||||||
T(n): 727457980.00 cycles
|
T(n): 926036960.00 cycles
|
||||||
P(n): 4.96 flops/cycle
|
P(n): 3.90 flops/cycle
|
||||||
|
|
||||||
=== N_P=1000 N_ITER=200 ===
|
=== N_P=1000 N_ITER=200 ===
|
||||||
W(n) per iteration: 72074000.00 flops
|
W(n) per iteration: 72074000.00 flops
|
||||||
Q(n) per iteration: 128112 bytes
|
Q(n) per iteration: 128112 bytes
|
||||||
I(n): 562.59 flops/byte
|
I(n): 562.59 flops/byte
|
||||||
W(n): 14414800000.00 flops
|
W(n): 14414800000.00 flops
|
||||||
T(n): 2871839460.00 cycles
|
T(n): 3676943300.00 cycles
|
||||||
P(n): 5.02 flops/cycle
|
P(n): 3.92 flops/cycle
|
||||||
|
|
||||||
=== N_P=2000 N_ITER=200 ===
|
=== N_P=2000 N_ITER=200 ===
|
||||||
W(n) per iteration: 288148000.00 flops
|
W(n) per iteration: 288148000.00 flops
|
||||||
Q(n) per iteration: 256112 bytes
|
Q(n) per iteration: 256112 bytes
|
||||||
I(n): 1125.09 flops/byte
|
I(n): 1125.09 flops/byte
|
||||||
W(n): 57629600000.00 flops
|
W(n): 57629600000.00 flops
|
||||||
T(n): 11342093520.00 cycles
|
T(n): 14545721140.00 cycles
|
||||||
P(n): 5.08 flops/cycle
|
P(n): 3.96 flops/cycle
|
||||||
|
|
||||||
=== N_P=5000 N_ITER=200 ===
|
=== N_P=5000 N_ITER=200 ===
|
||||||
W(n) per iteration: 1800370000.00 flops
|
W(n) per iteration: 1800370000.00 flops
|
||||||
Q(n) per iteration: 640112 bytes
|
Q(n) per iteration: 640112 bytes
|
||||||
I(n): 2812.59 flops/byte
|
I(n): 2812.59 flops/byte
|
||||||
W(n): 360074000000.00 flops
|
W(n): 360074000000.00 flops
|
||||||
T(n): 70407692300.00 cycles
|
T(n): 90702048200.00 cycles
|
||||||
P(n): 5.11 flops/cycle
|
P(n): 3.97 flops/cycle
|
||||||
|
|
||||||
|
=== N_P=10000 N_ITER=200 ===
|
||||||
|
W(n) per iteration: 2905772704.00 flops
|
||||||
|
Q(n) per iteration: 1280112 bytes
|
||||||
|
I(n): 2269.94 flops/byte
|
||||||
|
W(n): 581154540800.00 flops
|
||||||
|
T(n): 362081083160.00 cycles
|
||||||
|
P(n): 1.61 flops/cycle
|
||||||
|
|
||||||
|
|||||||
@@ -1,66 +1,64 @@
|
|||||||
rm -f main_* run_tests *.o *.s variants/*.s variants/*.o headers/*.s headers/*.o
|
|
||||||
/usr/bin/g++ main.cpp ./variants/variant_inlining_7_SoA_AVX2_polyexp.cpp -o main_inlining_7_SoA_AVX2_polyexp -O3 -march=native -std=c++23 -Wall -Wextra -flto -DFLOPCOUNT=0 -DRANDOM_SEED=0 -DROOFLINE=0 -DBENCHMARK=1
|
|
||||||
=== N_P=50 N_ITER=200 ===
|
=== N_P=50 N_ITER=200 ===
|
||||||
W(n) per iteration: 183700.00 flops
|
W(n) per iteration: 183700.00 flops
|
||||||
Q(n) per iteration: 6512 bytes
|
Q(n) per iteration: 6512 bytes
|
||||||
I(n): 28.21 flops/byte
|
I(n): 28.21 flops/byte
|
||||||
W(n): 36740000.00 flops
|
W(n): 36740000.00 flops
|
||||||
T(n): 9074662.50 cycles
|
T(n): 11368170.00 cycles
|
||||||
P(n): 4.05 flops/cycle
|
P(n): 3.23 flops/cycle
|
||||||
|
|
||||||
=== N_P=100 N_ITER=200 ===
|
=== N_P=100 N_ITER=200 ===
|
||||||
W(n) per iteration: 727400.00 flops
|
W(n) per iteration: 727400.00 flops
|
||||||
Q(n) per iteration: 12912 bytes
|
Q(n) per iteration: 12912 bytes
|
||||||
I(n): 56.34 flops/byte
|
I(n): 56.34 flops/byte
|
||||||
W(n): 145480000.00 flops
|
W(n): 145480000.00 flops
|
||||||
T(n): 31994315.00 cycles
|
T(n): 39909820.00 cycles
|
||||||
P(n): 4.55 flops/cycle
|
P(n): 3.65 flops/cycle
|
||||||
|
|
||||||
=== N_P=200 N_ITER=200 ===
|
=== N_P=200 N_ITER=200 ===
|
||||||
W(n) per iteration: 2894800.00 flops
|
W(n) per iteration: 2894800.00 flops
|
||||||
Q(n) per iteration: 25712 bytes
|
Q(n) per iteration: 25712 bytes
|
||||||
I(n): 112.59 flops/byte
|
I(n): 112.59 flops/byte
|
||||||
W(n): 578960000.00 flops
|
W(n): 578960000.00 flops
|
||||||
T(n): 120234740.00 cycles
|
T(n): 152279380.00 cycles
|
||||||
P(n): 4.82 flops/cycle
|
P(n): 3.80 flops/cycle
|
||||||
|
|
||||||
=== N_P=500 N_ITER=200 ===
|
=== N_P=500 N_ITER=200 ===
|
||||||
W(n) per iteration: 18037000.00 flops
|
W(n) per iteration: 18037000.00 flops
|
||||||
Q(n) per iteration: 64112 bytes
|
Q(n) per iteration: 64112 bytes
|
||||||
I(n): 281.34 flops/byte
|
I(n): 281.34 flops/byte
|
||||||
W(n): 3607400000.00 flops
|
W(n): 3607400000.00 flops
|
||||||
T(n): 719504200.00 cycles
|
T(n): 925130680.00 cycles
|
||||||
P(n): 5.01 flops/cycle
|
P(n): 3.90 flops/cycle
|
||||||
|
|
||||||
=== N_P=1000 N_ITER=200 ===
|
=== N_P=1000 N_ITER=200 ===
|
||||||
W(n) per iteration: 72074000.00 flops
|
W(n) per iteration: 72074000.00 flops
|
||||||
Q(n) per iteration: 128112 bytes
|
Q(n) per iteration: 128112 bytes
|
||||||
I(n): 562.59 flops/byte
|
I(n): 562.59 flops/byte
|
||||||
W(n): 14414800000.00 flops
|
W(n): 14414800000.00 flops
|
||||||
T(n): 2844257700.00 cycles
|
T(n): 3668254420.00 cycles
|
||||||
P(n): 5.07 flops/cycle
|
P(n): 3.93 flops/cycle
|
||||||
|
|
||||||
=== N_P=2000 N_ITER=200 ===
|
=== N_P=2000 N_ITER=200 ===
|
||||||
W(n) per iteration: 288148000.00 flops
|
W(n) per iteration: 288148000.00 flops
|
||||||
Q(n) per iteration: 256112 bytes
|
Q(n) per iteration: 256112 bytes
|
||||||
I(n): 1125.09 flops/byte
|
I(n): 1125.09 flops/byte
|
||||||
W(n): 57629600000.00 flops
|
W(n): 57629600000.00 flops
|
||||||
T(n): 11300324680.00 cycles
|
T(n): 14660040260.00 cycles
|
||||||
P(n): 5.10 flops/cycle
|
P(n): 3.93 flops/cycle
|
||||||
|
|
||||||
=== N_P=5000 N_ITER=200 ===
|
=== N_P=5000 N_ITER=200 ===
|
||||||
W(n) per iteration: 1800370000.00 flops
|
W(n) per iteration: 1800370000.00 flops
|
||||||
Q(n) per iteration: 640112 bytes
|
Q(n) per iteration: 640112 bytes
|
||||||
I(n): 2812.59 flops/byte
|
I(n): 2812.59 flops/byte
|
||||||
W(n): 360074000000.00 flops
|
W(n): 360074000000.00 flops
|
||||||
T(n): 70554568640.00 cycles
|
T(n): 93340296780.00 cycles
|
||||||
P(n): 5.10 flops/cycle
|
P(n): 3.86 flops/cycle
|
||||||
|
|
||||||
=== N_P=10000 N_ITER=200 ===
|
=== N_P=10000 N_ITER=200 ===
|
||||||
W(n) per iteration: 2905772704.00 flops
|
W(n) per iteration: 2905772704.00 flops
|
||||||
Q(n) per iteration: 1280112 bytes
|
Q(n) per iteration: 1280112 bytes
|
||||||
I(n): 2269.94 flops/byte
|
I(n): 2269.94 flops/byte
|
||||||
W(n): 581154540800.00 flops
|
W(n): 581154540800.00 flops
|
||||||
T(n): 281416807980.00 cycles
|
T(n): 362367747120.00 cycles
|
||||||
P(n): 2.07 flops/cycle
|
P(n): 1.60 flops/cycle
|
||||||
|
|
||||||
|
|||||||