快速入门指南


本快速入门指南介绍了如何配置应用以使用二进制发行版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 解决方案

 

高通软件中心

通过集中式门户站无缝管理您的高通®软件和工具

下载软件中心