Task-based hybrid linear solver for distributed memory heterogeneous architectures