diff --git a/src/shogun/mathematics/linalg/backend/eigen/Decompositions.cpp b/src/shogun/mathematics/linalg/backend/eigen/Decompositions.cpp index fac1d913b6c..44f1ce9abc5 100644 --- a/src/shogun/mathematics/linalg/backend/eigen/Decompositions.cpp +++ b/src/shogun/mathematics/linalg/backend/eigen/Decompositions.cpp @@ -141,7 +141,14 @@ void LinalgBackendEigen::svd_impl( { case linalg::SVDAlgorithm::BidiagonalDivideConquer: { -#if EIGEN_VERSION_AT_LEAST(3, 3, 0) +// Building BDC-SVD templates OOMs on 32 Bit ARM hardware +#if (defined(__arm__) || defined (__thumb__) || defined(__TARGET_ARCH_ARM) || \ + defined(__TARGET_ARCH_THUMB) || defined (_ARM) || defined(_M_ARM) || \ + defined(_M_ARMT) || defined(__arm)) && !defined(__aarch64__) + SG_SWARNING( + "BDC-SVD is not supported on 32 Bit ARM hardware.\n" + "Falling back on Jacobi-SVD.\n") +#elif EIGEN_VERSION_AT_LEAST(3, 3, 0) auto svd_eig = A_eig.bdcSvd(thin_U ? Eigen::ComputeThinU : Eigen::ComputeFullU); s_eig = svd_eig.singularValues().template cast();