【问题标题】:How to get ARM NEON dot production ("UDOT") instruction support in Android NDK project?如何在 Android NDK 项目中获得 ARM NEON 点生成(“UDOT”)指令支持?
【发布时间】: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 错误出现在编译时。

标签: arm neon


【解决方案1】:
  1. 据我所知,MRS 是非用户模式专用指令。
  2. NDK r14b 来自 2017 年 3 月,同年第一批 armv8.2-a 推出。
    因此,我怀疑编译器是否支持armv8.2-a。
    您应该尝试r17c 或更高版本。

【讨论】:

  • 嗨,杰克,非常感谢。正如您所建议的,我将 r14b 切换到 r18b,然后如上所述更新 Application.mk 和 Android.mk。 (更改在原帖中更新。)然后构建成功。不再显示error: unknown value 'armv8.2-a' for -march.。但是运行代码时我仍然得到Illegal instruction。你知道为什么吗?谢谢!
  • @KathyLee 正如我上面所说的mrs 很可能是非用户模式专用指令,这意味着它仅在超级用户、异常/中断模式下有效。所有 Android 应用程序都在用户模式下运行,除非您修改了设备,这在当今几乎是不可能/不可行的。
  • 谢谢!实际上我正在使用开发板,所以我想我是超级用户?我终于让它运行了,因为我换成了 Snapdragon 855。845 太旧了,无法运行...谢谢!
猜你喜欢
  • 2015-11-22
  • 1970-01-01
  • 2013-03-13
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多