首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用未声明的标识符“vpaddq_u8”

使用未声明的标识符“vpaddq_u8”
EN

Stack Overflow用户
提问于 2019-04-19 12:28:54
回答 1查看 579关注 0票数 1

我在android-ndk中使用了霓虹灯,但是我面临着一个主题标题的问题。

我在这里下载hello-neon演示:https://github.com/googlesamples/android-ndk这是一个演示如何在android ndk中使用霓虹灯的演示。然后我像这样添加这个代码:

#include <arm_neon.h>
uint16_t neonTest(uint8x16_t input){
    uint8x16_t minput = vandq_u8(input,input);
    uint8x16_t tmp = vpaddq_u8(minput,minput);
    tmp = vpaddq_u8(tmp,tmp);
    tmp = vpaddq_u8(tmp,tmp);
    return vgetq_lane_u16(vreinterpretq_u16_u8(tmp),0);
}

最奇怪的是: vandq_u8和vpaddq_u8都包含在arm_neon.h中,但异常跟踪是:

error: use of undeclared identifier 'vpaddq_u8'

这意味着包含'vandq_u8‘而不包含'vpaddq_u8’。但它们在同一个头文件中。

我该如何解决这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-20 02:45:57

我认为这里的问题是,您不仅为ARM编译了相同的代码,也为x86编译了相同的代码。

NDK有一个同样适用于x86的arm_neon.h版本,它有一个不完整的ARM内部函数集,它使用不同的SSE内部函数来模拟它们。这使得即使在x86上也可以使用相同的SIMD码,但不会获得最佳性能。(这是否是可取的,或者它是否确实提供了比普通串行代码更好的性能,这是有很大争议的。)此标头包含vandq_u8,但缺少vpaddq_u8

因此,请确保没有编译包含用于x86的霓虹灯内部函数的代码(在build.gradle中从ndk.abiFilters中删除x86和x86_64 )。或者,使用ifdefs仅在面向ARM/AArch64时使用此代码,并将其替换为其他体系结构的回退。

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

https://stackoverflow.com/questions/55756626

复制
相关文章

相似问题

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