快速入门指南
本快速入门指南介绍了如何配置应用以使用二进制发行版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发行版相对于当前项目文件的位置,包括
配置构建类型
您需要确保所有配置中均作了上述更改,包括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_
• 添加列于SYMPHONY_INCLUDE_DIRS_
• 添加列于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。因此在使用这些功能前请检查产品规范。
Qualcomm 开发者专区是 Qualcomm 联合CSDN 共同打造的面向中国开发者的技术专区。致力于通过提供全球最新资讯和最多元的技术资源及支持,为开发者们打造全面一流的开发环境。本专区将以嵌入式、物联网、游戏开发、Qualcomm® 骁龙™处理器的软件优化等技术为核心,打造全面的开发者技术服务社区,为下一代高性能体验和设计带来更多的想法和灵感。
加入 Qualcomm 开发者专区