Hardware-Software Co-Design For Reliable And Efficient Heterogeneous Systems