Fix MSVC GPU build.

This commit is contained in:
Antonio Sánchez 2024-02-27 23:26:06 +00:00
parent a2f8eba026
commit a962a27594
2 changed files with 16 additions and 15 deletions

View File

@ -847,6 +847,9 @@ struct random_longdouble_impl {
return result;
}
};
// GPUs treat long double as double.
#ifndef EIGEN_GPU_COMPILE_PHASE
template <>
struct random_longdouble_impl<false> {
using Impl = random_impl<double>;
@ -863,6 +866,7 @@ struct random_impl<long double> {
}
static EIGEN_DEVICE_FUNC inline long double run() { return random_longdouble_impl<>::run(); }
};
#endif
template <typename Scalar>
struct random_default_impl<Scalar, false, true> {

View File

@ -612,7 +612,18 @@ class JacobiSVD : public SVDBase<JacobiSVD<MatrixType_, Options_> > {
using Base::rows;
private:
void allocate(Index rows, Index cols, unsigned int computationOptions);
void allocate(Index rows_, Index cols_, unsigned int computationOptions) {
if (Base::allocate(rows_, cols_, computationOptions)) return;
eigen_assert(!(ShouldComputeThinU && int(QRPreconditioner) == int(FullPivHouseholderQRPreconditioner)) &&
!(ShouldComputeThinU && int(QRPreconditioner) == int(FullPivHouseholderQRPreconditioner)) &&
"JacobiSVD: can't compute thin U or thin V with the FullPivHouseholderQR preconditioner. "
"Use the ColPivHouseholderQR preconditioner instead.");
m_workMatrix.resize(diagSize(), diagSize());
if (cols() > rows()) m_qr_precond_morecols.allocate(*this);
if (rows() > cols()) m_qr_precond_morerows.allocate(*this);
}
JacobiSVD& compute_impl(const MatrixType& matrix, unsigned int computationOptions);
protected:
@ -650,20 +661,6 @@ class JacobiSVD : public SVDBase<JacobiSVD<MatrixType_, Options_> > {
WorkMatrixType m_workMatrix;
};
template <typename MatrixType, int Options>
void JacobiSVD<MatrixType, Options>::allocate(Index rows_, Index cols_, unsigned int computationOptions_) {
if (Base::allocate(rows_, cols_, computationOptions_)) return;
eigen_assert(!(ShouldComputeThinU && int(QRPreconditioner) == int(FullPivHouseholderQRPreconditioner)) &&
!(ShouldComputeThinU && int(QRPreconditioner) == int(FullPivHouseholderQRPreconditioner)) &&
"JacobiSVD: can't compute thin U or thin V with the FullPivHouseholderQR preconditioner. "
"Use the ColPivHouseholderQR preconditioner instead.");
m_workMatrix.resize(diagSize(), diagSize());
if (cols() > rows()) m_qr_precond_morecols.allocate(*this);
if (rows() > cols()) m_qr_precond_morerows.allocate(*this);
}
template <typename MatrixType, int Options>
JacobiSVD<MatrixType, Options>& JacobiSVD<MatrixType, Options>::compute_impl(const MatrixType& matrix,
unsigned int computationOptions) {