@renorm, Cuchulainn // numerical linear algebra, design & interfaceTo be honest, I like Eigen design (and interface) much more than Boost uBLAS (as someone noticed, uBLAS is the odd one out).Arrays are also much nicer --
http://eigen.tuxfamily.org/dox/TutorialArrayClass.html (esp. coefficient-wise operations, as easy as in MATLAB; note also the distintion between mathematical vectors & matrices and rich-storage arrays) -- but unfortunately only 2-D.Multiarray is also somewhat convoluted, I mean setting the dimensionality with boost::extents and the access using collections when you want to use operator() (and normally you don't want to use operator[] w/ boost::multi_array, afair that was even slower than nested std::vector): boost::array<array_type::index,3> idx = {{0,0,0}}; A(idx) = 3.14;is what I'd call non-trivial, A(0,0,0) = 3.14;would be much more natural (& preferable). I don't think we should go down this path, but I might be wrong, so let's see.The reason I find it problematic is that it's very non-standard, most (if not all) of the other open-source numerical-algebra libraries for C++ that I'm familiar with use operator() in the natural way (even MATLAB or Fortran 90), so using it runs a risk of confusing anyone else besides uBLAS users.@renorm // SIMD, data types, CPU dispatchingOK, I guess I'll wait for your code, then. Am I to assume you're using raw pointers and SIMD intrinsics?As for the CPU dispatch mechanism -- I assume you're not using {Dispatch on every call, Dispatch on first call, Make pointer at initialization} (all have run-time costs), but probably {Load library at initialization, Dispatch at load time, Dispatch at installation time, Use different executables} for decision on whether to use vectorized instructions and the level thereof -- out of curiosity, which one?