Hardware and software techniques for scalable thousand-core systems