Challenges and opportunities in many-core computing