Designing and building parallel programs: concepts and tools for parallel software engineering