As we have a variable number of hardware counters that can be enabled at
runtime, each with a different name, we need to create a dynamic set of
configuration files for Paraver. We also need to specify some options
needed to properly see the timeline for HWC. For now we leave the
generation of CFG to the minimum features required to cover HWC.
When loading CPUs for the loom, we cannot use loom_get_cpu() to access
the CPUs of the loom by their logical index, as it is not yet populated.
The check comes from load_cpus() which tries to prevent duplicated
entries in CPU logical indices, but this check is already performed when
building the cpus_array, so it is not needed.
Tested-by: Arnau Cinca <arnau.cinca@bsc.es>
If a process fails in the background, bash ignores it even when running
with set -e. To address it, we store a token in a file per each rank,
which only gets written when each process finishes properly. Then we
make sure that each rank has completed successfully, otherwise we fail
the test.
Executing the taskyield in a loop causes the runtime to maximize the
probablily that we end up running the task again before we have the
chance to emit the PPe event, so making the emulator panic as this
breaks the current OpenMP task model.
OpenMPI doesn't work on jungle machines unless it is properly
configured. We should eventually move to the same configuration that we
use for packages in jungle.
Ensure that we can successfully process a trace that has nOS-V threads
without the can_breakdown flag set to true. We simply don't enable the
nOS-V breakdown, but other models can enable it.
As we now have OpenMP and nOS-V models for breakdown, we may have the
situation in which nOS-V traces don't have enough events to enable the
breakdown model, but we do on OpenMP. Rather than stopping, disable the
nOS-V model with a warning and continue.
Ensure we can call nosv_yield in a loop without generating a lot of
events when using the level 3 instrumentation level. Noisy events are
now moved to level 4, so they shouldn't appear on the trace.
Additionally, make sure that the noisy events appear on level 4.
The events are emitted when we enter the scheduler with the non-blocking
flag, which is usually the case when using the nosv_yield and
nosv_schedpoint API functions.
See: https://gitlab.bsc.es/nos-v/nos-v/-/merge_requests/155
A pointer may not fit in a off_t type, so we first cast it to intptr_t
which must be able to hold it, then compute the diff which should fit in
a off_t and perform the cast.
Reported-by: Miquel Vidal Piñol <miquel.vidal@bsc.es>