|
|
|
|
移动端

1.1 以性能为导向的编程

《ARM嵌入式系统编程与优化》第1章Linux/ARM嵌入式平台,本章介绍如何使用GCC编译器、汇编器和连接器来编写和执行独立的汇编语言程序,以及如何将一个C语言代码和汇编语言代码合起来,以验证汇编代码子程序的正确性。本节为大家介绍以性能为导向的编程。

作者:梁元宇 译来源:机械工业出版社|2017-09-26 18:59

【新品产上线啦】51CTO播客,随时随地,碎片化学习

第1章 Linux/ARM嵌入式平台

可以传输大量多媒体、具有高速无线宽带连通性和高分辨遥感和信号处理的移动设备和可穿戴设备对我们的文化的影响日益深远。这些设备的出现归功于两项关键技术。

第一项技术是在无形中影响着所有设备的ARM处理器技术。ARM处理器在20世纪80年代的消费性电子产品中开始使用,之后逐渐成为实际的嵌入式处理器技术。

与台式机和服务器处理器不同,ARM处理器不是独立芯片产品,而是具有多样性和异质性嵌入式片上系统(SOC)的集成部件,是可以针对各种特定产品实现定制化的部件。

嵌入式片上系统是一组在单片上相互连接的硬件模块。典型的片上系统包括一个或者多个ARM处理器内核。这些处理器充当整个片上系统的“主人”或者中央控制器,它们对用户交互、外围设备的持续控制以及专用协处理器负责。

除了处理器内核外,典型的片上系统还包含一系列不同类型的存储接口(例如同步动态随机存储器、闪存等)、通信接口(USB、蓝牙、WiFi等),以及图形、视频等专用处理器(例如图形处理单元)。

图1-1所示的是苹果A8芯片,它是苹果iPhone 6的处理器。其中有一块称为“CPU”的区域,它包含一个双核ARM处理器;还有一块称为“GPU”的区域,它包含一组用于视频和图形的专用处理器。图中大块未标记区域包含其他模块,它们常用于各种支持iPhone功能的外围设备。

从执行用任何编程语言编写的任意程序的能力这种意义上来说,ARM处理器包含了片上系统的“计算”部分。然而,根据现代台式机和服务器的制定标准,ARM处理器是低效率处理器,因为相对于台式机和服务器处理器,它们的设计更注重高能效性。

催生现代消费性电子产品的第二项技术是Linux操作系统(OS)——几乎所有的ARM处理器都运行它。由于免费可用,Linux被成功且广泛用于台式机和服务器,并且成为一个通用标准的嵌入式操作系统。作为一个嵌入式操作系统,Linux大大促进了不同嵌入式平台间的代码开发和代码重用。

1.1 以性能为导向的编程

一般情况下,嵌入式处理器与台式机和服务器处理器有着不同的设计目标。移动设备嵌入式处理器特别强调能效目标高于其他所有目标,并且强调高效执行代码,这是因为和为台式机和服务器处理器编写代码相比,嵌入式系统一般在编程方面需要更多的工作。

因为,台式机和服务器处理器的设计是从两个方面获得最大性能:其一是遗留代码,即很久以前处理器早期版本中编写和编译的代码;其二是与处理器无关的代码,即不是为任何特定目标处理器编写的代码。对于大量的实际遗留代码和能耗问题,可通过应用以下两点获取性能:

指令级并行提取。处理器试图:在每个时钟周期执行尽可能多的指令;改变指令执行顺序来减少相关指令之间的等待时间;在知道它们是否被需要以及必要时抛弃不必要的结果之前预测执行行为和执行指令。这允许处理器实现最大化指令执行速率,即便在任何特定方式下程序代码中的指令处于无序状态。

大而复杂的缓存。处理器试图最大化存储系统性能,即使程序访问附加内存这些非理想存储。这涉及智能数据预取、存储器访问调度、高关联性,以及为避免重复访问相同存储而允许缓存等技术。

但是,嵌入式处理器通常放弃大多数这些特性,因为它们会使得嵌入式处理器在程序有无“性能优化”之间具有更大的性能差距。

