123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- // This file is part of Eigen, a lightweight C++ template library
- // for linear algebra.
- //
- // Copyright (C) 2020 Sebastien Boisvert <seb@boisvert.info>
- //
- // This Source Code Form is subject to the terms of the Mozilla
- // Public License v. 2.0. If a copy of the MPL was not distributed
- // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
- #include "BenchTimer.h"
- #include "../test/MovableScalar.h"
- #include <Eigen/Core>
- #include <iostream>
- #include <utility>
- template <typename MatrixType>
- void copy_matrix(MatrixType& m)
- {
- MatrixType tmp(m);
- m = tmp;
- }
- template <typename MatrixType>
- void move_matrix(MatrixType&& m)
- {
- MatrixType tmp(std::move(m));
- m = std::move(tmp);
- }
- template<typename Scalar>
- void bench(const std::string& label)
- {
- using MatrixType = Eigen::Matrix<Eigen::MovableScalar<Scalar>,1,10>;
- Eigen::BenchTimer t;
- int tries = 10;
- int rep = 1000000;
- MatrixType data = MatrixType::Random().eval();
- MatrixType dest;
- BENCH(t, tries, rep, copy_matrix(data));
- std::cout << label << " copy semantics: " << 1e3*t.best(Eigen::CPU_TIMER) << " ms" << std::endl;
- BENCH(t, tries, rep, move_matrix(std::move(data)));
- std::cout << label << " move semantics: " << 1e3*t.best(Eigen::CPU_TIMER) << " ms" << std::endl;
- }
- int main()
- {
- bench<float>("float");
- bench<double>("double");
- return 0;
- }
|