Structured Parallel Programming: Patterns for Efficient Computation