Scalable Heterogeneous Supercomputing: Programming Methodologies and Automated Code Generation