Energy-Aware Thread And Data Management In Heterogeneous Multi-Core, Multi-Memory Systems