快速入门指南


本快速入门指南介绍了如何配置应用以使用二进制发行版Symphony SDK。安装程序包包含针对Android(32位和64位ARM)、GNU/Linux(ARM和x86_64),微软Windows和Mac OS X 系统的预编译动态库。按照安装包的提示,在操作系统上安装发行版SDK,然后参考以下相关部分,了解如何在您的系统上使用它。

Symphony SDK 提供了以下Symphony SDK 动态库:

完全异构
• 平台:Android 32位(arm-linux-androideabi)和 Android 64位(aarch64-linux-android)
• 三个版本的库:cpu支持库、cpu+gpu支持库、cpu+gpu+hexagon dsp支持库

CPU和GPU
• 平台:Linux x86(x86_64-linux-gnu)、Mac OS X (x86_64-apple-darwin)
• 两个版本的库:cpu支持库、cpu+gpu支持库

仅支持cpu
• 平台:Linux ARM (arm-linux-gnueabihf)、Linux ARM 64-bit (aarch64-linux-gnu)、Microsoft Windows 32-bit (i386-windows、Microsoft Windows 64-bit (x86_64-windows)
• cpu支持库

您可以设定SYMPHONY_LIB_TYPE变量值选择特定的库。要选择仅支持CPU版本的Symphony SDK库,SYMPHONY_LIB_TYPE值设定为release-cpu。在Android上,要选择cpu+gpu+hexagon dsp版本,将SYMPHONY_LIB_TYPE值设定为release。默认选择cpu + gpu版本,此时SYMPHONY_LIB_TYPE值为release-gpu。

系统要求


硬件
• Windows PC, Mac OS X, and Linux
• Windows PC、Mac OS X及Linux

设备
• 目前仅支持搭载Qualcomm® Snapdragon™处理器的Android设备。您也可以在PC、Mac OS X和Linux系统上工作。

软件
• Windows: Symphony SDK 需要 Microsoft Visual Studio 2015。我们广泛使用了C++11特性,所需程序集在此发行版中得到很好支持。Symphony SDK 仅支持32位和64位 Intel平台 Microsoft Visual Studio。目前在Windows中,Symphony SDK不提供 GPU支持
。 • Mac OS X和Linux:Symphony SDK 需要 GCC 4.8或更高版本,以便利用必要的C++11功能。推荐的Symphony SDK开发环境是Ubuntu Linux 14.04 LTS或更新版本。在基本的Ubuntu系统中,可能不会默认安装必要的编译器、编译工具(如Ubuntu 14.04LTS就没有)。在这种情况下,可使用apt-get进行安装。一般来说,Linux对OpenCL有很好的支持,各种Linux发行版中均包含 OpenCL 头文件(包括OpenCL C++头文件)(比如 Ubuntu/Debian包含opencl-headers)。Mac OSX中预装了OpenCL框架。但还必须安装OpenCL C++ 头文件(无需打补丁)。目前,clang 是Xcode中仅有的支持C++11的编译器,可以编译Symphony SDK。在使用 -std=c++11时,使用 -stdlib=libc++ 以包含适当的库支持。此外,使用适当的包管理系统:fink、homebrew,或macports,安装最新版 gcc,这些系统均包含g++-4.8或更高版本。
• Android:预编译Symphony SDK库可轻松集成至 Android 现有原生应用。这些库均使用包含GCC 4.8的Google NDK r10c进行了编译。建议使用相同的NDK和编译器。需要使用GCC 4.8.x或更高版本以链接预编译库。还需使用 Qualcomm® Hexagon™ SDK ,以便使 Symphony SDK库支持cpu+gpu+hexagon dsp。建议使用1.2.2版 Qualcomm Hexagon SDK。请注意,目前还不提供针对64位Android的Hexagon SDK支持服务。

运行安装与配置



1. 验证安装:
要验证安装,请执行以下操作:
在Android中,使用ndk-build:
cd $SYMPHONY_DIR/examples
$ANDROID_NDK/ndk-build SYMPHONY_LIB_TYPE=release-cpu
# Create a directory on the device to push the executable
$ANDROID_SDK/adb shell mkdir /data/local/tmp/symphony
# Push the executable to the device
# Replace armeabi-v7a by arm64-v8a for 64 bit devices
$ANDROID_SDK/adb push obj/local/armeabi-v7a/symphony_examples_helloworld /data/local/tmp/symphony
# Push the symphony 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
$ANDROID_SDK/adb push ../lib/libsymphony-cpu-1.0.0.so /system/vendor/lib
$ANDROID_SDK/adb shell /data/local/tmp/symphony/symphony_examples_helloworld

在Android中,使用cmake:

cd $SYMPHONY_DIR/examples
cmake . -DSYMPHONY_LIB_TYPE=release-cpu
-DCMAKE_TOOLCHAIN_FILE=../lib/CMake/symphony/android.toolchain.cmake
make
$ANDROID_SDK/adb shell mkdir /data/local/tmp/symphony
$ANDROID_SDK/adb push symphony_examples_helloworld /data/local/tmp/symphony
$ANDROID_SDK/adb push ../lib/libsymphony-cpu-1.0.0.so /system/vendor/lib
$ANDROID_SDK/adb shell /data/local/tmp/symphony/symphony_examples_helloworld

注:要为64位Android构建应用,必须使用以下选项将64位工具链传递给cmake命令:

-DANDRODID_TOOLCHAIN_NAME=aarch64-linux-android-4.9

此外,如果为Android Lollipop构建应用,必须传递以下选项至cmake命令,将 Android API级别设置21:

-DANDROID_API_LEVEL=21


Linux或Mac OS X:

cd $SYMPHONY_DIR/examples
cmake . -DSYMPHONY_LIB_TYPE=release-cpu
make
./symphony_examples_helloworld


Microsoft Windows("命令提示符"窗口):

cd $SYMPHONY_DIR\examples
cmake . -DSYMPHONY_LIB_TYPE=release-cpu
cmake --build . --config Release
.\symphony_examples_helloworld

上面的代码段中,可以用release-gpu或release替换SYMPHONY_LIB_TYPE的值release-cpu,分别选择cpu+gpu 或cpu+gpu+hexagon dsp版Symphony SDK库。

Android NDK应用集成Symphony SDK:

预编译Symphony SDK库可轻松集成至 Android 现有原生应用。这些库均使用包含GCC 4.8的Google NDK r10c进行了编译。建议使用相同的NDK和编译器。需要使用GCC 4.8.x或更高版本以链接预编译库。
要使用Symphony SDK库,您需要在项目文件中作以下修改。首先,编辑项目的jni/Application.mk文件,使其包括以下条目:

APP_STL := gnustl_static
# For 64-bit android, APP_ABI := arm64-v8a
APP_ABI := armeabi-v7a
NDK_TOOLCHAIN_VERSION := 4.8
# set the APP_PLATFORM to match your platform version.
APP_PLATFORM := android-18

在使用Symphony SDK时,建议使用gnustl_static静态链接 libstdc++库。此外,如果使用64位Symphony SDK库,APP_ABI需要设置为arm64-v8a,而NDK_TOOLCHAIN应设置为4.9。如果设备运行Android L系统,APP_PLATFORM应设置为android-21。

然后编辑项目中的jni/Android.mk文件,确定Symphony SDK库、头文件及SYMPHONY_DIR的位置。对于Android而言,SYMPHONY_DIR可以是绝对路径或者当前项目的相对路径。在该位置文件中按以下设置包含SYMPHONY.mk:

SYMPHONY_VERSION := 1.0.0
SYMPHONY_LIB_TYPE :=
SYMPHONY_DIR := $(HOME)/Qualcomm/Symphony/$(SYMPHONY_VERSION)/arm-linux-androideabi
include ${SYMPHONY_DIR}/lib/SYMPHONY.mk

默认配置选择多核发行版。可以通过设置SYMPHONY_LIB_TYPE变量为下列之一:release-cpu、release-gpu 或 release (支持CPU、 GPU及Hexagon DSP),

最后,针对各构建目标,在项目的Android.mk文件中添加以下内容:

LOCAL_ARM_MODE := arm
ifeq ($(TARGET_ARCH_ABI), armeabi-v7a)
LOCAL_ARM_NEON := true
endif
LOCAL_CPP_FEATURES := exceptions
LOCAL_SHARED_LIBRARIES := libsymphony

注:Android ndk构建系统会自动从SYMPHONY.mk中选择$(SYMPHONY_CXX_FLAGS),因此不需要添加。 要使用ndk-build构建应用,运行:

$ANDROID_NDK/ndk-build

Symphony SDK还支持异构计算及GPU和DSP卸载。使用OpenCL内核支持GPU卸载。卸载机制需OpenCL 1.2或更高版本,或Qualcomm GPU原生驱动程序。社区一直在收集支持OpenCL的Android设备情况。此外,基于Qualcomm且支持OpenCL的平台是DragonBoard APQ8074。

使用Symphony SDK,利用OpenCL作为GPU后端,需要 OpenCL C++ 头文件cl.hpp,此文件需要修改。在包括SYMPHONY.mk之前,需按以下设定Android.mk文件中的ANDROID_CL_DIR变量:

ANDROID_CL_DIR :=

ANDROID_CL_DIR/include 作为include路径。 ANDROID_CL_DIR/lib用作lib路径。
或者也可将ANDROID_CL_DIR作为命令行参数传递给ndk-build:

ndk-build ANDROID_CL_DIR=

要利用支持Hexagon的库构建应用,HEXAGON_SDK变量必须设置为Hexagon SDK的根目录。此目录中包括了inc和lib目录。同样推荐使用1.2.2版Hexagon SDK。可以将此作为命令行参数传递:

ndk-build ANDROID_CL_DIR= HEXAGON_SDK=
GNU/Linux and Mac OS X
GNU/Linux 和 Mac OS X

绝大多数GNU/Linux 系统和Mac OS X均可编译Symphony SDK。这一点对于可移植应用来说非常有用,可以在Android设备上运行之前先在标准PC中测试。

Symphony SDK 需要 GCC 4.8或更高版本,以利用必要的C++11功能。推荐的Symphony SDK开发环境是Ubuntu Linux 14.04 LTS或更新版本。在基本的Ubuntu系统中,可能不会默认安装必要的编译器、编译工具(如Ubuntu 14.04LTS就没有)。在这种情况下,可使用apt-get进行安装。

*nix系统通过OpenCL支持Symphony SDK 异构执行(例如GPU卸载)。

有关修补cl.hpp的说明,请参看Symphony SDK文档OpenCL C++支持章节。

微软 Windows


Symphony SDK 二进制文件已经针对Microsoft Visual Studio编译。
这一点对于Microsoft Windows开发尤其是开发可移植并发应用非常有用,可以轻松移植至Android设备。

要求


Symphony SDK 需要 Microsoft Visual Studio 2015版。我们广泛使用了C++11特性,所需程序集在此发行版中得到很好支持。Symphony SDK 仅支持32位和64位 Intel平台 Microsoft Visual Studio。目前在Windows中,Symphony SDK不提供 GPU支持。

添加Symphony SDK至Microsoft Windows应用程序

我们提供了针对Win32和x64架构的预编译库。您的项目将需要一些改变,以便使用Symphony SDK头文件和库进行编译。如果使用cmake,请参阅针对Linux和Mac OS X的相关说明。否则,请确保您的解决方案兼容Microsoft Visual Studio 2015,右键单击项目,转至属性编辑器。在"配置属性"部分作如下改变:C/C++ - General - Additional Include Directives

在当前include列表未尾添加以下include路径,替换掉%(SYMPHONY_DIR),使其指向Symphony SDK发行版相对于当前项目文件的位置:

;%(SYMPHONY_DIR)\include
C/C++ - Code Generation - Runtime Library

改为使用 "Multi-threaded (/MT)" 或 "Multithreaded-specific DLL (/MD)"。整个解决方案中的库必须一致

Linker - Input - Additional Dependencies

添加以下库到当前库列表末尾:
;%(SYMPHONY_DIR)\lib\libsymphony.lib

替换%(SYMPHONY_DIR),指向Symphony SDK发行版相对于当前项目文件的位置,包括文件夹。替代平台: i386-windows 或 x86_64-windows。

配置构建类型
您需要确保所有配置中均作了上述更改,包括Win32和Win64构建。

调试输出
不提供调试版库。

构建
此时,您应该能够构建整个解决方案,可执行文件可供Symphony SDK使用。

2. 在应用中利用CMake使用Symphony SDK:

二进制分发版包括cmake配置选项,允许您配置应用,利用find_package命令使用Symphony SDK。编辑应用程序的CMakeLists.txt,包括以下内容: find_package(SYMPHONY PATHS ${SYMPHONY_DIR}/lib/CMake/symphony NO_DEFAULT_PATH)
if(NOT SYMPHONY_FOUND)
message(FATAL_ERROR "Symphony not found")
endif()
include_directories(${SYMPHONY_INCLUDE_DIRS})
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SYMPHONY_CXX_FLAGS}")
add_executable(your_application ${your_application_SRCS})
target_link_libraries(your_application ${SYMPHONY_LIBRARIES})

