Hardware-Assisted Data Movement Optimizations For Heterogeneous System Architectures