如何在Android上使用ARM Float16内部功能?

请考虑以下计划:

#include <arm_neon.h>

int main(int, char** argv) {
    const float16x8_t a = vdupq_n_f16(1.0F);
    const float16x8_t b = vdupq_n_f16(- 1.0F);
    const float16x8_t c = vaddq_f16(a, b);
}

下面的cmake文件:

cmake_minimum_required(VERSION 3.15)
project(test CXX)
add_executable(test main.cpp)

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -march=${MARCH}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -march=${MARCH}")
target_compile_options(test PRIVATE -Wall -Wextra -Wpedantic -g)
target_compile_features(test PRIVATE cxx_std_17)

使用以下命令实例化:

cmake -DCMAKE_ANDROID_API=26 -DANDROID_PLATTFORM="26"\                             
              -DCMAKE_ANDROID_ARCH_ABI=arm64-v8a \
              -DCMAKE_ANDROID_NDK=/tmp/android-ndk-r25c  \
              -DCMAKE_ANDROID_STL_TYPE=c++_static -DCMAKE_ANDROID_ABI=arm64-v8a\
              -DCMAKE_BUILD_TYPE=Release -DMARCH=armv8.2-a -DCMAKE_SYSTEM_NAME=Android -S . -B build_android

在编译程序时,我得到以下错误:

/tmp/float16/main.cpp:6:27: error: use of undeclared identifier 'vaddq_f16'
    const float16x8_t c = vaddq_f16(a, b);
                          ^

我知道,那个16号彩车ABI notes028/0012/13--Advanced-SIMD--Neon--intrinsics" rel="nofollow noreferrer">Arm-v8.2元可以买到.此外,功能vaddq_f161arm_neon.h中的ifdef #if defined(__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)保护.在什么情况下,在为Android编译程序时,该标志设置为真?安卓ABI notes说 ARM 64-v8a仅指ARM-v8.0.有没有办法在Android上使用Float16的内部特性?

推荐答案

回答问题(并参考上述问题的 comments ):

Float16内部函数可以与选项-DMARCH=armv8.2-a+fp16一起使用.请参见GCC docs,其中列出了体系 struct 选项.

Android相关问答推荐

推断的类型是片段,但应为上下文

更改Jetpack Compose中选定的选项卡底线 colored颜色

如何从URI中获取图像大小

更改选定的切换轨道 colored颜色

android crashlytics 显示崩溃但不显示我的课程中的位置

从我的 Android 应用程序发送到 Gin 时失败,但从 Postman 发送到 Gin 时成功

是否可以在 compose 中使用三次贝塞尔曲线进行动画?

Android 构建失败:找不到 flexbox2.0.1.aar

当父布局的背景为浅色时,Android ProgressBar 背景 colored颜色 变为灰色

通过 adb 解压并重新安装后 Android 应用程序崩溃

用作输入参数的 Lambda 函数导致重组

任务 ':app:checkReleaseDuplicateClasses' 执行失败

如何像 XML 一样在 Compose Android Studio 中折叠/展开小部件代码区域/区域

组成不重叠的元素

Jetpack compose 为网络检索视频帧导致延迟

compose 更改列表元素但lazyColumn不更改

我的 react native 项目的发布签名 apk 没有在设备中打开,而且它创建的尺寸非常小

协程是否在 if 条件下保持秩序?

我可以在不解密的情况下使用 JSch 获取加密的 SSH 私钥的类型或 fingerprint 吗?

如何删除 Ktor 客户端 2.0.0 的默认标头