8 #include <Eigen/Geometry>
9 #include <Eigen/StdVector>
11 #include <benchmark/benchmark.h>
13 using namespace Eigen;
24 m =
q.toRotationMatrix();
28 Quaterniond
q(Quaterniond(Vector4d::Random()).normalized());
29 Matrix3d
m(Matrix3d::Random());
33 benchmark::DoNotOptimize(
m);
43 lhs.noalias() =
q *
rhs;
47 Quaterniond
q(Quaterniond(Vector4d::Random()).normalized());
48 Vector3d
rhs(Vector3d::Random());
49 Vector3d lhs(Vector3d::Random());
53 benchmark::DoNotOptimize(lhs);
67 Quaterniond
q(Quaterniond(Vector4d::Random()).normalized());
68 Quaterniond
rhs(Quaterniond(Vector4d::Random()).normalized());
69 Quaterniond lhs(Quaterniond(Vector4d::Random()).normalized());
73 benchmark::DoNotOptimize(lhs);
83 lhs.noalias() =
q *
rhs;
87 Quaterniond
q(Quaterniond(Vector4d::Random()).normalized());
88 VectorXd
rhs(VectorXd::Random(3));
89 VectorXd lhs(VectorXd::Random(3));
99 template<
int MSIZE,
int OptionM1,
int OptionM2,
int OptionM3>
101 const Matrix<double, MSIZE, MSIZE, OptionM1> &
m,
102 const Matrix<double, MSIZE, MSIZE, OptionM2> &
rhs,
103 Matrix<double, MSIZE, MSIZE, OptionM3> & lhs)
105 lhs.noalias() =
m *
rhs;
107 template<
int MSIZE,
int OptionM1,
int OptionM2,
int OptionM3>
110 Matrix<double, MSIZE, MSIZE, OptionM1>
m(Matrix<double, MSIZE, MSIZE, OptionM1>::Random());
111 Matrix<double, MSIZE, MSIZE, OptionM2>
rhs(Matrix<double, MSIZE, MSIZE, OptionM2>::Random());
112 Matrix<double, MSIZE, MSIZE, OptionM3> lhs(Matrix<double, MSIZE, MSIZE, OptionM3>::Random());
146 template<
int MSIZE,
int OptionM1,
int OptionM2,
int OptionM3>
148 const Matrix<double, MSIZE, MSIZE, OptionM1> &
m,
149 const Matrix<double, MSIZE, MSIZE, OptionM2> &
rhs,
150 Matrix<double, MSIZE, MSIZE, OptionM3> & lhs)
152 lhs.noalias() =
m.transpose() *
rhs;
154 template<
int MSIZE,
int OptionM1,
int OptionM2,
int OptionM3>
157 Matrix<double, MSIZE, MSIZE, OptionM1>
m(Matrix<double, MSIZE, MSIZE, OptionM1>::Random());
158 Matrix<double, MSIZE, MSIZE, OptionM2>
rhs(Matrix<double, MSIZE, MSIZE, OptionM2>::Random());
159 Matrix<double, MSIZE, MSIZE, OptionM3> lhs(Matrix<double, MSIZE, MSIZE, OptionM3>::Random());
187 const Matrix<double, MSIZE, MSIZE> &
m,
188 const Matrix<double, MSIZE, 1> &
rhs,
189 Matrix<double, MSIZE, 1> & lhs)
191 lhs.noalias() =
m *
rhs;
196 Matrix<double, MSIZE, MSIZE>
m(Matrix<double, MSIZE, MSIZE>::Random());
197 Matrix<double, MSIZE, 1>
rhs(Matrix<double, MSIZE, 1>::Random());
198 Matrix<double, MSIZE, 1> lhs(Matrix<double, MSIZE, 1>::Random());
212 b->MinWarmUpTime(3.)->Arg(3)->Arg(4)->Arg(50);
215 template<
int OptionM1,
int OptionM2,
int OptionM3>
217 const Matrix<double, Dynamic, Dynamic, OptionM1> &
m,
218 const Matrix<double, Dynamic, Dynamic, OptionM2> &
rhs,
219 Matrix<double, Dynamic, Dynamic, OptionM3> & lhs)
221 lhs.noalias() =
m *
rhs;
223 template<
int OptionM1,
int OptionM2,
int OptionM3>
226 const auto MSIZE = st.range(0);
227 Matrix<double, Dynamic, Dynamic, OptionM1>
m(
228 Matrix<double, Dynamic, Dynamic, OptionM1>::Random(MSIZE, MSIZE));
229 Matrix<double, Dynamic, Dynamic, OptionM2>
rhs(
230 Matrix<double, Dynamic, Dynamic, OptionM2>::Random(MSIZE, MSIZE));
231 Matrix<double, Dynamic, Dynamic, OptionM3> lhs(
232 Matrix<double, Dynamic, Dynamic, OptionM3>::Random(MSIZE, MSIZE));
239 BENCHMARK(matrixDynamicMultMatrix<ColMajor, ColMajor, ColMajor>)
241 BENCHMARK(matrixDynamicMultMatrix<RowMajor, ColMajor, ColMajor>)
243 BENCHMARK(matrixDynamicMultMatrix<ColMajor, RowMajor, ColMajor>)
245 BENCHMARK(matrixDynamicMultMatrix<RowMajor, RowMajor, ColMajor>)
247 BENCHMARK(matrixDynamicMultMatrix<ColMajor, ColMajor, RowMajor>)
249 BENCHMARK(matrixDynamicMultMatrix<RowMajor, ColMajor, RowMajor>)
251 BENCHMARK(matrixDynamicMultMatrix<ColMajor, RowMajor, RowMajor>)
253 BENCHMARK(matrixDynamicMultMatrix<RowMajor, RowMajor, RowMajor>)
260 b->MinWarmUpTime(3.)->Arg(4)->Arg(50);
263 template<
int OptionM1,
int OptionM2,
int OptionM3>
265 const Matrix<double, Dynamic, Dynamic, OptionM1> &
m,
266 const Matrix<double, Dynamic, Dynamic, OptionM2> &
rhs,
267 Matrix<double, Dynamic, Dynamic, OptionM3> & lhs)
269 lhs.noalias() =
m.transpose() *
rhs;
271 template<
int OptionM1,
int OptionM2,
int OptionM3>
274 const auto MSIZE = st.range(0);
275 Matrix<double, Dynamic, Dynamic, OptionM1>
m(
276 Matrix<double, Dynamic, Dynamic, OptionM1>::Random(MSIZE, MSIZE));
277 Matrix<double, Dynamic, Dynamic, OptionM2>
rhs(
278 Matrix<double, Dynamic, Dynamic, OptionM2>::Random(MSIZE, MSIZE));
279 Matrix<double, Dynamic, Dynamic, OptionM3> lhs(
280 Matrix<double, Dynamic, Dynamic, OptionM3>::Random(MSIZE, MSIZE));
287 BENCHMARK(matrixDynamicTransposeMultMatrix<ColMajor, ColMajor, ColMajor>)
289 BENCHMARK(matrixDynamicTransposeMultMatrix<RowMajor, ColMajor, ColMajor>)
291 BENCHMARK(matrixDynamicTransposeMultMatrix<ColMajor, RowMajor, ColMajor>)
293 BENCHMARK(matrixDynamicTransposeMultMatrix<RowMajor, RowMajor, ColMajor>)
295 BENCHMARK(matrixDynamicTransposeMultMatrix<ColMajor, ColMajor, RowMajor>)
297 BENCHMARK(matrixDynamicTransposeMultMatrix<RowMajor, ColMajor, RowMajor>)
299 BENCHMARK(matrixDynamicTransposeMultMatrix<ColMajor, RowMajor, RowMajor>)
301 BENCHMARK(matrixDynamicTransposeMultMatrix<RowMajor, RowMajor, RowMajor>)
309 lhs.noalias() =
m *
rhs;
313 const auto MSIZE = st.range(0);
314 MatrixXd
m(MatrixXd::Random(MSIZE, MSIZE));
315 MatrixXd
rhs(MatrixXd::Random(MSIZE, 1));
316 MatrixXd lhs(MatrixXd::Random(MSIZE, 1));