Adreno OpenCL应用程序开发
本文章将要简要讨论Adreno OpenCL应用程序的一些基本要求开发,然后介绍如何调试和分析应用程序。
Android上的OpenCL应用程序开发
目前,Adreno GPU主要在Android操作系统(OS)和更高版本上支持OpenCL。选择Linux系统。要开发与OpenCL一起运行的Android应用,开发人员需要获得熟悉Android软件开发套件(SDK)和本机开发套件(NDK)。请参阅https://developer.android.com/index.html和分别用于Android SDK和NDK的https://developer.android.com/ndk/index.html 。
本文假定您的开发正在进行中。Android平台和开发人员具有Android SDK和NDK的经验。该应用程序Linux上的开发应该相似。在Snapdragon平台上进行OpenCL开发有一些先决条件:
∎具有OpenCL支持的Snapdragon设备。并非所有Snapdragon设备都支持OpenCL。。
∎ OpenCL的软件。Adreno GPU上的OpenCL依赖于QTI专有库。□检查设备是否安装了OpenCL库。–核心库为libOpenCL.so,通常位于设备上的/ vendor / lib中。□某些供应商可能选择不包括OpenCL软件(例如Google的Nexus和Pixel设备)。
∎的OpenCL必须在NDK层运行。
∎根访问权限对于开发和测试不是必需的,但对于在性能模式下运行SOC。
下表总结了使用Adreno GPU开发OpenCL的关键要求。
调试工具
由于GPU执行具有并行性,因此调试OpenCL内核通常具有挑战性。的Adreno GPU支持内核内部的printf函数,这对于调试非常有用。使用printf ,建议减少工作量,打印带条件的变量,并避免打印过多的变量,因为printf会减慢代码执行速度。例如,一个可能仅启用有问题的工作组,甚至启用单个有问题的工作项(通过设置函数CLEnqueueNDRangeKernel中的适当偏移量)了解设备的软件版本非常重要,因为可能存在一些错误或问题。在新版本中修复。要查询软件(驱动程序)和编译器版本,请使用API函数可以使用名为clGetDeviceInfo的方法。
Snapdragon ProfilerSnapdragon Profiler
是QTI提供的配置文件工具,可在Windows,Mac和Windows XP上运行。Linux平台,允许开发人员分析CPU,GPU,DSP,内存,电源,散热,运行Android的Snapdragon处理器的网络数据。它支持OpenCL和许多图形API,例如OpenGL ES和Vulkan。有关更多详细信息,请参阅https://developer.qualcomm.com/software/snapdragon-profiler 。以下是Snapdragon Profiler为OpenCL分析提供的一些关键功能。
∎探查器具有内核分析器,它使开发人员可以对给定的对象进行静态分析。核心。它提供信息,例如寄存器占用空间,总指令和数量有关每种操作类型的说明等,以帮助开发人员更好地优化内核。
∎探查器为给定的OpenCL应用程序提供OpenCL API跟踪和日志。它允许开发人员从API级别识别并解决瓶颈,并调试应用。
∎分析器提供诸如GPU繁忙率,ALU利用率,L1 / L2缓存之类的信息命中率等,这对于开发人员识别内核中的性能问题至关重要。
∎探查器支持基于命令行的应用程序以及Android GUI应用程序。
性能分析
对于一个应用程序,准确地描述其性能至关重要。两种常用方法之后将讨论CPU计时器和GPU计时器及其主要区别。本节先来看CPU计时器。
CPU计时器
CPU计时器用于测量来自主机端的OpenCL调用的完整执行时间。这个可以通过使用标准库的一部分中的任何日期和时间函数来实现C / C ++编程语言。
OpenCL运行时入队API函数可以归类为阻止调用和非阻塞呼叫。对于非阻塞调用,必须谨慎使用CPU计时器:
∎非阻塞调用意味着主机在提交后继续执行下一条指令(通常排队等待在另一个CPU线程中执行),而不是等待函数调用完成。□内核执行API函数clEnqueueNDRangeKernel是非阻塞的功能。
∎对于非阻塞调用,实际执行时间不是函数之间的时间差呼叫。当使用CPU计时器从主机端测量内核执行时间时,必须使通过使用clWaitforEvent调用(如果有事件ID)来确保功能已完成(用于无阻塞呼叫),或clFinish。相同的规则适用于内存传输调用。
之后的文章我们将继续讨论GPU计时器,及其与CPU计时器的主要区别。