如何在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_f161
由arm_neon.h
中的ifdef #if defined(__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
保护.在什么情况下,在为Android编译程序时,该标志设置为真?安卓ABI notes说
ARM 64-v8a仅指ARM-v8.0.有没有办法在Android上使用Float16的内部特性?