try to overlap communication and computation