PowerVR与BeagleBoneBlack开发的乐趣:让低成本开发更容易

2023-10-08 20:10

本文主要是介绍PowerVR与BeagleBoneBlack开发的乐趣:让低成本开发更容易,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

开发板很酷, BeagleBone®Black(BBB)是最有趣的开发板之一。这种广泛使用的微型电路板价格约为35英镑,启动Linux只需10秒,让任何有兴趣的开发者快速入手。

为此,Imagination公司一直与 BeagleBoard.org®基金会合作,使用户能够从 BBB 中获益。BeagleBone®黑色 (BBB) 板上的主要处理器为Arm®Cortex®A8和PowerVR  SGXTM  530 图形处理单元 (GPU),从教育角度来看,开发者可利用标准 OpenGL® ES 2.0 和 Open CL TM1.1 ABI更好地开发应用程序。

新发布的 OpenCL 库和文档允许 BBB 用于探索 OpenCL。尽管它不是一个高性能的解决方案,但好处是让学生能够以相对较低的成本学习如何在BBB平台上编程。一些应用程序具有宽松的延迟要求和大量的信号处理,这将受益于卸载的A8核。例如,文档包中包含 ALSA 示例率转换器 ,如果延迟放宽,A8 负载将从 55% 降低到 20%。希望通过提供这个库,BeagleBone社区可以找到其他有用的地方来利用OpenCL。

在PowerVR SGX530上运行OpenCL——真的吗?

PowerVR SGX530 是Imagination最成功的 GPU 设计之一,目前仍被广泛使用中。不过,SGX530 是10年前的设计,并在Open CL成为标准前设计的。尽管如此,Imagination还是在PowerVR SGX530上为OpenCL 1.1提供了支持,鉴于BeagleBone Black的广泛使用,我们重新启动了这项工作,并在这里介绍它。

此包中的 SGX530 OpenCL 二进制仍然是一个正在进行的工作,必须注意的是,这些二进制文件尚未完全符合OpenCL 1.1 一致性。我们不应认为 OpenCL 驱动程序是"原样"的,并且有在示例中描述了局限性。

使用OpenGL ES2.0

有一个特定的 BBB 映像 AM3358 Debian 9.12 2020-04-06 4GB SD ImgTec 附带 TI SGX 图形驱动程序和PowerVR  SDK 预装。这是探索开放GL和OpenCL的基础。

BBB 映像下载地址https://debian.beagleboard.org/images/bone-debian-9.12-imgtec-armhf-2020-04-06-4gb.img.xz

PowerVR  SDK 提供了一些示例,从将三角形绘制为最基本的图形元素(图 1)开始,直至使用顶点和片段着色器来生成更复杂的图像(图 2)。这可用于自学。或者,BBB 也可以用作移动图形入门课程的开发平台。

图1:基本三角形

图2:添加顶点和片段着色器

理解OpenCL1.1

