Hardware-Software Co-Design for Machine Learning