On Jul 3, 2010, at 5:41 AM, Aron Ahmadia wrote:
> "C++ templates are pretty much inadequate for this because you would want to
> flatten the recursive types (not to mention the error message and
> compilation time insanity)."
>
> Lets take the error message and compilation time insanity as an aside for now.
>
> I am not sure I understand your argument here (I apologize if I talk past
> you, please feel free to clarify). I am surmising from the rest of your
> paragraph that you feel it would be most beneficial to users to have the full
> flexibility of mixed-precision with matrices/vectors, i.e. A = A1 + A2, where
> A1 is single-precision and A2 is double-precision. The layer at which you
> express your linear algebra algorithms should be unaware of the data that
> composes a given matrix A. Dynamic polymorphism (what PETSc uses) combined
> with template programming has the potential to allow this sort of
> mixed-precision abstraction.
"Potential" is the correct word it. It has potential but achieving it in a
general flexible user friendly way appears very difficult. And much time of
smart (and some dumb) people has been spent trying.
Barry
> You could do this in C, but I think you would be copy-pastaing a lot of
> low-level code, i.e. you would have to write separate routines ahead of time
> for every scalar type you would like to support if you would like to be able
> to use them simultaneously.
>
> A
>
> On Fri, Jul 2, 2010 at 9:45 PM, Jed Brown <jed at 59a2.org> wrote:
> On Tue, 29 Jun 2010 15:26:38 -0500, Matthew Knepley <knepley at gmail.com>
> wrote:
> > I am not so sure here. Our problem is not with type parametrization so much
> > I think (since MatScalar is there)
> > but with mixing this with another value type. I suspect that a templated
> > version would have 1G of compiler
> > errors right now.
>
> PETSc's philosophy often involves moving the solver to the highest level
> of control (instead of rolling loops around the solver as an ad-hoc way
> to answer a question of interest). If you have matrices/vectors with
> different scalar type/precision, then you would naturally want entries
> of mixed type within single matrices and vectors (and usually mixed type
> within blocks associated with nodes/cells of your discretization). C++
> templates are pretty much inadequate for this because you would want to
> flatten the recursive types (not to mention the error message and
> compilation time insanity).
>
> Jed
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.mcs.anl.gov/pipermail/petsc-dev/attachments/20100704/b76f74fa/attachment.html>