| 
									
										
										
										
											2010-10-14 12:54:38 +08:00
										 |  |  | /* ----------------------------------------------------------------------------
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  * GTSAM Copyright 2010, Georgia Tech Research Corporation,  | 
					
						
							|  |  |  |  * 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 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  * -------------------------------------------------------------------------- */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-29 21:57:45 +08:00
										 |  |  | /*
 | 
					
						
							| 
									
										
										
										
											2010-10-09 11:09:58 +08:00
										 |  |  |  * @file timeVectorValues.cpp | 
					
						
							|  |  |  |  * @brief Performs timing and profiling for VectorValues operations | 
					
						
							| 
									
										
										
										
											2010-01-29 21:57:45 +08:00
										 |  |  |  * @author Frank Dellaert | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <iostream>
 | 
					
						
							|  |  |  | #include <boost/timer.hpp>
 | 
					
						
							| 
									
										
										
										
											2010-08-20 01:23:19 +08:00
										 |  |  | #include <gtsam/linear/VectorBTree.h>
 | 
					
						
							|  |  |  | #include <gtsam/linear/VectorMap.h>
 | 
					
						
							| 
									
										
										
										
											2010-01-29 21:57:45 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | using namespace std; | 
					
						
							|  |  |  | using namespace gtsam; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-02-17 11:29:12 +08:00
										 |  |  | #define TIME1(STATEMENT) { boost::timer t; \
 | 
					
						
							|  |  |  | 		STATEMENT; \ | 
					
						
							| 
									
										
										
										
											2010-01-30 10:04:37 +08:00
										 |  |  | 		double time = t.elapsed(); \ | 
					
						
							|  |  |  | 		cout << "Average elapsed time :" << 10e3 * time / n << "ms." << endl; } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-11 05:01:06 +08:00
										 |  |  | #define TIME(STATEMENT) TIME1(for (size_t j = 0; j < n; ++j) STATEMENT;)
 | 
					
						
							| 
									
										
										
										
											2010-01-30 10:04:37 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | /* ************************************************************************* */ | 
					
						
							|  |  |  | int main(int argc, char ** argv) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// Time assignment operator
 | 
					
						
							|  |  |  | 	cout << "Starting operator=() Timing" << endl; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-29 21:57:45 +08:00
										 |  |  | 	// n =  number of times to loop
 | 
					
						
							|  |  |  | 	// m =  number of vectors
 | 
					
						
							|  |  |  | 	// r =  rows per vector
 | 
					
						
							| 
									
										
										
										
											2010-02-17 11:29:12 +08:00
										 |  |  | 	size_t n = 100, m = 30000, r = 3, alpha = 0.1; | 
					
						
							| 
									
										
										
										
											2010-01-29 21:57:45 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-02-17 11:29:12 +08:00
										 |  |  | 	{ | 
					
						
							|  |  |  | 		cout << "Vector:" << endl; | 
					
						
							|  |  |  | 		Vector v = zero(m * r), w = zero(m * r); | 
					
						
							|  |  |  | 		TIME(v=w); | 
					
						
							|  |  |  | 		TIME(v+=w); | 
					
						
							|  |  |  | 		TIME(v+=alpha*w); | 
					
						
							|  |  |  | 		TIME(axpy(alpha,v,w)); | 
					
						
							| 
									
										
										
										
											2010-01-29 21:57:45 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-02-17 11:29:12 +08:00
										 |  |  | 	{ | 
					
						
							|  |  |  | 		// Create 2 VectorBTrees and one VectorMap
 | 
					
						
							|  |  |  | 		VectorBTree p, q; | 
					
						
							|  |  |  | 		VectorMap old; | 
					
						
							|  |  |  | 		cout << "Creating VectorBTree:" << endl; | 
					
						
							| 
									
										
										
										
											2010-07-11 05:01:06 +08:00
										 |  |  | 		TIME1(for (size_t i = 0; i < m; ++i) { | 
					
						
							| 
									
										
										
										
											2010-02-17 11:29:12 +08:00
										 |  |  | 			Vector v = zero(r); | 
					
						
							|  |  |  | 			Symbol key('x', i); | 
					
						
							|  |  |  | 			p.insert(key, v); | 
					
						
							|  |  |  | 			q.insert(key, v); | 
					
						
							|  |  |  | 			old.insert(key, v); | 
					
						
							|  |  |  | 		}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		cout << "VectorBTree:" << endl; | 
					
						
							|  |  |  | 		TIME(p=q); | 
					
						
							|  |  |  | 		TIME(p+=q); | 
					
						
							|  |  |  | 		TIME(p+=alpha*q); | 
					
						
							|  |  |  | 		TIME(axpy(alpha,p,q)); | 
					
						
							| 
									
										
										
										
											2010-01-29 21:57:45 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-02-17 11:29:12 +08:00
										 |  |  | 		cout << "VectorBTree get:" << endl; | 
					
						
							| 
									
										
										
										
											2010-07-11 05:01:06 +08:00
										 |  |  | 		TIME1(for (size_t i = 0; i < m; ++i) p[Symbol('x', i)]); | 
					
						
							| 
									
										
										
										
											2010-01-29 21:57:45 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-02-17 11:29:12 +08:00
										 |  |  | 		cout << "VectorMap get:" << endl; | 
					
						
							| 
									
										
										
										
											2010-07-11 05:01:06 +08:00
										 |  |  | 		TIME1(for (size_t i = 0; i < m; ++i) old[Symbol('x', i)]); | 
					
						
							| 
									
										
										
										
											2010-02-17 11:29:12 +08:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2010-01-29 21:57:45 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	return 0; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2010-01-30 10:04:37 +08:00
										 |  |  | /* ************************************************************************* */ |