在评估负对数可能性的背景下,我必须这样做 执行一系列可以从矢量化中受益的操作
0)for(i = 1 ... n){a [i] = 0; } //但我认为
std :: fill(a.begin(),a.end(),0)已经是最优的
1)for(i = 1 ... n){a [i] + = b * c [i]; }
2)sum = 0; for(i = 1 .. n){sum + = a [i] * log(b [i] / c); }
你知道是否有希望获得gcc 434 自动矢量化,我应该如何编写循环来帮助他(例如 使用索引与使用迭代器,我应该更简单地分解(2) 循环,...) 到目前为止我正在使用双打,必须检查我是否可以移动浮标 至少为(1)。
答案 0 :(得分:2)
答案 1 :(得分:0)
用于浮动点减少的自动向量化,例如2)你需要启用-funsafe-math-optimizations
在类似目标的i386上你还需要添加-mfpmath = sse