From 39cbd6578fbf3a98d8a213c8ec3f5147557d065e Mon Sep 17 00:00:00 2001 From: Sebastien Boisvert Date: Thu, 11 Jun 2020 23:43:25 +0000 Subject: Fix #1911: add benchmark for move semantics with fixed-size matrix $ clang++ -O3 bench/bench_move_semantics.cpp -I. -std=c++11 \ -o bench_move_semantics $ ./bench_move_semantics float copy semantics: 1755.97 ms float move semantics: 55.063 ms double copy semantics: 2457.65 ms double move semantics: 55.034 ms --- bench/bench_move_semantics.cpp | 57 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 bench/bench_move_semantics.cpp (limited to 'bench') diff --git a/bench/bench_move_semantics.cpp b/bench/bench_move_semantics.cpp new file mode 100644 index 000000000..323d80417 --- /dev/null +++ b/bench/bench_move_semantics.cpp @@ -0,0 +1,57 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2020 Sebastien Boisvert +// +// 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 + +#include +#include + +template +void copy_matrix(MatrixType& m) +{ + MatrixType tmp(m); + m = tmp; +} + +template +void move_matrix(MatrixType&& m) +{ + MatrixType tmp(std::move(m)); + m = std::move(tmp); +} + +template +void bench(const std::string& label) +{ + using MatrixType = Eigen::Matrix,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"); + bench("double"); + return 0; +} + -- cgit v1.2.3