Describir: Shared memory optimizations for distributed memory programming models