Hardware-Software Co-Design for High Performance Computing (Co-HPC)