OpenCL软件包可以在Imagination Technology 大学项目网站(https://university.imgtec.com/)下载。此软件包包含一个构建脚本,该脚本将安装OpenCL 库并修补 PowerVR  SDK,仅允许为 BBB 构建 OpenCL 1.1 矩阵示例。

OpenCL 矩阵乘法示例用于教育目的,以了解OpenCL如何在嵌入式平台(如BBB)上运行。要理解的关键点是,在Arm A8和PowerVR SGX530之间传递数据缓冲区以及管理它们之间的数据缓存一致性所隐含的开销。在这段开销时间内,没有有用的处理工作完成,因此可以认为是“浪费”时间。与开销相比,图 3 中显示的处理时间非常大,例如,当 A8在 SGX 处理时释放以执行其他任务时,BBB 上的 OpenCL 变得非常有用。

图3:OpenCL开销和处理时间

使用多个 OpenCL 核来说明如何使用float4 类型(四包 32 位数据值包)上的单指令多重数据 (SIMD) 指令来提高SGX的处理性能。

必须指出,如果目标是 BBB 上最快的处理时间,那么最佳解决方案是使用 Arm® NEONTM内部指令,因为不涉及开销。

使用OpenCL 1.1

矩阵乘法示例有助于理解 OpenCL。下一步是在一个真实的示例中使用OpenCL,该示例具有高处理和宽松延迟的正确组合。所选示例是音频播放器应用程序中使用的 ALSA 采样率转换器(SRC)。高处理要求来自 44.1kHz 到48kHz 的上采样,事实上,它是一个播放器,这意味着延迟要求可以放宽。OpenCL 实现适合 ALSA 软件,如图 4 所示,修改libspeexdsp层以调用OpenCL。

图 4:ALSA 软件架构与 libspeexdsp 修改为调用 OpenCL

这个例子是通过运行一个脚本来构建的,这个脚本将下载并修补ALSA包。OpenCL 库是作为C++库提供,因此 ALSA 需要与 g++编译,以确保 OpenCL构造函数/析构函数被正确调用。g++编译器比 GCC 更严格,因此大多数补丁都是为了纠正指针上的类型转换,确保初始化的结构完全初始化,并顺序正确。

要利用 OpenCL,所使用的算法必须完全并行,每个输出样本都执行相同的操作。libspeexdsp中的SRC 算法实际上并没有做到这一点,因为内循环计算的索引值将用于外循环的下一次迭代。这意味着需要对ALSA-SRC算法进行重新分解,以便可以将索引计算步骤从处理循环中析构出并优先实现,从而使处理循环在每次迭代中都是相同的。

由于aplay只是一个回放应用程序,因此可以放宽延迟要求。结果证明这是必要的,因为处理160个样本的标准输入音频缓冲区大小的开销阻止了OpenCL调用的实时执行。缓冲尺寸为 640 个或更多样本,实现了可靠的操作。通过 1600 个样本缓冲区,在A8上运行SRC时的A8负载从55%降低到20%。此 CPU 卸载是在 BBB 上使用 OpenCL 的主要优势,我们希望社区能够找到其他能够提高基于 BBB 系统的性能的使用案例。

OpenCL下载包中的文档更加详细,以帮助读者了解 OpenCL 操作并能够有效地使用它。

英文链接:https://www.imaginationtech.com/blog/fun-with-powervr-and-the-beaglebone-black-low-cost-development-made-easy/

声明:本文为原创文章,转载需注明作者、出处及原文链接。

欢迎加入Imagination GPU与人工智能交流群

群已满200人,入群请加小编拉进群,

小编微信号:eetrend89(添加请备注IMG)

推荐阅读

Imagination、北大顶级联合 《移动图形概论》课程强势登陆学堂在线

END

Imagination Technologies是一家总部位于英国的公司,致力于研发芯片和软件知识产权(IP),基于Imagination IP的产品已在全球数十亿人的电话、汽车、家庭和工作场所中使用。获取更多物联网、智能穿戴、通信、汽车电子、图形图像开发等前沿技术信息,欢迎关注 Imagination Tech !

长按识别二维码


关注我们

这篇关于PowerVR与BeagleBoneBlack开发的乐趣:让低成本开发更容易的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/167701

相关文章

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

使用Python开发一个现代化屏幕取色器

《使用Python开发一个现代化屏幕取色器》在UI设计、网页开发等场景中,颜色拾取是高频需求,:本文主要介绍如何使用Python开发一个现代化屏幕取色器,有需要的小伙伴可以参考一下... 目录一、项目概述二、核心功能解析2.1 实时颜色追踪2.2 智能颜色显示三、效果展示四、实现步骤详解4.1 环境配置4.

Python使用smtplib库开发一个邮件自动发送工具

《Python使用smtplib库开发一个邮件自动发送工具》在现代软件开发中,自动化邮件发送是一个非常实用的功能,无论是系统通知、营销邮件、还是日常工作报告,Python的smtplib库都能帮助我们... 目录代码实现与知识点解析1. 导入必要的库2. 配置邮件服务器参数3. 创建邮件发送类4. 实现邮件

基于Python开发一个有趣的工作时长计算器

《基于Python开发一个有趣的工作时长计算器》随着远程办公和弹性工作制的兴起,个人及团队对于工作时长的准确统计需求日益增长,本文将使用Python和PyQt5打造一个工作时长计算器,感兴趣的小伙伴可... 目录概述功能介绍界面展示php软件使用步骤说明代码详解1.窗口初始化与布局2.工作时长计算核心逻辑3

python web 开发之Flask中间件与请求处理钩子的最佳实践

《pythonweb开发之Flask中间件与请求处理钩子的最佳实践》Flask作为轻量级Web框架,提供了灵活的请求处理机制,中间件和请求钩子允许开发者在请求处理的不同阶段插入自定义逻辑,实现诸如... 目录Flask中间件与请求处理钩子完全指南1. 引言2. 请求处理生命周期概述3. 请求钩子详解3.1

如何基于Python开发一个微信自动化工具

《如何基于Python开发一个微信自动化工具》在当今数字化办公场景中,自动化工具已成为提升工作效率的利器,本文将深入剖析一个基于Python的微信自动化工具开发全过程,有需要的小伙伴可以了解下... 目录概述功能全景1. 核心功能模块2. 特色功能效果展示1. 主界面概览2. 定时任务配置3. 操作日志演示

JavaScript实战:智能密码生成器开发指南

本文通过JavaScript实战开发智能密码生成器,详解如何运用crypto.getRandomValues实现加密级随机密码生成,包含多字符组合、安全强度可视化、易混淆字符排除等企业级功能。学习密码强度检测算法与信息熵计算原理,获取可直接嵌入项目的完整代码,提升Web应用的安全开发能力 目录

一文教你如何解决Python开发总是import出错的问题

《一文教你如何解决Python开发总是import出错的问题》经常朋友碰到Python开发的过程中import包报错的问题,所以本文将和大家介绍一下可编辑安装(EditableInstall)模式,可... 目录摘要1. 可编辑安装(Editable Install)模式到底在解决什么问题?2. 原理3.

Python+PyQt5开发一个Windows电脑启动项管理神器

《Python+PyQt5开发一个Windows电脑启动项管理神器》:本文主要介绍如何使用PyQt5开发一款颜值与功能并存的Windows启动项管理工具,不仅能查看/删除现有启动项,还能智能添加新... 目录开篇:为什么我们需要启动项管理工具功能全景图核心技术解析1. Windows注册表操作2. 启动文件

使用Python开发Markdown兼容公式格式转换工具

《使用Python开发Markdown兼容公式格式转换工具》在技术写作中我们经常遇到公式格式问题,例如MathML无法显示,LaTeX格式错乱等,所以本文我们将使用Python开发Markdown兼容... 目录一、工具背景二、环境配置(Windows 10/11)1. 创建conda环境2. 获取XSLT