我想在我的手臂皮层-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 (v4.6 )编译器。
需要注意的是,这个问题只出现在float32向量中。如果我在int32中切换,那么向量化就是。也许float32的矢量化还没有可用的…
有人有主意吗?我是在cmd行还是在实现中忘记了什么?
提前谢谢你的帮助。
瓜瓦
发布于 2013-03-05 14:20:05
来自GCC's ARM options page
-mfpu=name ..。 如果选定的浮点硬件包括霓虹灯扩展(例如-mfpu=`neon'),请注意浮点操作不是由GCC的自动向量化通行证生成的,除非还指定了-fun安全-数学优化。这是因为霓虹灯硬件没有完全实现IEEE 754标准中的浮点算术(特别是将正态值视为零),因此使用霓虹灯指令可能会导致精度下降。
如果您指定了-funsafe-math-optimizations,它应该可以工作,但是如果您要高精度地使用它,请重读上面的注释。
https://stackoverflow.com/questions/15225470
复制相似问题