Optimizing Data Movement in SoCs and Advanced Packages