  In this paper, we propose an optimization selection methodology for the
ubiquitous sparse matrix-vector multiplication (SpMV) kernel. We propose two
models that attempt to identify the major performance bottleneck of the kernel
for every instance of the problem and then select an appropriate optimization
to tackle it. Our first model requires online profiling of the input matrix in
order to detect its most prevailing performance issue, while our second model
only uses comprehensive structural features of the sparse matrix. Our method
delivers high performance stability for SpMV across different platforms and
sparse matrices, due to its application and architecture awareness. Our
experimental results demonstrate that a) our approach is able to distinguish
and appropriately optimize special matrices in multicore platforms that fall
out of the standard class of memory bandwidth bound matrices, and b) lead to a
significant performance gain of 29% in a manycore platform compared to an
architecture-centric optimization, as a result of the successful selection of
the appropriate optimization for the great majority of the matrices. With a
runtime overhead equivalent to a couple dozen SpMV operations, our approach is
practical for use in iterative numerical solvers of real-life applications.
