An Analysis of Parallel Programming Techniques for Data Intensive Computation