Challenges in Parallel and Distributed Computing