Parallel Computing: From Multicores and GPU's to Petascale