Compilation-time data decomposition optimization for data parallel programs