mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2025-02-03 09:44:24 -05:00
142 lines
4.3 KiB
C++
142 lines
4.3 KiB
C++
//
|
|
// 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 <boost/numeric/ublas/assignment.hpp>
|
|
#include <boost/numeric/ublas/vector.hpp>
|
|
#include <boost/numeric/ublas/matrix.hpp>
|
|
#include <boost/numeric/ublas/io.hpp>
|
|
#include <boost/timer.hpp>
|
|
|
|
using namespace boost::numeric::ublas;
|
|
|
|
int main() {
|
|
|
|
boost::timer timer;
|
|
|
|
unsigned int iterations = 1000000000;
|
|
double elapsed_exp, elapsed_assigner;
|
|
|
|
std::cout << "Ublas vector<double> Benchmarks------------------------ " << "\n";
|
|
|
|
{
|
|
std::cout << "Size 2 vector: " << "\n";
|
|
vector<double> 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<double> 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<double> 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<double> Benchmarks------------------------ " << "\n";
|
|
|
|
iterations = 200000000;
|
|
{
|
|
std::cout << "Size 3x3 matrix: " << "\n";
|
|
matrix<double> 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<double> 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;
|
|
}
|
|
|