c++optimizationcompiler-optimizationeigenpow

Eigen: coefficient-wise pow with small integer exponent slow


In Eigen,with

ArrayXXf a;
a = ArrayXXf::Random(1000, 10000);

doing

a = a.pow(4);

takes ~500ms on my pc, whereas doing

a = a.square().square();

takes only about 5ms. I'm compiling with a recent GCC in release.

Is this the expected behaviour or am I doing something wrong? I would expect, that at least for small integer (say < 20, if not using a cost function), an overload should exist that catches such cases.


Solution

  • With C++17 if constexpr this could be possible, but otherwise it's not. So currently, a.pow(x) is equivalent to calling std::pow(a[i],x) for each i.