Re: [eigen] mixed-precision Cholesky? |
[ Thread Index |
Date Index
| More lists.tuxfamily.org/eigen Archives
]
- To: eigen@xxxxxxxxxxxxxxxxxxx
- Subject: Re: [eigen] mixed-precision Cholesky?
- From: Manoj Rajagopalan <rmanoj@xxxxxxxxx>
- Date: Mon, 12 Jul 2010 09:56:27 -0400
- Organization: EECS Dept., University of Michigan, Ann Arbor, MI, USA
On Thursday 10 June 2010 05:26:30 am Gael Guennebaud wrote:
> On Thu, Jun 10, 2010 at 1:37 AM, Manoj Rajagopalan <rmanoj@xxxxxxxxx> wrote:
> > Hi,
> >
> > I have situation where, due to memory pressure, I need to store a
> > symmetric
> > matrix as real-values but it must solve a complex RHS for a complex
> > solution
> > vector. Currently I am storing the matrix as complex-type so that llt()
> > and ldlt() can be called without compilation errors but is the above
> > situation realizable in Eigen?
> >
> > When invoking
> > real_matrix.selfadjointView<Lower>().ldlt().solveInPlace(complex_vector)
> >
> > I get a gcc 4.2.4 error saying:
> >
> > no matching function for call
> > to ‘ei_cache_friendly_product_colmajor_times_vector(Eigen::DenseIndex&,
> > double*, Eigen::DenseIndex,
> > Eigen::VectorBlock<Eigen::Matrix<std::complex<double>, 33331, 1, 0,
> > 33331, 1>, 33331>, std::complex<double>*, std::complex<double>)’
> >
> >
> > no matching function for call
> > to ‘ei_cache_friendly_product_rowmajor_times_vector(double*,
> > Eigen::DenseIndex, std::complex<double>*, Eigen::DenseIndex&,
> > Eigen::VectorBlock<Eigen::Matrix<std::complex<double>, 33331, 1, 0,
> > 33331, 1>, 33331>&, std::complex<double>)’
> >
> >
> >
> > Would it make sense to introduce a cast<> on LLT and LDLT so that such
> > a mixed-precision operation becomes possible?
>
> The idea is rather to allow mixing types where it makes sense, as for
> products, triangular solves and the like, but I don't know when this will
> be available.
>
> gael
>
Will replacing the call to ei_cache_friendly_product-*() with a high-level
Eigen GEMM routine be a simple fix for the problem? When I call
solveInPlace() on
real_matrix.cast<complex_type>().selfadjointView<Lower>().ldlt(),
this is the point where I get a compile error since
ei_cache_friendly_product*() expect each operand to have a valid coeffRef()
which doesn't make sense for a type-cast matrix.
I wanted to try this myself but I got lost in the template branches that
specialize and optimize :-(
thanks,
Manoj