Parallel Computing in the era of the Cloud and Heterogeneous Computing