描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787111578031
内容简介
本书结合ARM架构和Linux工具,关注以性能为导向的嵌入式编程,深入讲解如何通过对数据、算法和存储等层面的优化,终实现性能的显著提升。本书先讲解ARM架构和嵌入式系统的基础知识,然后结合图像变换、分形生成和计算机视觉等应用案例,详细说明不同的优化方法。读者可在RaspberryPi等平台上动手运行并比较不同算法,掌握实践技巧。本书适合作为本科或研究生嵌入式系统课程的教材,也适合从事相关开发工作的程序员参考。
目 录
目 录Embedded Systems: ARM Programming and Optimization出版者的话译者序前言致谢第1章Linux/ARM嵌入式平台 11.1以性能为导向的编程 21.2ARM技术 31.3ARM简史 41.4ARM编程 41.5ARM体系集架构 51.5.1ARM通用寄存器 51.5.2状态寄存器 61.5.3内存寻址模式 71.5.4GNU ARM汇编 81.6汇编优化1:排序 81.6.1参考实现 81.6.2汇编实现 91.6.3结果验证 111.6.4分析编译器生成的代码 131.7汇编优化2:位操作 151.8代码优化目标 161.8.1减少执行指令数 161.8.2降低平均CPI 161.9使用性能计数器的运行时分析 181.9.1ARM性能监控单元 181.9.2Linux Perf_Event 181.9.3性能计数器的基础架构 191.10检测存储器带宽 221.11性能测试结果 251.12性能界限 251.13基本指令集 261.13.1整型算术指令 261.13.2按位逻辑指令 261.13.3移位指令 271.13.4移动指令 271.13.5加载和存储指令 281.13.6比较指令 281.13.7分支指令 291.13.8浮点指令 291.14小结 30习题 31第2章多核和数据层优化:OpenMP和SIMD 332.1本书所涉及的优化技术 332.2阿姆达尔定律 342.3测试内核:多项式评估 352.4使用多核:OpenMP 372.4.1OpenMP指令 372.4.2范围 392.4.3其他OpenMP指令 422.4.4OpenMP同步 422.4.5调试OpenMP代码 442.4.6OpenMP并行循环编译指令 462.4.7OpenMP与性能计数器 482.4.8OpenMP支持霍纳内核 482.5性能界限 482.6性能分析 492.7GCC中的内联汇编语言 502.8优化1:降低每f?lop的指令数 512.9优化2:降低CPI 542.9.1软件流水线 542.9.2软件流水线的霍纳方法 572.10优化3:使用SIMD时的每指令多f?lop 632.10.1ARM11的VFP短向量指令 652.10.2ARM Cortex的NEON指令 672.10.3NEON内联函数 692.11小结 70习题 71第3章算法优化和Linux帧缓冲 723.1Linux帧缓冲 723.2仿射图像变换 743.3双线性插值 743.4浮点图像变换 753.4.1加载图像 763.4.2渲染帧 783.5浮点性能分析 823.6定点运算 823.6.1定点与浮点:准确度 833.6.2定点与浮点:范围 833.6.3定点与浮点:精度 833.6.4使用定点 843.6.5高效定点加法 843.6.6高效定点乘法 873.6.7确定小数点的位置 893.6.8图像变换的范围和准确度要求 903.6.9将浮点值转换为定点值的运算 903.7定点性能 923.8实时分形生成 923.8.1像素着色 943.8.2放大 943.8.3范围和准确度要求 953.9小结 96习题 96第4章存储优化和视频处理 994.1模板循环 994.2模板案例:均值滤波器 1004.3可分离滤波器 1004.3.1高斯模糊 1014.3.2Sobel滤波器 1034.3.3Harris角点检测器 1044.3.4Lucas-Kanade光流 1064.4二维滤波器的存储访问行为 1084.4.1二维数据展示 1084.4.2按行滤波 1084.4.3按列滤波 1094.5循环分块 1104.6分块和模板晕区 1124.7二维滤波实现案例 1124.8视频帧的捕获和转换 1164.8.1YUV和色度抽样 1164.8.2将分块导出到帧缓冲区 1184.9Video4Linux驱动和API 1194.10使用二维分块滤波器 1224.11应用可分离的二维分块滤波器 1234.12顶层循环 1244.13性能结果 1244.14小结 124习题 125第5章利用OpenCL进行嵌入式异构编程 1275.1GPU微体系结构 1285.2OpenCL 1285.3OpenCL编程模型、语法及摘要 1295.3.1主机/设备编程模型 1295.3.2错误检查 1305.3.3平台层:初始化平台 1315.3.4平台层:初始化设备 1335.3.5平台层:初始化上下文 1355.3.6平台层:内核控制 1365.3.7平台层:内核编译 1375.3.8平台层:设备存储分配 1405.4内核工作负荷分配 1415.4.1设备存储区 1425.4.2内核参数 1435.4.3内核向量化 1455.4.4霍纳内核的参数空间 1465.4.5内核属性 1475.4.6内核调度 1475.5霍纳方法的OpenCL实现:设备码 1525.6性能结果 1565.6.1参数探索 1565.6.2工作组数 1565.6.3工作组大小 1575.6.4向量大小 1575.7小结 158习题 158附录A 为Raspberry Pi 1的Raspbian系统添加PMU支持 160附录B NEON内联函数指令 163附录C OpenCL参考 175
前 言
前 言Embedded Systems: ARM Programming and Optimization多年来,我一直工作在可重构计算领域。可重构计算领域的目标是开发有效的工具和方法,以促进现场可编程门阵列(FPGA)作为协处理器在高性能计算机系统中的使用。 这个学科的主要挑战之一是“程序设计问题”,即FPGA的实际应用从根本上受到烦琐和容易出错的程序模型的限制。这个问题值得我们特别关注,因为它是技术优势所导致的结果:FPGA实现了细粒度并发操作,这样程序员可以控制芯片中每个电路的同步行为。然而,这种控制还要求程序员管理细粒度的控制,例如片上存储使用和路由拥塞。另一方面,CPU程序只需要考虑每一行代码的可能CPU状态,片上资源在硬件运行时将自动管理。 近我意识到,现代嵌入式系统可能很快就会面临类似的程序设计问题。电池技术仍然相对滞后,并且在用近6年时间实现了从65nm到28nm的制造工艺后,摩尔定律的发展速度开始明显减缓。与此同时,消费者已经开始期待嵌入式系统功能的不断进步,例如能够在一副眼镜上的处理器中运行实时增强现实(AR)软件。 鉴于这些能源效率和性能的要求,许多嵌入式处理器厂商正在为微体系结构寻求更节能的方法,并经常涉及对并行类型的选择,而这一类型是不能从软件中自动提取的。这就需要程序员协助编写并行代码。这带来了很多问题:程序员要在资源和能量均有限的平台上兼顾功能和性能,要知道,在这个平台上可能包括从多核到GPU着色器单元等各种并行资源。 许多大学已经开展了“统一”的并行编程课程,这些课程涵盖了从分布式系统到多核处理器的并行编程系列。然而,教授这类主题的角度通常是高性能计算而非嵌入式计算。 随着近Raspberry Pi等先进嵌入式平台的爆发,我意识到需要开发针对嵌入式系统性能的编程课程,这些课程应涵盖从计算机体系结构到并行编程的相关主题。我也想纳入一些有趣的相关项目和课程的案例研究,这样可以避开枯燥的传统嵌入式系统课程项目(例如闪烁的LED)和并行编程课程(例如编写和优化快速傅里叶变换)。 在自己的嵌入式系统课程中使用这些想法时,我经常发现学生们会争相实现快的图像旋转或快的曼德布罗特集合生成器。这种竞争也激发了学生的学习热情。 如何使用本书本书面向初级或高级本科计算机科学或计算机工程课程。虽然嵌入式系统课程可能关注控制理论、机器人技术、低功耗设计、实时系统或其他相关的主题,但本书旨在介绍轻量级片上系统嵌入式处理器上的以性能为导向的编程。 本书应该结合Raspberry Pi等嵌入式设计平台一起使用,这样学生可以评估书中所述的实践和方法。 在使用本书时,学生应该预先学习C编程语言和Linux操作系统的基本知识,并了解诸如任务同步等基本的并发。 教辅支持可访问网站booksite.elsevier.com/9780128003428查看本书的幻灯片、习题答案和勘误表。 致 谢Embedded Systems: ARM Programming and Optimization感谢帮助我完成本书的几位学生。 2013年春季和夏季,本科生Benjamin Morgan、Jonathan Kilby、Shawn Weaver、Justin Robinson以及Amadeo Bellotti评估了Raspberry Pi Broadcom BCM2835和Xilinx Zynq 7020上的DMA控制器和性能监控单元。 2014年夏季,本科生Daniel Clements帮助我开发了在ARM11、ARM Cortex A9和ARM Cortex A15上使用Linux perf_event的统一方法。Daniel还评估了图像技术的OpenCL运行时,以及描述了在ODROID XU Exynos 5平台上的PowerVR 544 GPU的性能特点。 2015年夏季,本科生Friel“Scottie”Scott帮助我评估了ODROID XU3平台上的Mali T628 GPU,并且校对了第5章的内容。 许多关于计算机视觉算法存储优化的见解来自我的研究生Fan Zhang的关于德州仪器关键数字信号处理器架构的自动优化模板循环的论文。 感谢以下评论者,他们在本书的编写过程中提供了反馈、见解以及有用的建议: Miriam Leeser,美国东北大学Larry D. Pyeatt,美国南达科他矿业理工学院Andrew N. Sloss,美国华盛顿大学,同时在ARM公司做顾问工程师Amr Zaky,美国圣塔克拉拉大学感谢Morgan Kaufmann出版公司,感谢Nate McFadden在整个写作过程中给予我的不断鼓励和无限耐心。特别感谢Nate对于本书内容所持的开放和灵活的态度,这使我在写作时能够不断跟进新发布的基于ARM的嵌入式开发平台。也要感谢Sujatha Thirugnana Sambandam的细心编辑,还要感谢Mark Rogers为本书设计封面。
评论
还没有评论。