G'day all. I wrote:
This means that if you want to invert a matrix, you have to pick an algorithm appropriate to your problem.
Quoting Hossein Haeri
And that's, AFAIK, what Policy-Based Design (PBD) is for.
The purpose of Policy-Based Design, as I understand it, is to cleanly separate mechanism and policy, even in places where mechanism needs to call on policy. In the case of inverting matrices, policy can be perfectly well implemented as a layer above (e.g. LAPACK), so BLAS doesn't need to know about it.
Sorry, but I'm not with you at all. In fact, I'm about to give the same answer I gave to Yoann; BLAS, generally, stands for "basic linear algebraic" algorithms, and not for "basic algoirthms" of "linear algebra". Got the point? Am I right? Or, am I missing anything?
BLAS officially stands for Basic Linear Algebra Subprograms. A little history might help here. (Note: I've taken liberties with the "history" that follows, because I'm not a historian and the purpose of what follows is not to be an accurate chronicle, but rather to talk about the purpose of BLAS.) BLAS dates from the early days of numeric supercomputing. Supercomputers have various capabilities (vector pipelines and so forth) which are not easily used by a compiler for a general-purpose language like Fortran. A lot of research has gone into automatically finding opportunities to use these hardware features with varying degrees of success, but no real guarantees. So rather than wait for Sufficiently Smart Compilers to appear, people used a standard library instead. This library is BLAS. Supercomputer vendors might ship their own version BLAS, tuned to take advantage of the available hardware and do the rest in software. In other words, BLAS is really, really Basic. An analogy is that base-level OpenGL is really, really basic too. In fact, it's not terribly useful by itself; at the very least, you generally want GLU as well. Cheers, Andrew Bromage