首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >臂霓虹灯矢量化故障

臂霓虹灯矢量化故障
EN

Stack Overflow用户
提问于 2013-03-05 13:50:30
回答 1查看 3.7K关注 0票数 5

我想在我的手臂皮层-A9上启用NEON矢量化,但是我在编译时获得了这个输出:

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

这是我的循环:

代码语言:javascript
复制
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];
    }
}

以及编译时使用的选项:

代码语言:javascript
复制
-march=armv7-a -mcpu=cortex-a9 -mfpu=neon -mfloat-abi=softfp -ftree-vectorize -mvectorize-with-neon-quad -ftree-vectorizer-verbose=2

我使用的是arm-linux (v4.6 )编译器

需要注意的是,这个问题只出现在float32向量中。如果我在int32中切换,那么向量化就是。也许float32的矢量化还没有可用的…

有人有主意吗?我是在cmd行还是在实现中忘记了什么?

提前谢谢你的帮助。

瓜瓦

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-05 14:20:05

来自GCC's ARM options page

-mfpu=name ..。 如果选定的浮点硬件包括霓虹灯扩展(例如-mfpu=`neon'),请注意浮点操作不是由GCC的自动向量化通行证生成的,除非还指定了-fun安全-数学优化。这是因为霓虹灯硬件没有完全实现IEEE 754标准中的浮点算术(特别是将正态值视为零),因此使用霓虹灯指令可能会导致精度下降。

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

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15225470

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档