  This paper studies two variants of tiling: iteration space tiling (or loop
blocking) and cache-oblivious methods that recursively split the iteration
space with divide-and-conquer. The key question to answer is when we should be
using one over the other. The answer to this question is complicated for modern
architecture due to a number of reasons. In this paper, we present a detailed
empirical study to answer this question for a range of kernels that fit the
polyhedral model. Our study is based on a generalized cache oblivious code
generator that support this class, which is a superset of those supported by
existing tools. The conclusion is that cache oblivious code is most useful when
the aim is to have reduced off-chip memory accesses, e.g., lower energy, albeit
certain situations that diminish its effectiveness exist.
