Heterogeneity-Aware Architectures