Cache memory design: an art evolves