An Introduction to Parallel Programming