然后按以下配置应用(针对Linux和Mac OS X):

cmake . -DSYMPHONY_DIR=${HOME}/Qualcomm/Symphony/1.0.0/
-DSYMPHONY_LIB_TYPE=

要配置Android应用,请使用CMAKE_TOOLCHAIN_FILE选项,如下所示:

cmake . -DSYMPHONY_DIR=${HOME}/Qualcomm/Symphony/1.0.0/
-DSYMPHONY_LIB_TYPE=
-DCMAKE_TOOLCHAIN_FILE=

如果您的应用使用不同的构建系统,参考

$SYMPHONY_DIR/lib/CMake/lib/CMake/symphony/SYMPHONYConfig.cmake的定义,并且:
• 添加列于SYMPHONY_CXX_FLAGS_的标志至C++ 编译器标志。
• 添加列于SYMPHONY_INCLUDE_DIRS_的目录至C++ include文件。
• 添加列于SYMPHONY_LIBRARIES_的库至库标志。

支持Hexagon的库的CMake用法

如果使用支持Hexagon的Android Symphony SDK库,可在CMakelists.txt中加添加以下代码包含所需的库:

if(NOT HEXAGON_SDK)
message(FATAL_ERROR "Please specify path to HEXAGON SDK")
endif()
include_directories (${HEXAGON_SDK}/inc/stddef ${HEXAGON_SDK}/lib/common/rpcmem)
link_directories (${HEXAGON_SDK}/lib/common/remote/android_Release)
add_executable(your_application ${your_application_SRCS})
target_link_libraries(symphony_examples_${__example} ${SYMPHONY_LIBRARIES}
${HEXAGON_SDK}/lib/common/rpcmem/android_Debug/ship/rpcmem.lib)

可使用以下cmake命令配置应用:

cmake . -DSYMPHONY_DIR=${HOME}/Qualcomm/SYMPHONY/1.0.0/ -DCMAKE_TOOLCHAIN_FILE= -DSYMPH -DHEXAGON_SDK=

已知限制


某些功能视平台支持而定,比如OpenCL、OpenGL ES Compute、Hexagon DSP。因此在使用这些功能前请检查产品规范。

原文链接: https://developer.qualcomm.com/software/symphony-system-manager-sdk/quick-start-guide

Qualcomm 解决方案

 

高通软件中心

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

下载软件中心