所以假设
float bar [5] = { 5.7106, 3.1768, 5.7458, 4.5859, 2.2718 };
Run Code Online (Sandbox Code Playgroud)
我正在寻找一个功能,如:
cummin(bar,bar+bar.size());
Run Code Online (Sandbox Code Playgroud)
这将返回bar的条目的就地累积最小值,例如,该条包含:
5.7106, 3.1768, 3.1768, 3.1768, 2.2718
Run Code Online (Sandbox Code Playgroud)
我的问题是,还有可能比天真的方法更有效地实现累积分钟(它在我正在研究的代码中用于瓶颈函数,我认为它不能被矢量化).
没有这样的功能.但是,这是前缀sum的应用,std::partial_sum在C++中已知.
你可以这样称呼它:
std::partial_sum(begin(bar), end(bar), begin(bar),
[](float a, float b) { return std::min(a, b); });
Run Code Online (Sandbox Code Playgroud)
如果这仍然是一个瓶颈,那么一个有趣的观察是前缀和可以有效地并行化.这不是一件轻而易举的事.幸运的是,并行算法库(如线程构建块)已经包含它的实现.