【发布时间】:2020-10-16 23:33:59
【问题描述】:
我正在一部 Snapdragon 845 手机上使用 ARM NEON 构建一个 android NDK 项目。
看完https://community.arm.com/developer/tools-software/tools/b/tools-software-ides-blog/posts/exploring-the-arm-dot-product-instructions的帖子,我想用UDOT做卷积。但是,UDOT 指令无法识别。我试过代码
static unsigned long long read_id_aa64isar0()
{
unsigned long long id_aa64isar0;
__asm ("MRS %x0, ID_AA64ISAR0_EL1 \n" : "=r" (id_aa64isar0) );
return (id_aa64isar0);
}
static bool dot_product_supported()
{
if (read_id_aa64isar0() & 0x0000100000000000ULL)
return true;
else
return false;
}
为了尝试确认 dot product 支持,它会报告 ERROR Illegal instruction 。
我的 Application.mk 文件是这样的
APP_STL := c++_static
NDK_TOOLCHAIN_VERSION := clang
APP_PLATFORM := android-21
APP_ABI := arm64-v8a
我的 Android.mk 的标志就像
LOCAL_ARM_NEON := true
LOCAL_CFLAGS += -march=armv8.2-a -Werror -O3
LOCAL_CFLAGS += -fopenmp
LOCAL_LDFLAGS += -fopenmp
我尝试将-march=armv8-a 更改为-march=armv8.2-a,但它报告错误error: unknown value 'armv8.2-a' for -march。
我使用的NDK版本是r14b。我可以知道如何获得对UDOT 的支持吗?谢谢!
【问题讨论】:
-
这是编译时的错误还是运行时的错误?我想知道你的汇编程序是否知道
ID_AA64ISAR0_EL1。 -
@NateEldredge 嗨,Nate,
Illegal instruction错误在运行时。如果我将-march=armv8-a更改为-march=armv8.2-a,则error: unknown value 'armv8.2-a' for -march错误出现在编译时。