发表于2024-11-25
本书结合ARM架构和Linux工具,关注以性能为导向的嵌入式编程,深入讲解如何通过对数据、算法和存储等层面的优化,终实现性能的显著提升。本书先讲解ARM架构和嵌入式系统的基础知识,然后结合图像变换、分形生成和计算机视觉等应用案例,详细说明不同的优化方法。读者可在RaspberryPi等平台上动手运行并比较不同算法,掌握实践技巧。本书适合作为本科或研究生嵌入式系统课程的教材,也适合从事相关开发工作的程序员参考。
Jason D. Bakos,美国南卡罗来纳大学计算机科学与工程系副教授,研究方向包括高性能计算、异构网络和嵌入式计算机系统等。拥有2项专利,发表了30余篇学术论文。2009年曾获得美国国家科学基金(NSF)事业奖,现为ACM会刊《可重构技术与系统》的副主编。
目录
EmbeddedSystems:ARMProgrammingandOptimization
出版者的话
译者序
前言
致谢
第1章Linux/ARM嵌入式平台1
1.1以性能为导向的编程2
1.2ARM技术3
1.3ARM简史4
1.4ARM编程4
1.5ARM体系集架构5
1.5.1ARM通用寄存器5
1.5.2状态寄存器6
1.5.3内存寻址模式7
1.5.4GNUARM汇编8
1.6汇编优化1:排序8
1.6.1参考实现8
1.6.2汇编实现9
1.6.3结果验证11
1.6.4分析编译器生成的代码13
1.7汇编优化2:位操作15
1.8代码优化目标16
1.8.1减少执行指令数16
1.8.2降低平均CPI16
1.9使用性能计数器的运行时分析18
1.9.1ARM性能监控单元18
1.9.2LinuxPerf_Event18
1.9.3性能计数器的基础架构19
1.10检测存储器带宽22
1.11性能测试结果25
1.12性能界限25
1.13基本指令集26
1.13.1整型算术指令26
1.13.2按位逻辑指令26
1.13.3移位指令27
1.13.4移动指令27
1.13.5加载和存储指令28
1.13.6比较指令28
1.13.7分支指令29
1.13.8浮点指令29
1.14小结30
习题31
第2章多核和数据层优化:OpenMP和SIMD33
2.1本书所涉及的优化技术33
2.2阿姆达尔定律34
2.3测试内核:多项式评估35
2.4使用多核:OpenMP37
2.4.1OpenMP指令37
2.4.2范围39
2.4.3其他OpenMP指令42
2.4.4OpenMP同步42
2.4.5调试OpenMP代码44
2.4.6OpenMP并行循环编译指令46
2.4.7OpenMP与性能计数器48
2.4.8OpenMP支持霍纳内核48
2.5性能界限48
2.6性能分析49
2.7GCC中的内联汇编语言50
2.8优化1:降低每f?lop的指令数51
2.9优化2:降低CPI54
2.9.1软件流水线54
2.9.2软件流水线的霍纳方法57
2.10优化3:使用SIMD时的每指令多f?lop63
2.10.1ARM11的VFP短向量指令65
2.10.2ARMCortex的NEON指令67
2.10.3NEON内联函数69
2.11小结70
习题71
第3章算法优化和Linux帧缓冲72
3.1Linux帧缓冲72
3.2仿射图像变换74
3.3双线性插值74
3.4浮点图像变换75
3.4.1加载图像76
3.4.2渲染帧78
3.5浮点性能分析82
3.6定点运算82
3.6.1定点与浮点:准确度83
3.6.2定点与浮点:范围83
3.6.3定点与浮点:精度83
3.6.4使用定点84
3.6.5高效定点加法84
3.6.6高效定点乘法87
3.6.7确定小数点的位置89
3.6.8图像变换的范围和准确度要求90
3.6.9将浮点值转换为定点值的运算90
3.7定点性能92
3.8实时分形生成92
3.8.1像素着色94
3.8.2放大94
3.8.3范围和准确度要求95
3.9小结96
习题96
第4章存储优化和视频处理99
4.1模板循环99
4.2模板案例:均值滤波器100
4.3可分离滤波器100
4.3.1高斯模糊101
4.3.2Sobel滤波器103
4.3.3Harris角点检测器104
4.3.4Lucas-Kanade光流106
4.4二维滤波器的存储访问行为108
4.4.1二维数据展示108
4.4.2按行滤波108
4.4.3按列滤波109
4.5循环分块110
4.6分块和模板晕区112
4.7二维滤波实现案例112
4.8视频帧的捕获和转换116
4.8.1YUV和色度抽样116
4.8.2将分块导出到帧缓冲区118
4.9Video4Linux驱动和API119
4.10使用二维分块滤波器122
4.11应用可分离的二维分块滤波器123
4.12顶层循环124
4.13性能结果124
4.14小结124
习题125
第5章利用OpenCL进行嵌入式异构编程127
5.1GPU微体系结构128
5.2OpenCL128
5.3OpenCL编程模型、语法及摘要129
5.3.1主机/设备编程模型129
5.3.2错误检查130
5.3.3平台层:初始化平台131
5.3.4平台层:初始化设备133
5.3.5平台层:初始化上下文135
5.3.6平台层:内核控制136
5.3.7平台层:内核编译137
5.3.8平台层:设备存储分配140
5.4内核工作负荷分配141
5.4.1设备存储区142
5.4.2内核参数143
5.4.3内核向量化145
5.4.4霍纳内核的参数空间146
5.4.5内核属性147
5.4.6内核调度147
5.5霍纳方法的OpenCL实现:设备码152
5.6性能结果156
5.6.1参数探索156
5.6.2工作组数156
5.6.3工作组大小157
5.6.4向量大小157
5.7小结158
习题158
附录A为RaspberryPi1的Raspbian系统添加PMU支持160
附录BNEON内联函数指令163
附录COpenCL参考175
前言EmbeddedSystems:ARMProgrammingandOptimization多年来,我一直工作在可重构计算领域。可重构计算领域的目标是开发有效的工具和方法,以促进现场可编程门阵列(FPGA)作为协处理器在高性能计算机系统中的使用。
这个学科的主要挑战之一是“程序设计问题”,即FPGA的实际应用从根本上受到烦琐和容易出错的程序模型的限制。这个问题值得我们特别关注,因为它是技术优势所导致的结果:FPGA实现了细粒度并发操作,这样程序员可以控制芯片中每个电路的同步行为。然而,这种控制还要求程序员管理细粒度的控制,例如片上存储使用和路由拥塞。另一方面,CPU程序只需要考虑每一行代码的可能CPU状态,片上资源在硬件运行时将自动管理。
最近我意识到,现代嵌入式系统可能很快就会面临类似的程序设计问题。电池技术仍然相对滞后,并且在用近6年时间实现了从65nm到28nm的制造工艺后,摩尔定律的发展速度开始明显减缓。与此同时,消费者已经开始期待嵌入式系统功能的不断进步,例如能够在一副眼镜上的处理器中运行实时增强现实(AR)软件。
鉴于这些能源效率和性能的要求,许多嵌入式处理器厂商正在为微体系结构寻求更节能的方法,并经常涉及对并行类型的选择,而这一类型是不能从软件中自动提取的。这就需要程序员协助编写并行代码。这带来了很多问题:程序员要在资源和能量均有限的平台上兼顾功能和性能,要知道,在这个平台上可能包括从多核到GPU着色器单元等各种并行资源。
许多大学已经开展了“统一”的并行编程课程,这些课程涵盖了从分布式系统到多核处理器的并行编程系列。然而,教授这类主题的角度通常是高性能计算而非嵌入式计算。
随着最近RaspberryPi等先进嵌入式平台的爆发,我意识到需要开发针对嵌入式系统性能的编程课程,这些课程应涵盖从计算机体系结构到并行编程的相关主题。我也想纳入一些有趣的相关项目和课程的案例研究,这样可以避开枯燥的传统嵌入式系统课程项目(例如闪烁的LED)和并行编程课程(例如编写和优化快速傅里叶变换)。
在自己的嵌入式系统课程中使用这些想法时,我经常发现学生们会争相实现最快的图像旋转或最快的曼德布罗特集合生成器。这种竞争也激发了学生的学习热情。
如何使用本书本书面向初级或高级本科计算机科学或计算机工程课程。虽然嵌入式系统课程可能关注控制理论、机器人技术、低功耗设计、实时系统或其他相关的主题,但本书旨在介绍轻量级片上系统嵌入式处理器上的以性能为导向的编程。
本书应该结合RaspberryPi等嵌入式设计平台一起使用,这样学生可以评估书中所述的实践和方法。
在使用本书时,学生应该预先学习C编程语言和Linux操作系统的基本知识,并了解诸如任务同步等基本的并发。
教辅支持可访问网站booksite.elsevier.com/9780128003428查看本书的幻灯片、习题答案和勘误表。
致谢EmbeddedSystems:ARMProgrammingandOptimization感谢帮助我完成本书的几位学生。
2013年春季和夏季,本科生BenjaminMorgan、JonathanKilby、ShawnWeaver、JustinRobinson以及AmadeoBellotti评估了RaspberryPiBroadcomBCM2835和XilinxZynq7020上的DMA控制器和性能监控单元。
2014年夏季,本科生DanielClements帮助我开发了在ARM11、ARMCortexA9和ARMCortexA15上使用Linuxperf_event的统一方法。Daniel还评估了图像技术的OpenCL运行时,以及描述了在ODROIDXUExynos5平台上的PowerVR544GPU的性能特点。
2015年夏季,本科生Friel“Scottie”Scott帮助我评估了ODROIDXU3平台上的MaliT628GPU,并且校对了第5章的内容。
许多关于计算机视觉算法存储优化的见解来自我的研究生FanZhang的关于德州仪器关键数字信号处理器架构的自动优化模板循环的论文。
感谢以下评论者,他们在本书的编写过程中提供了反馈、见解以及有用的建议:
MiriamLeeser,美国东北大学LarryD.Pyeatt,美国南达科他矿业理工学院AndrewN.Sloss,美国华盛顿大学,同时在ARM公司做顾问工程师AmrZaky,美国圣塔克拉拉大学感谢MorganKaufmann出版公司,感谢NateMcFadden在整个写作过程中给予我的不断鼓励和无限耐心。特别感谢Nate对于本书内容所持的开放和灵活的态度,这使我在写作时能够不断跟进新发布的基于ARM的嵌入式开发平台。也要感谢SujathaThirugnanaSambandam的细心编辑,还要感谢MarkRogers为本书设计封面。
ARM嵌入式系统编程与优化 下载 mobi pdf epub txt 电子书 格式 2024
ARM嵌入式系统编程与优化 下载 mobi epub pdf 电子书很好
评分此用户未填写评价内容
评分很好
评分很好
评分可以的很详细
评分翻译的不太到位,建议买英文版的
评分很好
评分很好
评分很好的书,写的很好,非常棒~
ARM嵌入式系统编程与优化 mobi epub pdf txt 电子书 格式下载 2024