Disabled external gits
This commit is contained in:
		
							
								
								
									
										123
									
								
								cs440-acg/ext/eigen/unsupported/bench/bench_svd.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										123
									
								
								cs440-acg/ext/eigen/unsupported/bench/bench_svd.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,123 @@
 | 
			
		||||
// This file is part of Eigen, a lightweight C++ template library
 | 
			
		||||
// for linear algebra.
 | 
			
		||||
//
 | 
			
		||||
// Copyright (C) 2013 Gauthier Brun <brun.gauthier@gmail.com>
 | 
			
		||||
// Copyright (C) 2013 Nicolas Carre <nicolas.carre@ensimag.fr>
 | 
			
		||||
// Copyright (C) 2013 Jean Ceccato <jean.ceccato@ensimag.fr>
 | 
			
		||||
// Copyright (C) 2013 Pierre Zoppitelli <pierre.zoppitelli@ensimag.fr>
 | 
			
		||||
//
 | 
			
		||||
// This Source Code Form is subject to the terms of the Mozilla
 | 
			
		||||
// Public License v. 2.0. If a copy of the MPL was not distributed
 | 
			
		||||
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/
 | 
			
		||||
 | 
			
		||||
// Bench to compare the efficiency of SVD algorithms
 | 
			
		||||
 | 
			
		||||
#include <iostream>
 | 
			
		||||
#include <bench/BenchTimer.h>
 | 
			
		||||
#include <unsupported/Eigen/SVD>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
using namespace Eigen;
 | 
			
		||||
using namespace std;
 | 
			
		||||
 | 
			
		||||
// number of computations of each algorithm before the print of the time
 | 
			
		||||
#ifndef REPEAT
 | 
			
		||||
#define REPEAT 10
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
// number of tests of the same type
 | 
			
		||||
#ifndef NUMBER_SAMPLE
 | 
			
		||||
#define NUMBER_SAMPLE 2
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
template<typename MatrixType>
 | 
			
		||||
