Reducing communication bottlenecks in iterative solvers