资讯详情

如何使用Beaglebone® Black进行图形开发?
来源:本站 发布时间:2021-06-30 类型:元器件知识
开源硬件Beaglebone® Black只需10秒启动Linux操作系统,兼具低成本、开源等特点,BeagleBoard.org®基金会已经就图形开发学习与Imagination公司展开合作,使得该开源硬件成为学生教学和基础OpenGL ES2.0学习的理想平台

开源硬件Beaglebone® Black只需10秒启动Linux操作系统,兼具低成本、开源等特点,BeagleBoard.org®基金会已经就图形开发学习与Imagination公司展开合作,使得该开源硬件成为学生教学和基础OpenGL ES2.0学习的理想平台(OpenGL ES是OpenGL三维图形API子集,针对手机和游戏主机等嵌入式设备而设计),而以往要在标准计算机上进行此类开发和学习。Beaglebone® Black板载主处理器采用Arm® Cortex® A8内核,虽然使用旧的PowerVR SGX 530图形处理单元(GPU),但对于教育应用来说,可利用标准OpenGL® ES 2.0和OpenCL 1.1 API增强应用功能。(OpenCL是一个为异构平台编写程序的框架,此异构平台可由CPU、GPU或其他类型的处理器组成。


1625067643(1)


Beaglebone® Black▲


新发布的OpenCL软件库和文档支持Beaglebone® Black。在不要求高性能的前提下,学生或者初学者能够以较低成本学习如何在Beaglebone® Black上编程。某些应用对延迟要求不高,A8内核负荷降低有利于大量信号处理任务。例如,软件库中包括ALSA采样率转换器,在延迟要求不高的情况下,可将A8的负荷从55%降低到20%。借助于该软件库和Beaglebone®社区的力量,相信OpenCL会发扬光大。





SGX530支持OpenCL吗?

PowerVR SGX530是Imagination公司较成功的GPU设计之一,至今仍广泛使用。但是,PowerVR SGX530已经具有十年历史,其关键设计工作是在OpenCL成为标准之前进行的。不过,Imagination致力于在PowerVR SGX530上提供OpenCL 1.1支持,Beaglebone® Black取得了巨大成功之后,Imagination更是将这项工作持续进行下去。软件包中的SGX530 OpenCL二进制文件仍在开发中,这些二进制文件尚未完全满足OpenCL 1.1一致性要求。





使用OpenGL ES2.0

Beaglebone® Black系统镜像预装TI SGX图形驱动程序和PowerVR SDK,这些是OpenGL和OpenCL开发的基础。PowerVR SDK提供一些示例——从绘制三角形作为最基本的图形元素开始(图1),直到使用顶点和片段着色器获得更复杂的图像(图2),这些示例可用于自学目标,或者将Beaglebone® Black用作移动图形入门课程的开发平台。


1625067665(1)

图1:基本三角形▲


1625067674(1)

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





理解OpenCL 1.1

可以从这里下载OpenCL软件包,其中包含一个构建脚本,将安装OpenCL软件库并修补PowerVR SDK,仅允许为Beaglebone® Black构建OpenCL 1.1矩阵示例。

OpenCL矩阵乘法(Matrix Multiplication)示例用于教育目的,以了解OpenCL如何在Beaglebone® Black等嵌入式平台上运行。要了解的关键点是在Arm A8和PowerVR SGX 530内核之间传递数据缓冲区,以及管理它们之间的数据的缓存一致性时所隐含的开销(overhead)。在此开销时间内,无法完成任何处理工作,因此可以将其视为被浪费的时间。Beaglebone® Black上的OpenCL在下列情况特别有用:图3所示处理时间与开销相比,因为这是在SGX处理任务时释放A8内核以执行其他任务。


1625067685(1)

图3:OpenCL开销和处理时间▲


这里使用几个OpenCL内核说明如何在float4类型(四个32位数据值的数据包)上使用单指令多数据(SIMD)指令提高SGX处理性能。必须注意的是,如果目标是缩短Beaglebone® Black处理时间,最佳解决方案是使用Arm® NEON intrinsic指令,因为其没有开销。





使用OpenCL 1.1

矩阵乘法示例对于理解OpenCL很有用。下一步是在具有高处理能力和延迟要求不高的示例中使用OpenCL,例如音频播放器应用中使用的ALSA采样率转换器(SRC)。较高的处理要求来自44.1kHz至48kHz采样,而播放器可以放宽延迟要求。OpenCL实现适合于如图4所示的ALSA软件,libspeexdsp层已修改为调用OpenCL。


1625067695(1)

图4:ALSA软件体系结构▲


下载ALSA软件包,运行脚本来构建此示例。OpenCL软件库作为C++软件库,因此ALSA需要使用g++进行编译,确保正确调用OpenCL构造函数/析构函数。g ++编译器比GCC严格,大多数补丁程序是为了纠正指针类型转换,并确保已初始化结构以正确顺序被完全初始化。

为了利用OpenCL,算法必须是完全可并行的,并且对每个输出样本执行相同操作。libspeexdsp中的SRC算法实际上并不执行此操作,因为内部循环会计算外部循环的下一次迭代中使用的索引值,这就需要对ALSA SRC算法进行重构,以便可以将索引计算步骤从处理循环中取出并首先实施,以使每次迭代的处理循环都相同。

由于aplay只是一个播放的应用,等待时间要求不高。事实证明这是必要的,因为处理160个样本的标准输入音频缓冲区大小的开销,阻止实时执行OpenCL调用。640个或更多样本的缓冲区大小可实现可靠的操作。当在A8上实施SRC时,具有1600个样本缓冲区的A8负载从55%降低到了20%。CPU计算负荷降低,这是在Beaglebone® Black上使用OpenCL带来的收益。希望社区开发者能够找到其他使用案例,提高Beaglebone® Black系统的性能。OpenCL下载包中的文档更加详细,帮助读者理解OpenCL操作并能够有效地使用它。

原文链接


1625067716(1)