快速入门指南
本快速入门指南介绍了如何配置应用以使用二进制发行版Qualcomm®骁龙™异构计算SDK。Qualcomm开发者网络提供了安装程序包,其中包含针对Android(32位和64位ARM)的预编译动态库。按照安装包的提示,在操作系统上安装发行版SDK,然后参考以下相关部分,了解如何在您的系统上使用它。
SDK文档中包含此过程的详细说明。
法律免责声明:使用本指南(包括但不限于以下说明、步骤和命令)须遵守网站使用条款,并且可能包含未由Qualcomm Technologies,Inc或其附属公司发布的第三方或开源软件的引用。使用者自行负责任何此类第三方或开源软件的安装、配置和使用,并遵守任何适用的许可。
系统要求
Windows 7或更高版本、Mac OS X 10.10或更高版本,或Ubuntu 14.04或更高版本。
设备
目前支持运行Android 6.0(Marshmallow)或更高版本、搭载以下Qualcomm骁龙移动平台的Android设备:
• 骁龙425/430/435
• 骁龙630/650/652/653/660
• 骁龙808/810/820/821/835/845
软件
• Android
预编译异构SDK库可轻松集成至 Android 现有原生应用。异构SDK假定存在可用的Android NDK和SDK,建议使用NDK r13c或更高版本。
验证安装
默认情况下,二进制安装程序会将HetCompute库、头文件和示例文件置于以下目录:
Linux 和 Mac:/opt/Qualcomm/SnapdragonHeterogeneousComputeSDK//
Windows:C:\Qualcomm\SnapdragonHeterogeneousComputeSDK\\
在文档中此目录被称为HETCOMPUTE_DIR目录。您可以使用32位(armeabi-v7a)或64位(arm84-v8a)系统进行替代。如果安装在其他目录,该目录将变为HETCOMPUTE_DIR。
Android 32-bit (armeabi-v7a)
•CPU、GPU和Hexagon DSP支持:libhetCompute-1.0.0.so
Android 64-bit (arm64-v8a)
•CPU、GPU和Hexagon DSP支持:libhetCompute-1.0.0.so
HetCompute假定存在可用的Android NDK和SDK,建议使用NDK r13b或更高版本。
注意:还需使用Qualcomm®Hexagon™ SDK(Qualcomm开发者网络提供下载),以便Qualcomm HetCompute库支持Hexagon DSP。建议使用3.3.0版或更高版本Hexagon SDK,配合HetCompute。
在编译示例之前,初始化QSHETCOMPUTE_OPENCL_PATH,指定包含头文件和库的OpenCL目录根目录路径:
$HETCOMPUTE_DIR/samples/build/android/jni/Android.mk.
要验证安装,使用ndk-build,执行以下操作:
cd $HETCOMPUTE_DIR/samples/build/android/jni;
$ANDROID_NDK/ndk-build;
# Create a directory on the device to push the executable $ANDROID_SDK/adb shell mkdir /data/local/tmp/hetcompute;
# Push the executable to the device # Replace armeabi-v7a by arm64-v8a for 64 bit devices $ANDROID_SDK/adb push
../obj/local/armeabi-v7a/hetcompute_sample_helloworld /data/local/tmp/hetcompute;
# Push the hetcompute dynamic library to the device.;
# The 32-bit library should be pushed to /system/vendor/lib,;
# while the 64-bit library should be pushed to /system/vendor/lib64;
# Make sure to replace QSHETCOMPUTE_VERSION and Target ;
# Architecture with appropriate values in the below command.;
$ANDROID_SDK/adb push $HETCOMPUTE_DIR/lib/$(TARGET_ARCH_ABI)/libhetCompute-$(QSHETCOMPUTE_VERSION).so / system/vendor/lib;
$ANDROID_SDK/adb shell /data/local/tmp/hetcompute/hetcompute_sample_helloworld
以上ndk-build将构建32位和64位版本的示例。
请注意,部分HetCompute GPU示例需要图像文件。示例假设图像文件位于设备的/mnt/sdcard中。示例图像文件位于HETCOMPUTE_DIR/samples/src。
集成HetCompute和Android NDK应用
预编译HetCompute库可轻松集成至 Android 现有原生应用。这些库均利用Google NDK r13b进行了编译,使用clang工具链并链接c++_static运行时。默认的Android构建平台是android-21。建议使用相同的NDK、编译器和运行时C++库。
要使用HetCompute库,项目文件需作以下修改。
首先,编辑项目的jni/Application.mkfile文件,使其包括以下内容:
# APP_STL defines the C++ runtime to use
APP_STL := c++_static
# For 64-bit android,
APP_ABI := arm64-v8a APP_ABI := armeabi-v7a
NDK_TOOLCHAIN_VERSION := clang
# set the APP_PLATFORM to match your platform version
APP_PLATFORM := android-21
然后编辑项目中的jni/Android.mk文件,确定HetCompute库、头文件位置,生成预构建共享库。
# Heterogeneous Compute SDK prebuilt
include $(CLEAR_VARS)
LOCAL_MODULE := qshetcompute
LOCAL_SRC_FILES := $(HETCOMPUTE_DIR)/$(TARGET_ARCH_ABI)/libhetCompute-$(QSHETCOMPUTE_VERSION).so
LOCAL_EXPORT_C_INCLUDES := $(HETCOMPUTE_DIR)/include
include $(PREBUILT_SHARED_LIBRARY)
如需禁用应用程序例外,Android.nk和Application.mk文件需作以下更改。
# Add the following CFLAGS in Android.mk
LOCAL_CFLAGS := -DHETCOMPUTE_DISABLE_EXCEPTIONS
# Disable exceptions for the app in Application.mk
APP_CPPFLAGS += -fno-exceptions
以下是用于构建已交付应用的Android.mk示例文件:
define hetcompute_add_sample
include $(CLEAR_VARS)
LOCAL_MODULE := hetcompute_sample_$1
LOCAL_C_INCLUDES := $(QSHETCOMPUTE_CORE_INCLUDE_PATH) \
$(QSHETCOMPUTE_OPENCL_INC_PATH) \
$(QSHETCOMPUTE_DSP_STUB_PATH)
LOCAL_SHARED_LIBRARIES := qshetcompute libhetcompute-hexagon-prebuilt libOpenCL-prebuilt
LOCAL_CPPFLAGS := -pthread -std=c++11 -stdlib=libstdc++
LOCAL_LDLIBS := -llog -lGLESv3 –lEGL
LOCAL_CFLAGS := -DHAVE_CONFIG_H=1 -DHAVE_ANDROID_LOG_H=1 -DHETCOMPUTE_HAVE_RTTI=1
-DHETCOMPUTE_HAVE_OPENCL=1 -DHETCOMPUTE_HAVE_GPU=1 -DHETCOMPUTE_HAVE_GLES=1
-DHETCOMPUTE_HAVE_QTI_DSP=1 DHETCOMPUTE_THROW_ON_API_ASSERT=1
-DHETCOMPUTE_LOG_FIRE_EVENT=1
ifeq ($(TARGET_ARCH_ABI), arm64-v8a)
LOCAL_LDFLAGS := -Wl,-allow-shlib-undefined
endif
LOCAL_SRC_FILES := $(QSHETCOMPUTE_SAMPLES_SRC_PATH)/$1.cc
include $(BUILD_EXECUTABLE)
endef
运行以下命令构建应用:
$ANDROID_NDK/ndk-build HetCompute
SDK支持异构计算及GPU和DSP卸载。使用OpenCL和OpenGL内核支持GPU卸载。卸载机制需OpenCL 1.2或更高版本,或Qualcomm GPU原生驱动程序。社区一直在收集支持OpenCL的Android设备情况。
使用HetCompute,利用OpenCL作为GPU后端,需要 OpenCL C++ 头文件cl.hpp,此文件需要修补。有关修补cl.hpp的说明,请参看OpenCL C++支持页面。在Android.mk文件中,设置LOCAL_C_INCLUDES,以包含OpenCL头文件的路径。在上面的Android.mk中,路径被称为QSHETCOMPUTE_OPENCL_INC_PATH。libOpenCL-prebuit是指相应的32位或64位OpenCL库。
要利用支持Hexagon的库构建应用,设置LOCAL_C_INCLUDES,包含使用Hexagon SDK生成的DSP存根头文件。在Android.mk示例文件中称为QSHETCOMPUTE_DSP_STUB_PATH。
Hexagon DSP支持
配合Hexagon DSP任务使用HetCompute需要正确安装Hexagon SDK。本节假定程序员熟悉Hexagon SDK。此外,HetCompute Hexagon DSP卸载还需要正确安装OpenCL库。
构建HetCompute DSP示例分为两步。首先,使用Hexagon SDK构建hetcompute_dsp stub和skel库,然后使用先前生成的存根库编译并构建HetCompute DSP示例。为方便使用,安装会分发示例使用的stub和skel库。库文件位于$HETCOMPUTE_DIR/external/dsp/。
在运行HetCompute DSP示例之前,应将skel和stub库推送到设备。请参考Hexagon SDK,确定设备中库的安装位置。
运行HetCompute DSP示例:
•$HETCOMPUTE_DIR/external/dsp/提供了自述文件,说明了如何编译DSP skel和stub库,以便在stub和skel库中添加新的函数。如果使用HetCompute SDK包中包含的预编译DSP skel和stub库,可以跳过此步骤。 •将库推送到设备并运行DSP示例。
$ANDROID_SDK/adb shell mkdir -p /data/local/tmp/hetcompute/
cd $HETCOMPUTE_DIR
$ANDROID_SDK/adb push lib/armeabi-v7a/libhetcompute-@QS_HETCOMPUTE_VERSION@.so /system/vendor/lib
$ANDROID_SDK/adb push samples/build/android/libs/armeabi-v7a/hetcompute_sample_hexagon_is_prime /data/local /tmp/hetcompute
$ANDROID_SDK/adb push external/dsp/lib/libhetcompute_dsp_skel.so /system/lib/rfsa/adsp $ANDROID_SDK/adb push external/dsp/lib/libhetcompute_dsp.so /system/vendor/lib
$ANDROID_SDK/adb shell chmod 0755 /data/local/tmp/hetcompute/hetcompute_sample_hexagon_is_prime
$ANDROID_SDK/adb shell /data/local/tmp/hetcompute/hetcompute_sample_hexagon_is_prime
•注意:如果遇到问题,请确认Hexagon SDK中包含的计算器示例应用可以在设备上正常运行,并且设备支持DSP执行。
OpenCL C ++支持
使用HetCompute,利用OpenCL作为GPU后端,需要Khronos的OpenCL C++ 头文件(具体版本需匹配OpenCL驱动安装程序)。
头文件应安装于编译器搜索到的子目录${includedir}/OpenCL/中(比如,/usr/local/include)。或者,需要将其他选项作为编译标志传递(比如,-I${includedir})。
Qualcomm 开发者专区是 Qualcomm 联合CSDN 共同打造的面向中国开发者的技术专区。致力于通过提供全球最新资讯和最多元的技术资源及支持,为开发者们打造全面一流的开发环境。本专区将以嵌入式、物联网、游戏开发、Qualcomm® 骁龙™处理器的软件优化等技术为核心,打造全面的开发者技术服务社区,为下一代高性能体验和设计带来更多的想法和灵感。
加入 Qualcomm 开发者专区