Optimal Data Placement for Distributed Memory Architectures