// // Copyright (c) 2010 Athanasios Iliopoulos // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // #include #include #include #include #include using namespace boost::numeric::ublas; int main() { boost::timer timer; unsigned int iterations = 1000000000; double elapsed_exp, elapsed_assigner; std::cout << "Ublas vector Benchmarks------------------------ " << "\n"; { std::cout << "Size 2 vector: " << "\n"; vector a(2); timer.restart(); for(unsigned int i=0; i!=iterations; i++) { a(0)=0; a(1)=1; } elapsed_exp = timer.elapsed(); std::cout << "Explicit element assign time: " << elapsed_exp << " secs" << "\n"; timer.restart(); for(unsigned int i=0; i!=iterations; i++) a <<= 0, 1; elapsed_assigner = timer.elapsed(); std::cout << "Assigner time: " << elapsed_assigner << " secs" << "\n"; std::cout << "Difference: " << (elapsed_assigner/elapsed_exp-1)*100 << "%" << std::endl; } { std::cout << "Size 3 vector: " << "\n"; vector a(3); timer.restart(); for(unsigned int i=0; i!=iterations; i++) { a(0)=0; a(1)=1; a(2)=2; } elapsed_exp = timer.elapsed(); std::cout << "Explicit element assign time: " << elapsed_exp << " secs" << "\n"; timer.restart(); for(unsigned int i=0; i!=iterations; i++) a <<= 0, 1, 2; elapsed_assigner = timer.elapsed(); std::cout << "Assigner time: " << elapsed_assigner << " secs" << "\n"; std::cout << "Difference: " << (elapsed_assigner/elapsed_exp-1)*100 << "%" << std::endl; } iterations = 100000000; { std::cout << "Size 8 vector: " << "\n"; vector a(8); timer.restart(); for(unsigned int i=0; i!=iterations; i++) { a(0)=0; a(1)=1; a(2)=2; a(3)=3; a(4)=4; a(5)=5; a(6)=6; a(7)=7; } elapsed_exp = timer.elapsed(); std::cout << "Explicit element assign time: " << elapsed_exp << " secs" << "\n"; timer.restart(); for(unsigned int i=0; i!=iterations; i++) a <<= 0, 1, 2, 3, 4, 5, 6, 7; elapsed_assigner = timer.elapsed(); std::cout << "Assigner time: " << elapsed_assigner << " secs" << "\n"; std::cout << "Difference: " << (elapsed_assigner/elapsed_exp-1)*100 << "%" << std::endl; } std::cout << "Ublas matrix Benchmarks------------------------ " << "\n"; iterations = 200000000; { std::cout << "Size 3x3 matrix: " << "\n"; matrix a(3,3); timer.restart(); for(unsigned int i=0; i!=iterations; i++) { a(0,0)=0; a(0,1)=1; a(0,2)=2; a(1,0)=3; a(1,1)=4; a(1,2)=5; a(2,0)=6; a(2,1)=7; a(2,2)=8; } elapsed_exp = timer.elapsed(); std::cout << "Explicit element assign time: " << elapsed_exp << " secs" << "\n"; timer.restart(); for(unsigned int i=0; i!=iterations; i++) a <<= 0, 1, 2, 3, 4, 5, 6, 7, 8; elapsed_assigner = timer.elapsed(); std::cout << "Assigner time: " << elapsed_assigner << " secs" << "\n"; std::cout << "Difference: " << (elapsed_assigner/elapsed_exp-1)*100 << "%" << std::endl; } std::cout << "Size 2x2 matrix: " << "\n"; iterations = 500000000; { matrix a(2,2); timer.restart(); for(unsigned int i=0; i!=iterations; i++) { a(0,0)=0; a(0,1)=1; a(1,0)=3; a(1,1)=4; } elapsed_exp = timer.elapsed(); std::cout << "Explicit element assign time: " << elapsed_exp << " secs" << "\n"; timer.restart(); for(unsigned int i=0; i!=iterations; i++) a <<= 0, 1, 3, 4; elapsed_assigner = timer.elapsed(); std::cout << "Assigner time: " << elapsed_assigner << " secs" << "\n"; std::cout << "Difference: " << (elapsed_assigner/elapsed_exp-1)*100 << "%" << std::endl; timer.restart(); for(unsigned int i=0; i!=iterations; i++) a <<= traverse_policy::by_row_no_wrap(), 0, 1, next_row(), 3, 4; elapsed_assigner = timer.elapsed(); std::cout << "Assigner time no_wrap: " << elapsed_assigner << " secs" << "\n"; std::cout << "Difference: " << (elapsed_assigner/elapsed_exp-1)*100 << "%" << std::endl; } return 0; }