Opportunities and Challenges for Parallel Computing in Science and Engineering