]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/numeric/ublas/benchmarks/reference/add.cpp
2 // Copyright (c) 2018 Stefan Seefeld
3 // All rights reserved.
5 // This file is part of Boost.uBLAS. It is made available under the
6 // Boost Software License, Version 1.0.
7 // (Consult LICENSE or http://www.boost.org/LICENSE_1_0.txt)
9 #include <boost/numeric/ublas/matrix.hpp>
10 #include <boost/numeric/ublas/vector.hpp>
11 #include <boost/program_options.hpp>
12 #include "../init.hpp"
13 #include "../benchmark.hpp"
17 namespace po
= boost::program_options
;
18 namespace ublas
= boost::numeric::ublas
;
19 namespace boost
{ namespace numeric
{ namespace ublas
{ namespace benchmark
{
22 class add
: public benchmark
25 add(std::string
const &name
) : benchmark(name
) {}
26 virtual void setup(long l
)
31 virtual void operation(long l
)
33 for (int i
= 0; i
< l
; ++i
)
44 namespace bm
= boost::numeric::ublas::benchmark
;
47 void benchmark(std::string
const &type
)
49 bm::add
<T
> p("ref::add(vector<" + type
+ ">)");
50 p
.run(std::vector
<long>({1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096}));
53 int main(int argc
, char **argv
)
58 po::options_description
desc("Vector-vector addition (reference implementation)\n"
60 desc
.add_options()("help,h", "produce help message");
61 desc
.add_options()("type,t", po::value
<std::string
>(), "select value-type (float, double, fcomplex, dcomplex)");
63 po::store(po::parse_command_line(argc
, argv
, desc
), vm
);
68 std::cout
<< desc
<< std::endl
;
72 catch(std::exception
&e
)
74 std::cerr
<< "error: " << e
.what() << std::endl
;
77 std::string type
= vm
.count("type") ? vm
["type"].as
<std::string
>() : "float";
79 benchmark
<float>("float");
80 else if (type
== "double")
81 benchmark
<double>("double");
82 else if (type
== "fcomplex")
83 benchmark
<std::complex<float>>("std::complex<float>");
84 else if (type
== "dcomplex")
85 benchmark
<std::complex<double>>("std::complex<double>");
87 std::cerr
<< "unsupported value-type \"" << vm
["type"].as
<std::string
>() << '\"' << std::endl
;