After reading the first answer here about how the best way to find the most performant sparse solver is to try almost everything, I began to wonder if there was any past work on libraries or research for adaptive libraries.
What I mean by an adaptive library is one that implements (or links to) a wide range of iterative and direct solvers, attempting different ones over the course of a simulation to find the best performer automatically. While simple simulations likely wouldn't gain from this sort of system, I am currently working with simulations that involve on the order of a million solves. Even if the first few dozen of my solves were a couple orders of magnitude slower than the rest as it converged to a near optimum solver setup speed-ups of only a few percent over what I would have chosen myself would easily make up for the extra time.
Obviously such a system would require that each matrix being solved would have to share characteristics with previous ones on some level, but this is usually the case in FD, FV, or FE models. So my question is, do such libraries exist, and what are some of the pitfalls an implementation of one may experience with regards to performance?