
作者:(美)詹森D.巴克斯(JasonD.
页数:204
出版社:机械工业出版社
出版日期:2017
ISBN:9787111578031
电子书格式:pdf/epub/txt
内容简介
本书结合ARM架构和Linux工具,关注以性能为导向的嵌入式编程,深入讲解如何通过对数据、算法和存储等层面的优化,终实现性能的显著提升。本书先讲解ARM架构和嵌入式系统的基础知识,然后结合图像变换、分形生成和计算机视觉等应用案例,详细说明不同的优化方法。读者可在RaspberryPi等平台上动手运行并比较不同算法,掌握实践技巧。本书适合作为本科或研究生嵌入式系统课程的教材,也适合从事相关开发工作的程序员参考。
作者简介
Jason D. Bakos,美国南卡罗来纳大学计算机科学与工程系副教授,研究方向包括高性能计算、异构网络和嵌入式计算机系统等。拥有2项专利,发表了30余篇学术论文。2009年曾获得美国国家科学基金(NSF)事业奖,现为ACM会刊《可重构技术与系统》的副主编。
本书特色
本书结合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















