对向量的每个元素进行矢量化函数调用

时间:2015-07-22 16:10:59

标签: c++ optimization vector vectorization

当我们使用for_each为向量中的每个元素调用一个函数时,是否进行了向量化调用?

2 个答案:

答案 0 :(得分:2)

一般来说,没有。

std::for_each只是一个循环的包装器。

但是,通过优化,很可能内联std::for_each的调用,对于简单函数,可能也会内联每个元素的函数调用。

一旦所有内容都被内联,就好像循环是用手写的一样;在这种情况下,问题变成"编译器将矢量化循环进行简单算术&#34 ;;这完全取决于编译器。

为了实现这一点,编译器需要知道目标体系结构支持SIMD指令,并且可能会或可能不会根据优化级别进行矢量化,迭代次数是否恒定,是否迭代次数已知是4等的倍数。

答案 1 :(得分:-2)

假设你在询问std :: vector,答案是否定的。 std :: vector是数组的包装器,但它间接访问这些内存块。但是你可以像myVec.begin()._Ptr这样使用行指针并在循环中使用它。使用noalias声明方法有帮助,就像__declspec(noalias)一样。卡梅伦回答了问题的第二部分。如果函数内联并且架构支持矢量化数据,编译器现在应该对数据进行矢量化。