It's mostly scheduling rules that change. Unified vs Harvard caches make a difference too, because e.g, a Harvard cache can trade increased data cache misses for increased instruction cache hits. That is, if code exhibits more locality, but data doesn't, then a Harvard cache might win, because...