Parallel Programming and High Performance Computing