import os
import sys
import subprocess
from gen_code_tables import *
if not os.path.exists("benchmarks") or not os.path.exists("python"):
sys.exit("You must run this script in the main project directory.")
if len(sys.argv) < 2 or len(sys.argv) > 3 or sys.argv[1] not in {"u16", "u32", "u64"}:
sys.exit("Usage: %s [u16 | u32 | u64] [implied | univ]" % sys.argv[0])
write_word = sys.argv[1]
dist = sys.argv[2] if len(sys.argv) == 3 else "univ"
if dist not in {"implied", "univ"}:
sys.exit("Distribution must be 'implied' or 'univ'")
first_time = True
for bits in range(1, 17):
value_max = 2**bits - 1
print(
"\nBenchmarking with write word = %s, table bits = %d\n" % (write_word, bits),
file=sys.stderr,
)
for tables_num in [1, 2]:
subprocess.check_call(
"cargo clean",
shell=True,
cwd="benchmarks",
)
merged_table = tables_num == 1
gen_gamma(
read_bits=11, write_max_val=value_max,
merged_table=merged_table,
)
gen_delta(
read_bits=11, write_max_val=value_max,
merged_table=merged_table,
)
gen_zeta(
read_bits=12, write_max_val=value_max,
k=3,
merged_table=merged_table,
)
if value_max >= 62:
gen_omega(
read_bits=11, write_max_val=value_max,
merged_table=merged_table,
)
features = write_word
if dist == "univ":
features = "univ," + features
stdout = subprocess.check_output(
"cargo run --release --no-default-features --features %s" % features,
shell=True,
env={
**os.environ,
},
cwd="benchmarks",
).decode()
for i in range(4, 5):
gamma_bits = 2 * i + 1
gamma_value_max = 2**gamma_bits - 1
gen_gamma(
read_bits=gamma_bits, write_max_val=gamma_value_max,
merged_table=merged_table,
)
features = "delta_gamma,%s" % write_word
if dist == "univ":
features = "univ," + features
stdout += subprocess.check_output(
"cargo run --release --no-default-features --features %s" % features,
shell=True,
env={
**os.environ,
"RUSTFLAGS": "-C target-cpu=native",
},
cwd="benchmarks",
).decode()
if first_time:
print("max,tables_num," + stdout.split("\n")[0])
first_time = False
for line in stdout.split("\n")[1:]:
if value_max < 62 and "omega" in line:
continue
if len(line.strip()) != 0:
print("{},{},{}".format(value_max + 1, tables_num, line))
sys.stdout.flush()
generate_default_tables()