【发布时间】:2015-05-28 12:56:53
【问题描述】:
我已经实现了一种算法,它在某些时候需要计算向量元素的幂的总和。功率是一个正双倍,在循环期间是恒定的。我想通了,这个计算目前是我程序的瓶颈,想知道是否有办法加快以下代码 sn-p:
double SumOfPowers(std::vector<double>& aVector,double exponent)
{
double help = 0;
size_t sizeOfaVector = aVector.size();
for (size_t k = 0; k < sizeOfaVector; k++)
{
help += std::pow(aVector[k], exponent);
}
return help;
}
我有一种感觉,好像可以利用指数在循环期间保持不变这一事实,并减少昂贵的 std::pow 调用。有谁知道更好的实现方式,或者是否有一个现成的库函数可以完成这项工作?
【问题讨论】:
-
我会首先检查循环是否被矢量化。
-
@Petr:我该如何检查?
-
你的向量有多少条目?
-
@m.s.通常在 1 到 100 之间变化
-
要么反汇编并检查生成的指令,要么使用一些编译器选项。对于 gcc,这是
-ftree-vectorizer-verbose=2。当然,首先打开矢量化。对于 gcc,最简单的方法是设置-O3。
标签: c++ optimization