牢记一点,虽然这种差异仅在受到计算量限制的程序中明显,这些程序的速度或响应时间是由处理器或存储速度决定的,而不是由输入和输出决定。例如,嵌入式处理器压缩一段视频明显比服务器处理器需要更多的时间,因为等待时间是由处理器和存储速度决定的。

另一方面,受到I/O限制的程序的性能是由通信信道或其他外设的速度决定的。例如,一个程序强迫用户等待下载的数据,无论处理器技术如何,它也不会更快。在这种情况下,响应时间仅由设备完成下载有多快决定。

那么,有多少移动设备嵌入式程序受到计算量限制,而不是I/O限制?大多数图像和视频编码受到计算量限制,但因为这些通常是基于变化很少的标准。大多数的片上系统厂商是“骗子”——通过把这些任务交给专用硬件而不是在ARM处理器内核运行的软件来处理。

然而,诸如计算机视觉等下一代嵌入式应用将会用到大量进化算法,这些算法大部分是受到计算量限制的。这种例子包括一些将全景图像中的独立图像连接到一起、人脸检测和识别、增强现实和目标识别等程序。

本书针对一些影响处理器性能的程序设计方法给出了一个总体概览,即程序员可以仅对代码做改变而不改变程序语法来改进代码性能。

这些技术通常需要程序员以暴露底层微体系结构中的特性这种方式编写代码。换言之,程序员必须编写低抽象水平的代码,只有这样,程序才能知道是底层处理器技术。这通常被称为性能优化或代码优化。

这些思想并不新颖,许多技术在高性能计算领域中是很常见的。不过,本书将介绍如何在嵌入式处理器特别是ARM处理器中使用这些想法,也将介绍深入了解计算机体系结构、应用程序设计和嵌入式系统,以及在为现代嵌入式系统设计的嵌入式软件领域中得以实践的知识。

在讲述这些方法论时,本书将用到几个应用程序例子,其中包括图像变换、分形生成、图像卷积等,以及一些计算机视觉任务。这些例子将在下面三个ARM内核上使用ARMv6和ARMv7-A指令集架构:

ARM11,在Raspberry Pi 1中使用。

Cortex-A9,在Xilinx Zynq中使用(在Avnet公司的Zedboard、Adapteva公司的Parallela和National Instruments公司的myRIO设备中用到)。

Cortex-A15,在NVIDIA公司的Tegra K1中使用。

本书还介绍了使用OpenCL编程模型编写移动通用图形处理单元(GPGPU)的方法。

本书将充分利用Linux操作系统提供的系统工具,包括Linux GCC编译工具链和调试工具、性能监控支持、OpenMP多核运行环境、视频帧缓冲及视频捕获功能。

本书是配合当前市场上许多低成本的Linux/ARM嵌入式开发板而设计的。具体包括以下几类例子:

价值35美元的带有700MHz ARM11处理器的Raspberry Pi,以及有双核Cortex-A9处理器的新一代的Raspberry Pi 2。

价值65美元的带有1.7GHz四核ARM Cortex A9处理器的ODROID-U3。

价值90美元的带有1GHz ARM Cortex A8处理器的BeagleBone Black。

价值99美元的带有1GHz双核ARM Cortex A9处理器的Parallella平台。

价值169美元的带有1.6GHz四核ARM Cortex A15处理器的ODROID-XU3。

价值182美元的带有1.2GHz双核ARM Cortex A9处理器的PandaBoard。

价值192美元的带有2.23GHz四核ARM Cortex A15处理器的NVIDIA Jetson TK1。

价值199美元的带有1.8GHz四核ARM Cortex A15处理器的Arndale Octa。

价值199美元的带有666MHz双核ARM Cortex A9处理器的Avnet MicroZed。

这些平台允许程序员使用一个交互式登录会话来编译、调试和描述代码,省去了对复杂的交叉编译器、远程调试器和体系结构模拟器的需求。


喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:365934973

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

框架设计(第2版)CLR Via C#

作为深受编程人员爱戴和尊敬的编程专家,微软.NET开发团队的顾问,本书作者Jeffrey Richter针对开发各种应用程序(如Web Form、Windows For...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