gpt4 book ai didi

c++ - 为什么 std::copy 不向量化?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:02:31 24 4
gpt4 key购买 nike

考虑这个通用代码:

#include <cstdlib>
#include <ctime>
#include <algorithm> // std::copy

int main() {
const int n=1024;
float a1[n],a2[n];
std::srand(std::time(0));
for(int i=0;i<n;i++) a2[i]=std::rand()/(float)RAND_MAX;
std::copy(a2,a2+n,a1);
}

当我在 Ubuntu 上使用 g++/gcc 4.8.1-O3 -march=native -mtune=native 标志编译时,我得到对应的行无法对拷贝进行矢量化,因为:

note: not vectorized: not enough data-refs in basic block.

如果我用

for(int i=0;i<n;i++)      a1[i]=a2[i];

我也收到了相同的编译器消息。我有点不解。直觉上我会想两个非重叠数组之间的拷贝必须非常可向量化。能任何人解释为什么不是这种情况(并最终提供修复,虽然诚然,这不是我代码中的瓶颈,我问这个问题主要是为了理解该错误消息的含义)。

最佳答案

看来您的代码没有问题,它只是一条“信息”消息:参见 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57579 .在那里,类似的代码将被另一种方法矢量化,因此第二个矢量化代码吐出它无法(再次)矢量化的信息性消息。

关于c++ - 为什么 std::copy 不向量化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23910017/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com