@@ -691,6 +691,7 @@ template <typename FPType, CpuType cpu>
691691bool solveEquationsSystemWithSpectralDecomposition (FPType * a, FPType * b, size_t n, size_t nX, bool sequential)
692692{
693693 DAAL_PROFILER_TASK_WITH_ARGS (solveEquationsSystemWithSpectralDecomposition, n, nX);
694+ std::cout << " solveEquationsSystemWithSpectralDecomposition1" << std::endl;
694695 /* Storage for the eigenvalues.
695696 Note: this allocates more size than they might require when nX > 1, because the same
696697 buffer will get reused later on and needs the extra size. Those additional entries
@@ -711,20 +712,22 @@ bool solveEquationsSystemWithSpectralDecomposition(FPType * a, FPType * b, size_
711712 FPType zero = 0 ;
712713 DAAL_INT info;
713714 DAAL_INT num_eigenvalues;
714-
715+ std::cout << " solveEquationsSystemWithSpectralDecomposition2 " << std::endl;
715716 /* Query the procedure for size of required buffer */
716717 DAAL_INT lwork_query_indicator = -1 ;
717718 FPType buffer_size_work = 0 ;
718719 DAAL_INT buffer_size_iwork = 0 ;
719720 if (sequential)
720721 {
722+ std::cout << " solveEquationsSystemWithSpectralDecomposition3" << std::endl;
721723 LapackInst<FPType, cpu>::xxsyevr (&jobz, &range, &uplo, (DAAL_INT *)&n, a, (DAAL_INT *)&n, nullptr , nullptr , nullptr , nullptr , &zero,
722724 &num_eigenvalues, eigenvalues.get (), eigenvectors.get (), (DAAL_INT *)&n, buffer_isuppz.get (),
723725 &buffer_size_work, &lwork_query_indicator, &buffer_size_iwork, &lwork_query_indicator, &info);
724726 }
725727
726728 else
727729 {
730+ std::cout << " solveEquationsSystemWithSpectralDecomposition4" << std::endl;
728731 LapackInst<FPType, cpu>::xsyevr (&jobz, &range, &uplo, (DAAL_INT *)&n, a, (DAAL_INT *)&n, nullptr , nullptr , nullptr , nullptr , &zero,
729732 &num_eigenvalues, eigenvalues.get (), eigenvectors.get (), (DAAL_INT *)&n, buffer_isuppz.get (),
730733 &buffer_size_work, &lwork_query_indicator, &buffer_size_iwork, &lwork_query_indicator, &info);
@@ -746,34 +749,41 @@ bool solveEquationsSystemWithSpectralDecomposition(FPType * a, FPType * b, size_
746749 /* Perform Q*diag(l)*Q' factorization of A */
747750 if (sequential)
748751 {
752+ std::cout << " solveEquationsSystemWithSpectralDecomposition5" << std::endl;
749753 LapackInst<FPType, cpu>::xxsyevr (&jobz, &range, &uplo, (DAAL_INT *)&n, a, (DAAL_INT *)&n, nullptr , nullptr , nullptr , nullptr , &zero,
750754 &num_eigenvalues, eigenvalues.get (), eigenvectors.get (), (DAAL_INT *)&n, buffer_isuppz.get (),
751755 work_buffer.get (), &work_buffer_size, iwork_buffer.get (), &buffer_size_iwork, &info);
752756 }
753757 else
754758 {
755- LapackInst<FPType, cpu>::xsyevr (&jobz, &range, &uplo, (DAAL_INT *)&n, a, (DAAL_INT *)&n, nullptr , nullptr , nullptr , nullptr , &zero,
756- &num_eigenvalues, eigenvalues.get (), eigenvectors.get (), (DAAL_INT *)&n, buffer_isuppz.get (),
757- work_buffer.get (), &work_buffer_size, iwork_buffer.get (), &buffer_size_iwork, &info);
759+ std::cout << " solveEquationsSystemWithSpectralDecomposition6" << std::endl;
760+ LapackInst<FPType, cpu>::xxsyevr (&jobz, &range, &uplo, (DAAL_INT *)&n, a, (DAAL_INT *)&n, nullptr , nullptr , nullptr , nullptr , &zero,
761+ &num_eigenvalues, eigenvalues.get (), eigenvectors.get (), (DAAL_INT *)&n, buffer_isuppz.get (),
762+ work_buffer.get (), &work_buffer_size, iwork_buffer.get (), &buffer_size_iwork, &info);
763+ std::cout << " solveEquationsSystemWithSpectralDecomposition61" << std::endl;
758764 }
759765 if (info) return false ;
760-
766+ std::cout << " solveEquationsSystemWithSpectralDecomposition62 " << std::endl;
761767 /* Components with small singular values get eliminated using the exact same logic as 'gelsd' with default parameters
762768 Note: these are hard-coded versions of machine epsilon for single and double precision. They aren't obtained through
763769 'std::numeric_limits' in order to avoid potential template instantiation errors with some types. */
764770 const FPType eps = std::is_same<FPType, float >::value ? 1.1920929e-07 : 2.220446049250313e-16 ;
771+ std::cout << " solveEquationsSystemWithSpectralDecomposition621" << std::endl;
772+ std::cout << " eigen equals:" << eigenvalues[n - 1 ] << std::endl;
765773 if (eigenvalues[n - 1 ] <= eps) return false ;
774+ std::cout << " solveEquationsSystemWithSpectralDecomposition63" << std::endl;
766775 const double component_threshold = eps * eigenvalues[n - 1 ];
767776 DAAL_INT num_discarded;
768777 for (num_discarded = 0 ; num_discarded < static_cast <DAAL_INT>(n) - 1 ; num_discarded++)
769778 {
770779 if (eigenvalues[num_discarded] > component_threshold) break ;
771780 }
772-
781+ std::cout << " solveEquationsSystemWithSpectralDecomposition7 " << std::endl;
773782 /* Create the square root of the inverse: Qis = Q * diag(1 / sqrt(l)) */
774783 DAAL_INT num_taken = static_cast <DAAL_INT>(n) - num_discarded;
775784 daal::internal::MathInst<FPType, cpu>::vSqrt (num_taken, eigenvalues.get () + num_discarded, eigenvalues.get () + num_discarded);
776785 DAAL_INT one = 1 ;
786+ std::cout << " solveEquationsSystemWithSpectralDecomposition8" << std::endl;
777787 for (size_t col = num_discarded; col < n; col++)
778788 {
779789 const FPType scale = eigenvalues[col];
@@ -787,14 +797,15 @@ bool solveEquationsSystemWithSpectralDecomposition(FPType * a, FPType * b, size_
787797 LapackInst<FPType, cpu>::xrscl ((DAAL_INT *)&n, &scale, eigenvectors.get () + col * n, &one);
788798 }
789799 }
790-
800+ std::cout << " solveEquationsSystemWithSpectralDecomposition9 " << std::endl;
791801 /* Now calculate the actual solution: Qis * Qis' * B */
792802 char trans_yes = ' T' ;
793803 char trans_no = ' N' ;
794804 FPType one_fp = 1 ;
795805 const size_t eigenvectors_offset = static_cast <size_t >(num_discarded) * n;
796806 if (sequential)
797807 {
808+ std::cout << " solveEquationsSystemWithSpectralDecomposition12" << std::endl;
798809 if (nX == 1 )
799810 {
800811 BlasInst<FPType, cpu>::xxgemv (&trans_yes, (DAAL_INT *)&n, &num_taken, &one_fp, eigenvectors.get () + eigenvectors_offset, (DAAL_INT *)&n,
@@ -813,19 +824,19 @@ bool solveEquationsSystemWithSpectralDecomposition(FPType * a, FPType * b, size_
813824 (DAAL_INT *)&n);
814825 }
815826 }
816-
817827 else
818828 {
829+ std::cout << " solveEquationsSystemWithSpectralDecomposition13" << std::endl;
819830 if (nX == 1 )
820831 {
821832 BlasInst<FPType, cpu>::xgemv (&trans_yes, (DAAL_INT *)&n, &num_taken, &one_fp, eigenvectors.get () + eigenvectors_offset, (DAAL_INT *)&n, b,
822833 &one, &zero, eigenvalues.get (), &one);
823834 BlasInst<FPType, cpu>::xgemv (&trans_no, (DAAL_INT *)&n, &num_taken, &one_fp, eigenvectors.get () + eigenvectors_offset, (DAAL_INT *)&n,
824835 eigenvalues.get (), &one, &zero, b, &one);
825836 }
826-
827837 else
828838 {
839+ std::cout << " solveEquationsSystemWithSpectralDecomposition11" << std::endl;
829840 BlasInst<FPType, cpu>::xgemm (&trans_yes, &trans_no, &num_taken, (DAAL_INT *)&nX, (DAAL_INT *)&n, &one_fp,
830841 eigenvectors.get () + eigenvectors_offset, (DAAL_INT *)&n, b, (DAAL_INT *)&n, &zero, eigenvalues.get (),
831842 &num_taken);
@@ -841,29 +852,36 @@ bool solveEquationsSystemWithSpectralDecomposition(FPType * a, FPType * b, size_
841852template <typename FPType, CpuType cpu>
842853bool solveSymmetricEquationsSystem (FPType * a, FPType * b, size_t n, size_t nX, bool sequential)
843854{
855+ std::cout << " here symmetric system1" << std::endl;
844856 DAAL_PROFILER_TASK_WITH_ARGS (solveSymmetricEquationsSystem, n, nX);
845857 /* Copy data for fallback from Cholesky to spectral decomposition */
846858 TArrayScalable<FPType, cpu> aCopy (n * n);
847859 TArrayScalable<FPType, cpu> bCopy (n * nX);
848860 DAAL_CHECK_MALLOC (aCopy.get ());
849861 DAAL_CHECK_MALLOC (bCopy.get ());
850-
862+ std::cout << " here symmetric system2 " << std::endl;
851863 int copy_status = services::internal::daal_memcpy_s (aCopy.get (), n * n * sizeof (FPType), a, n * n * sizeof (FPType));
852864 copy_status += services::internal::daal_memcpy_s (bCopy.get (), n * nX * sizeof (FPType), b, n * nX * sizeof (FPType));
853865
854866 if (copy_status != 0 ) return false ;
855-
867+ std::cout << " here symmetric system3 " << std::endl;
856868 /* Try to solve with Cholesky factorization */
857869 if (!solveEquationsSystemWithCholesky<FPType, cpu>(a, b, n, nX, sequential))
858870 {
871+ std::cout << " here symmetric system4" << std::endl;
859872 /* Fall back to spectral decomposition */
860873 bool status = solveEquationsSystemWithSpectralDecomposition<FPType, cpu>(aCopy.get (), bCopy.get (), n, nX, sequential);
874+ std::cout << " here symmetric system5" << std::endl;
861875 if (status)
862876 {
877+ std::cout << " here symmetric system5" << std::endl;
863878 status = status && (services::internal::daal_memcpy_s (b, n * nX * sizeof (FPType), bCopy.get (), n * nX * sizeof (FPType)) == 0 );
879+ std::cout << " here symmetric system6" << std::endl;
864880 }
881+ std::cout << " here symmetric system5555" << std::endl;
865882 return status;
866883 }
884+ std::cout << " here symmetric system55556" << std::endl;
867885 return true ;
868886}
869887} // namespace internal
0 commit comments