An introduction to parallel programming