ARM嵌入式系统编程与优化

ARM嵌入式系统编程与优化
分享
扫描下方二维码分享到微信
打开微信,点击右上角”+“,
使用”扫一扫“即可将网页分享到朋友圈。
作者:
2017-09
版次: 1
ISBN: 9787111578031
定价: 59.00
装帧: 平装
开本: 16开
纸张: 胶版纸
页数: 204页
42人买过
  •   本书结合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 

  • 内容简介:
      本书结合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 

查看详情
系列丛书 / 更多
ARM嵌入式系统编程与优化
Java编程思想(第4版)
[美]Bruce Eckel 著;陈昊鹏 译
ARM嵌入式系统编程与优化
数据挖掘:概念与技术(原书第3版)
[美]Jiawei、[美]Micheling、[美]Jian Pei 著;范明、孟小峰 译
ARM嵌入式系统编程与优化
算法导论(原书第3版)
[美]Thomas、[美]Charles、[美]Ronald、[美]Clifford Stein 著;殷建平、徐云、王刚 译
ARM嵌入式系统编程与优化
数据结构与算法分析:Java语言描述
[美]马克·艾伦·维斯 著;陈越 译
ARM嵌入式系统编程与优化
C程序设计语言(第二版)
[美]Brian(布莱恩·克尼汉)、[美]Dennis M.Ritchie(丹尼斯·里奇) 著;徐宝文、李志 译
ARM嵌入式系统编程与优化
C程序设计语言(第2版·新版) 习题解答
吉米拜尔 著;杨涛 译;[美]汤朵
ARM嵌入式系统编程与优化
计算机科学丛书·云计算:概念、技术与架构
[美]Thomas、[英]Zaigham、[巴西]Ricardo Puttini 著;龚奕利、贺莲、胡创 译
ARM嵌入式系统编程与优化
数据库系统概念:(原书第6版)
[美]Abraham、Henry、S.Sudarshan 著;杨冬青、李红燕、唐世渭 译
ARM嵌入式系统编程与优化
深入理解计算机系统(原书第3版)
[美]兰德尔 E.布莱恩特(Randal E.·Bryant) 著;龚奕利、贺莲 译
ARM嵌入式系统编程与优化
编译原理:原理、技术与工具
[美]阿霍 著;赵建华 译
ARM嵌入式系统编程与优化
计算机科学导论:原书第3版
[美]Behrouz Forouzan 著;刘艺 译
ARM嵌入式系统编程与优化
软件工程:实践者的研究方法(原书第8版 本科教学版)
[美]罗杰 S. 普莱斯曼 著;郑人杰、马素霞 译