当然这不适用于所有方法,但对于像std::min_element
这样的std::vector<char>
,我应该期望实现可以自动矢量化吗?
std::fill
将是一个更直接的例子,但我怀疑它只是做memset
或其他事情。
其次,如何检查STL调用何时最终使用Visual Studio 2017进行自动矢量化?我可以通过/qvec-report:2
告诉我关于我自己的循环等等,但它没有说明STL函数。
答案 0 :(得分:1)
从C ++ 17开始,存在许多标准库算法的并行版本。您可以使用std::execution::par
或std::execution::par_unseq
作为第一个参数调用并行版本。 std::execution::par_unseq
允许(但不要求)矢量化。
#include <algorithm>
#include <execution>
#include <vector>
int main() {
std::vector<int> vec = /* whatever */
auto res = std::min_element(std::execution::par_unseq, vec.begin(), vec.end());
return 0;
}