Energy-Efficiency Optimization Techniques for Computing Clusters: Exploiting the Heterogeneities