特征:系数方式的pow与smalll整数指数慢

时间:2017-05-03 02:22:33

标签: c++ optimization compiler-optimization eigen pow

在Eigen中,带

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

a = a.pow(4);

在我的电脑上需要约500毫秒,而

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

只需要大约5毫秒。我正在发布最新的GCC。

这是预期的行为还是我做错了什么?我希望,至少对于小整数(例如< 20,如果不使用成本函数),应该存在捕获这种情况的重载。

1 个答案:

答案 0 :(得分:0)

使用C ++ 17 if constexpr这可能是可能的,但不是这样。目前,a.pow(x)相当于为每个std::pow(a[i],x)调用i