Adaptive Memory Management For Cpu-Gpu Heterogeneous Systems