【问题标题】:Eigen: coeficient-wise pow with smalll integer exponent slowEigen:具有小整数指数的系数式 pow
【发布时间】:2017-05-03 02:22:33
【问题描述】:

在本征中,与

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

在做

a = a.pow(4);

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

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

只需要大约 5 毫秒。我正在使用最近发布的 GCC 进行编译。

这是预期的行为还是我做错了什么?我希望,至少对于小整数(比如

【问题讨论】:

  • 您可以自己构建一个自定义二进制函子,它调用__builtin_powi(在 gcc/clang 上)
  • @chtz 虽然乍一看很好,但正如你所说的那样不便携。特别是如果想使用英特尔编译器。

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


【解决方案1】:

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

【讨论】:

  • 理论上我们可以提供一个.pow<4>() 函数(可能名称不同)
  • @chtz 这将是一个非常好的功能!这是一个或多或少频繁的用例,性能提升巨大。
猜你喜欢
  • 1970-01-01
  • 2017-01-19
  • 2021-07-08
  • 2018-09-08
  • 1970-01-01
  • 1970-01-01
  • 2012-10-06
  • 2015-06-10
  • 1970-01-01
相关资源
最近更新 更多