Parallel Programming: for Multicore and Cluster Systems