Why Your CPU Is Fast But Your Program Is Slow: Understanding the Memory Wall