void bench_svd(const MatrixType& a = MatrixType())
 | 
			
		||||
{
 | 
			
		||||
  MatrixType m = MatrixType::Random(a.rows(), a.cols());
 | 
			
		||||
  BenchTimer timerJacobi;
 | 
			
		||||
  BenchTimer timerBDC;
 | 
			
		||||
  timerJacobi.reset();
 | 
			
		||||
  timerBDC.reset();
 | 
			
		||||
 | 
			
		||||
  cout << " Only compute Singular Values" <<endl;
 | 
			
		||||
  for (int k=1; k<=NUMBER_SAMPLE; ++k)
 | 
			
		||||
  {
 | 
			
		||||
    timerBDC.start();
 | 
			
		||||
    for (int i=0; i<REPEAT; ++i) 
 | 
			
		||||
    {
 | 
			
		||||
      BDCSVD<MatrixType> bdc_matrix(m);
 | 
			
		||||
    }
 | 
			
		||||
    timerBDC.stop();
 | 
			
		||||
    
 | 
			
		||||
    timerJacobi.start();
 | 
			
		||||
    for (int i=0; i<REPEAT; ++i) 
 | 
			
		||||
    {
 | 
			
		||||
      JacobiSVD<MatrixType> jacobi_matrix(m);
 | 
			
		||||
    }
 | 
			
		||||
    timerJacobi.stop();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    cout << "Sample " << k << " : " << REPEAT << " computations :  Jacobi : " << fixed << timerJacobi.value() << "s ";
 | 
			
		||||
    cout << " || " << " BDC : " << timerBDC.value() << "s " <<endl <<endl;
 | 
			
		||||
      
 | 
			
		||||
    if (timerBDC.value() >= timerJacobi.value())  
 | 
			
		||||
      cout << "KO : BDC is " <<  timerJacobi.value() / timerBDC.value() << "  times faster than Jacobi" <<endl;
 | 
			
		||||
    else 
 | 
			
		||||
      cout << "OK : BDC is " << timerJacobi.value() / timerBDC.value() << "  times faster than Jacobi"  <<endl;
 | 
			
		||||
      
 | 
			
		||||
  }
 | 
			
		||||
  cout << "       =================" <<endl;
 | 
			
		||||
  std::cout<< std::endl;
 | 
			
		||||
  timerJacobi.reset();
 | 
			
		||||
  timerBDC.reset();
 | 
			
		||||
  cout << " Computes rotaion matrix" <<endl;
 | 
			
		||||
  for (int k=1; k<=NUMBER_SAMPLE; ++k)
 | 
			
		||||
  {
 | 
			
		||||
    timerBDC.start();
 | 
			
		||||
    for (int i=0; i<REPEAT; ++i) 
 | 
			
		||||
    {
 | 
			
		||||
      BDCSVD<MatrixType> bdc_matrix(m, ComputeFullU|ComputeFullV);
 | 
			
		||||
    }
 | 
			
		||||
    timerBDC.stop();
 | 
			
		||||
    
 | 
			
		||||
    timerJacobi.start();
 | 
			
		||||
    for (int i=0; i<REPEAT; ++i) 
 | 
			
		||||
    {
 | 
			
		||||
      JacobiSVD<MatrixType> jacobi_matrix(m, ComputeFullU|ComputeFullV);
 | 
			
		||||
    }
 | 
			
		||||
    timerJacobi.stop();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    cout << "Sample " << k << " : " << REPEAT << " computations :  Jacobi : " << fixed << timerJacobi.value() << "s ";
 | 
			
		||||
    cout << " || " << " BDC : " << timerBDC.value() << "s " <<endl <<endl;
 | 
			
		||||
      
 | 
			
		||||
    if (timerBDC.value() >= timerJacobi.value())  
 | 
			
		||||
      cout << "KO : BDC is " <<  timerJacobi.value() / timerBDC.value() << "  times faster than Jacobi" <<endl;
 | 
			
		||||
    else 
 | 
			
		||||
      cout << "OK : BDC is " << timerJacobi.value() / timerBDC.value() << "  times faster than Jacobi"  <<endl;
 | 
			
		||||
      
 | 
			
		||||
  }
 | 
			
		||||
  std::cout<< std::endl;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int main(int argc, char* argv[])
 | 
			
		||||
{
 | 
			
		||||
  std::cout<< std::endl;
 | 
			
		||||
 | 
			
		||||
  std::cout<<"On a (Dynamic, Dynamic) (6, 6) Matrix" <<std::endl;
 | 
			
		||||
  bench_svd<Matrix<double,Dynamic,Dynamic> >(Matrix<double,Dynamic,Dynamic>(6, 6));
 | 
			
		||||
  
 | 
			
		||||
  std::cout<<"On a (Dynamic, Dynamic) (32, 32) Matrix" <<std::endl;
 | 
			
		||||
  bench_svd<Matrix<double,Dynamic,Dynamic> >(Matrix<double,Dynamic,Dynamic>(32, 32));
 | 
			
		||||
 | 
			
		||||
  //std::cout<<"On a (Dynamic, Dynamic) (128, 128) Matrix" <<std::endl;
 | 
			
		||||
  //bench_svd<Matrix<double,Dynamic,Dynamic> >(Matrix<double,Dynamic,Dynamic>(128, 128));
 | 
			
		||||
 | 
			
		||||
  std::cout<<"On a (Dynamic, Dynamic) (160, 160) Matrix" <<std::endl;
 | 
			
		||||
  bench_svd<Matrix<double,Dynamic,Dynamic> >(Matrix<double,Dynamic,Dynamic>(160, 160));
 | 
			
		||||
  
 | 
			
		||||
  std::cout<< "--------------------------------------------------------------------"<< std::endl;
 | 
			
		||||
           
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user