| 
									
										
										
										
											2016-06-19 14:13:59 +08:00
										 |  |  | /* ----------------------------------------------------------------------------
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-11 22:39:48 +08:00
										 |  |  |  * GTSAM Copyright 2010, Georgia Tech Research Corporation, | 
					
						
							| 
									
										
										
										
											2016-06-19 14:13:59 +08:00
										 |  |  |  * Atlanta, Georgia 30332-0415 | 
					
						
							|  |  |  |  * All Rights Reserved | 
					
						
							|  |  |  |  * Authors: Frank Dellaert, et al. (see THANKS for the full author list) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  * See LICENSE for the license information | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  * -------------------------------------------------------------------------- */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * @file    timeCholesky.cpp | 
					
						
							|  |  |  |  * @brief   time Cholesky factorization | 
					
						
							|  |  |  |  * @author  Frank Dellaert | 
					
						
							|  |  |  |  * @date    March 4, 2016 | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <gtsam/base/cholesky.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <time.h>
 | 
					
						
							|  |  |  | #include <iostream>
 | 
					
						
							|  |  |  | #include <iomanip>      // std::setprecision
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | using namespace std; | 
					
						
							|  |  |  | using namespace gtsam; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //#define TERNARY
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | int main() { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   Matrix top = (Matrix(7,7) << | 
					
						
							|  |  |  |                       4.0375,   3.4584,   3.5735,   2.4815,   2.1471,   2.7400,   2.2063, | 
					
						
							|  |  |  |                           0.,   4.7267,   3.8423,   2.3624,   2.8091,   2.9579,   2.5914, | 
					
						
							|  |  |  |                           0.,       0.,   5.1600,   2.0797,   3.4690,   3.2419,   2.9992, | 
					
						
							|  |  |  |                           0.,       0.,       0.,   1.8786,   1.0535,   1.4250,   1.3347, | 
					
						
							|  |  |  |                           0.,       0.,       0.,       0.,   3.0788,   2.6283,   2.3791, | 
					
						
							|  |  |  |                           0.,       0.,       0.,       0.,       0.,   2.9227,   2.4056, | 
					
						
							|  |  |  |                           0.,       0.,       0.,       0.,       0.,       0.,   2.5776).finished(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   Matrix ABC(100,100); | 
					
						
							|  |  |  |   ABC.topLeftCorner<7,7>() = top; | 
					
						
							|  |  |  |   cout << setprecision(3); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   size_t n = 100000; | 
					
						
							|  |  |  |   for (size_t nFrontal = 1; nFrontal <= 7; nFrontal++) { | 
					
						
							|  |  |  |     auto timeLog = clock(); | 
					
						
							|  |  |  |     for (size_t i = 0; i < n; i++) { | 
					
						
							|  |  |  |       Matrix RSL(ABC); | 
					
						
							|  |  |  |       choleskyPartial(RSL, nFrontal); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     auto timeLog2 = clock(); | 
					
						
							|  |  |  |     auto seconds = (double)(timeLog2 - timeLog) / CLOCKS_PER_SEC; | 
					
						
							|  |  |  |     cout << "partialCholesky " << nFrontal << ": "; | 
					
						
							|  |  |  |     auto ms = ((double)seconds * 1000000 / n); | 
					
						
							|  |  |  |     cout << ms << " ms, " << ms/nFrontal << " ms/dim" << endl; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return 0; | 
					
						
							|  |  |  | } |