  We describe a universal modeling approach for predicting single- and
multicore runtime of steady-state loops on server processors. To this end we
strictly differentiate between application and machine models: An application
model comprises the loop code, problem sizes, and other runtime parameters,
while a machine model is an abstraction of all performance-relevant properties
of a CPU. We introduce a generic method for determining machine models and
present results for relevant server-processor architectures by Intel, AMD, IBM,
and Marvell/Cavium. Considering this wide range of architectures, the set of
features required for adequate performance modeling is surprisingly small. To
validate our approach, we compare performance predictions to empirical data for
an OpenMP-parallel preconditioned CG algorithm, which includes compute- and
memory-bound kernels. Both single- and multicore analysis shows that the model
exhibits average and maximum relative errors of 5% and 10%. Deviations from the
model and insights gained are discussed in detail.
