gpt4 book ai didi

compiler-construction - ARM NEON 矢量化失败

转载 作者:行者123 更新时间:2023-12-04 08:24:51 25 4
gpt4 key购买 nike

我想在我的 ARM cortex-a9 上启用 NEON 向量化,但我在编译时得到了这个输出:

“未矢量化:不支持相关 stmt:D.14140_82 = D.14143_77 * D.14141_81”

这是我的循环:

void my_mul(float32_t * __restrict data1, float32_t * __restrict data2, float32_t * __restrict out){    
for(int i=0; i<SIZE*4; i+=1){
out[i] = data1[i]*data2[i];
}
}

编译时使用的选项:
-march=armv7-a -mcpu=cortex-a9 -mfpu=neon -mfloat-abi=softfp -ftree-vectorize -mvectorize-with-neon-quad -ftree-vectorizer-verbose=2

我正在使用 arm-linux-gnueabi (v4.6) 编译器 .

需要注意的是,问题只出现在 float32 向量。如果我切换到 int32 ,然后 向量化完成 .也许 float32 的矢量化尚不可用......

有没有人有想法?我是否忘记了 cmd 行或我的实现中的某些内容?

在此先感谢您的帮助。

吉克斯

最佳答案

来自 GCC's ARM options page

-mfpu=name

...

If the selected floating-point hardware includes the NEON extension (e.g. -mfpu=`neon'), note that floating-point operations are not generated by GCC's auto-vectorization pass unless -funsafe-math-optimizations is also specified. This is because NEON hardware does not fully implement the IEEE 754 standard for floating-point arithmetic (in particular denormal values are treated as zero), so the use of NEON instructions may lead to a loss of precision.



如果您指定 -funsafe-math-optimizations它应该可以工作,但如果您要高精度使用它,请重新阅读上面的注释。

关于compiler-construction - ARM NEON 矢量化失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15225470/

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