Programming models and heterogeneity in HPC