68 lines
2.3 KiB
Python

from __future__ import annotations
import concurrent.futures
import tempfile
import time
import pandas as pd
from protocol.temporalmix import TemporalMixType
from queuesim.paramset import ParameterSet
from queuesim.queuesim import IterationInfo, _submit_iterations
from queuesim.util import format_elapsed_time
def benchmark(num_workers: int):
paramset = ParameterSet(
id=1,
num_nodes=100,
peering_degree=4,
min_queue_size=10,
transmission_rate=10,
num_sent_msgs=100,
num_senders=10,
queue_type=TemporalMixType.NONE,
num_iterations=100,
)
with tempfile.TemporaryDirectory() as tmpdir:
start_time = time.time()
future_map: dict[
concurrent.futures.Future[tuple[bool, float]], IterationInfo
] = dict()
with concurrent.futures.ProcessPoolExecutor(
max_workers=num_workers
) as executor:
future_map.update(
_submit_iterations(paramset=paramset, executor=executor, outdir=tmpdir)
)
# Wait until all iterations are done
iter_durations: list[float] = []
for future in concurrent.futures.as_completed(future_map):
iter = future_map[future]
succeeded, duration = future.result()
if not succeeded:
print("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")
print("ITERATION FAILED: See the err file")
print(iter)
print("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")
iter_durations.append(duration)
# If all iterations of the paramset are done, print a log
if len(iter_durations) == iter.paramset.num_iterations:
iter_durations_series = pd.Series(iter_durations)
print("================================================")
print("ALL ITERATIONS DONE")
print(f"NUM_WORKERS: {num_workers}")
print(f"PARAMSET: {paramset}")
print(
f"TOTAL DURATION: {format_elapsed_time(time.time() - start_time)}"
)
print("ITERATION DURATIONS:")
print(iter_durations_series.describe())
print("================================================")
break