Classical approach with loop tiling + unrolling (saves ~15% with 1500x1500 input)