当我们使用for_each为向量中的每个元素调用一个函数时,是否进行了向量化调用?
答案 0 :(得分:2)
一般来说,没有。
std::for_each
只是一个循环的包装器。
但是,通过优化,很可能内联std::for_each
的调用,对于简单函数,可能也会内联每个元素的函数调用。
一旦所有内容都被内联,就好像循环是用手写的一样;在这种情况下,问题变成"编译器将矢量化循环进行简单算术&#34 ;;这完全取决于编译器。
为了实现这一点,编译器需要知道目标体系结构支持SIMD指令,并且可能会或可能不会根据优化级别进行矢量化,迭代次数是否恒定,是否迭代次数已知是4等的倍数。
答案 1 :(得分:-2)
假设你在询问std :: vector,答案是否定的。 std :: vector是数组的包装器,但它间接访问这些内存块。但是你可以像myVec.begin()._Ptr
这样使用行指针并在循环中使用它。使用noalias声明方法有帮助,就像__declspec(noalias)
一样。卡梅伦回答了问题的第二部分。如果函数内联并且架构支持矢量化数据,编译器现在应该对数据进行矢量化。