Thanks for the patch, Don. I'm on vacation now, but I'll apply it when I get back.

As for why "getDot" involves pattern matching, it is because a vector is either a pointer to raw storage, or a conjugated vector. I wrote a blog post about this for those of you who are interested ( http://quantile95.com/2008/06/12/blas-data-types/ ).

The current data type is this:

data DVector t n e =
      DV { fptr   :: !(ForeignPtr e)
         , offset :: !Int
         , len    :: !Int
         , stride :: !Int
         }
    | C !(DVector t n e)

Now, it isn't strictly necessary to use an algebraic data type-- I could have just used a boolean flag, but the code is a little cleaner this way. I haven't done any tests to see what the difference in performance is. I would expect that a pattern match between two alternatives would be just as fast as checking a boolean flag.

The good news is that this is a constant-time overhead. For larger vectors, getDot should approach the performance of a raw cblas_ddot call.



Patrick

_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to