in perfkitbenchmarker/linux_packages/omb.py [0:0]
def RunBenchmark(request: RunRequest) -> Iterator[RunResult]:
"""Yields the RunResult of running the microbenchmark.
Args:
request: Run configuration.
"""
vms = request.vms
name = request.test_name
params = {}
if _NUMBER_ITERATIONS.value:
params['--iterations'] = _NUMBER_ITERATIONS.value
if _SYNC_OPTION.value:
params['--sync-option'] = _SYNC_OPTION.value
if request.message_size:
# flag does not work on cas_latency and fop_latency, always runs with size=8
# for barrier and ibarrier does not appear to set a message size
if ':' in str(request.message_size):
params['-m'] = f'{request.message_size}'
else:
# Pass in '-m size:size' to only do one size.
params['-m'] = f'{request.message_size}:{request.message_size}'
if _NUM_RECEIVER_THREADS.value:
value = str(_NUM_RECEIVER_THREADS.value)
if _NUM_SERVER_THREADS.value:
value += f':{_NUM_SERVER_THREADS.value}'
# --num_threads errors out with 'Invalid option [-]'
params['-t'] = value
for processes_per_host in FLAGS.omb_mpi_processes:
# special case processes_per_host=0 means use all the real cores
processes_per_host = processes_per_host or vms[0].NumCpusForBenchmark(True)
if name in _SINGLE_THREADED_BENCHMARKS and processes_per_host != 1:
continue
number_processes = processes_per_host * len(vms)
try:
start_time = time.time()
txt, full_cmd = _RunBenchmark(
vms[0], name, _MPI_PERHOST.value, number_processes, vms, params
)
run_time = time.time() - start_time
except errors.VirtualMachine.RemoteCommandError:
logging.exception(
'Error running %s benchmark with %s MPI proccesses',
name,
number_processes,
)
continue
yield RunResult(
name=name,
metadata=_ParseBenchmarkMetadata(txt),
data=_ParseBenchmarkData(name, txt),
full_cmd=full_cmd,
units='MB/s' if 'MB/s' in txt else 'usec',
params=params,
mpi_vendor=FLAGS.mpi_vendor,
mpi_version=_GetMpiVersion(vms[0]),
value_column=BENCHMARKS[name].value_column,
number_processes=number_processes,
run_time=run_time,
pinning=ParseMpiPinning(txt.splitlines()),
perhost=_MPI_PERHOST.value,
mpi_env={
k: v
for k, v in [
envvar.split('=', 1)
for envvar in FLAGS.omb_mpi_env + FLAGS.omb_mpi_genv
]
},
)