Task-based linear solvers for modern architectures