Parallel Programming and Algorithms