欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

高通SNPE - OpenCL简介

程序员文章站 2022-06-23 20:26:21
Adreno OpenCL应用程序开发本文章将要简要讨论Adreno OpenCL应用程序的一些基本要求开发,然后介绍如何调试和分析应用程序。Android上的OpenCL应用程序开发目前,Adreno GPU主要在Android操作系统(OS)和更高版本上支持OpenCL。选择Linux系统。要开发与OpenCL一起运行的Android应用,开发人员需要获得熟悉Android软件开发套件(SDK)和本机开发套件(NDK)。请参阅https://developer.android.com/index....

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的关键要求。

高通SNPE - 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计时器的主要区别。

本文地址:https://blog.csdn.net/weixin_38498942/article/details/109649045