  Complex applications running on multicore processors show a rich performance
phenomenology. The growing number of cores per ccNUMA domain complicates
performance analysis of memory-bound code since system noise, load imbalance,
or task-based programming models can lead to thread desynchronization. Hence,
the simplifying assumption that all cores execute the same loop can not be
upheld. Motivated by observations on plain and modified versions of the HPCG
benchmark, we construct a performance model of execution of memory-bound loop
kernels. It can predict the memory bandwidth share per kernel on a memory
contention domain depending on the number of active cores and which other
workload the kernel is paired with. The only code features required are the
single-thread cache line access frequency per kernel, which is directly related
to the single-thread memory bandwidth, and its saturated bandwidth. It can
either be measured directly or predicted using the Execution-Cache-Memory (ECM)
performance model. The computational intensity of the kernels and the detailed
structure of the code is of no significance. We validate our model on Intel
Broadwell, Intel Cascade Lake, and AMD Rome processors pairing various
streaming and stencil kernels. The error in predicting the bandwidth share per
kernel is less than 8%.
