如何在 Android NDK 项目中获得 ARM NEON 点生成 ("UDOT") 指令支持?
How to get ARM NEON dot production ("UDOT") instruction support in Android NDK project?
我正在一个 Snapdragon 845 上使用 ARM NEON 构建一个 android NDK 项目 phone。
看完post 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;
}
尝试确认点积支持,它报告错误 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
的支持吗?谢谢!
- 据我所知,
MRS
是一个 non-user 模式指令。
- NDK
r14b
是从 2017 年 3 月开始的,同年推出了第一批 armv8.2-a
。
因此,我怀疑编译器是否支持 armv8.2-a
.
您应该尝试 r17c
或更高版本。
我正在一个 Snapdragon 845 上使用 ARM NEON 构建一个 android NDK 项目 phone。
看完post 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;
}
尝试确认点积支持,它报告错误 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
的支持吗?谢谢!
- 据我所知,
MRS
是一个 non-user 模式指令。 - NDK
r14b
是从 2017 年 3 月开始的,同年推出了第一批armv8.2-a
。
因此,我怀疑编译器是否支持armv8.2-a
.
您应该尝试r17c
或更高版本。