展开全部

主编推荐语

本书结合ARM、Linux和人工智能,讲述计算机系统软件和硬件开发。

内容简介

本书首先介绍通用处理器的架构,以及汇编和编译的技术;然后讲解Linux内存管理、Linux进程管理,以及GDB、trace、eBPF、SystemTap等Linux系统开发工具;接着通过视频编解码主流技术和NVIDIA计算平台CUDA等讨论人工智能技术在音视频领域与自然语言处理领域的应用;最后讲解标准计算平台OpenCL的原理、开源硬件soDLA、Intel神经网络异构加速芯片、SystemC框架。

本书适合从事企业系统开发及优化的技术人员阅读,也可供计算机相关专业的师生参考。

目录

  • 版权信息
  • 内容提要
  • 推荐序
  • 前言
  • 作者简介
  • 服务与支持
  • 第1章 通用处理器架构简介
  • 1.1 综述
  • 1.2 AArch64寄存器堆
  • 1.2.1 通用寄存器
  • 1.2.2 特殊寄存器
  • 1.2.3 系统控制寄存器
  • 1.2.4 处理器状态
  • 1.2.5 函数调用标准
  • 1.3 流水线
  • 1.3.1 Cortex-A77微架构
  • 1.3.2 微架构与代码优化
  • 1.4 AArch64异常级别
  • 1.5 内存模式
  • 1.5.1 内存对齐
  • 1.5.2 检查内存模式问题的工具
  • 1.6 原子操作
  • 1.6.1 指令介绍
  • 1.6.2 原子指令使用示例
  • 1.7 处理器缓存
  • 1.8 系统安全增强
  • 1.8.1 屏障指令
  • 1.8.2 PAN
  • 1.8.3 MTE
  • 1.9 虚拟化
  • 1.9.1 ARMv7a虚拟化扩展
  • 1.9.2 ARM KVM work
  • 1.9.3 ARM VHE
  • 1.9.4 虚拟化的其他特性
  • 1.10 更多处理器架构特性
  • 1.10.1 获取处理器特性
  • 1.10.2 运行时问题的深入讨论
  • 1.10.3 处理器架构检测
  • 1.10.4 ARMv8架构主要特性
  • 1.11 主流编译器和模拟器对ARMv8架构的支持
  • 1.11.1 GCC对ARMv8架构的支持
  • 1.11.2 QEMU模拟器对ARMv8架构的支持
  • 第2章 汇编与编译技术入门
  • 2.1 通过C/C++学习汇编语言
  • 2.1.1 位运算通用优化技巧
  • 2.1.2 利用ARM的ubfiz等指令优化位操作
  • 2.1.3 指令与数据保序
  • 2.2 ARM64 NEON技术
  • 2.2.1 NEON寄存器
  • 2.2.2 调试环境
  • 2.2.3 NEON编程
  • 2.2.4 不同NEON开发方式的比较
  • 2.2.5 SIMD优化技巧
  • 2.2.6 实际案例
  • 2.3 RISC-V汇编介绍
  • 2.3.1 RISC-V汇编指令说明
  • 2.3.2 RISC-V启动代码的分析
  • 2.4 玩具编译器mini_c的实现
  • 2.4.1 词法分析
  • 2.4.2 语法分析
  • 2.4.3 mini_c的源代码
  • 2.5 LLVM简介
  • 2.5.1 LLVM的代码表示
  • 2.5.2 LLVM优化
  • 2.6 LLVM实验代码
  • 2.7 LLVM源代码
  • 2.7.1 LLVM-6.0源代码编译
  • 2.7.2 LLVM-12.0源代码编译
  • 第3章 Linux内存管理
  • 3.1 从CPU角度看内存
  • 3.2 内核初始化内存
  • 3.2.1 early_fixmap_init()函数
  • 3.2.2 setup_machine_fdt()函数
  • 3.2.3 arm64_memblock_init()函数
  • 3.2.4 paging_init()函数
  • 3.2.5 bootmem_init()函数
  • 3.3 分区页帧分配器
  • 3.3.1 伙伴算法
  • 3.3.2 水位控制
  • 3.3.3 内存回收
  • 3.3.4 碎片页面规整
  • 3.4 slab分配器及kmalloc的实现
  • 3.4.1 走进slab分配器
  • 3.4.2 数据结构
  • 3.4.3 流程分析
  • 3.4.4 kmalloc的实现
  • 3.5 vmalloc()的原理和实现
  • 3.5.1 数据结构
  • 3.5.2 vmalloc()的实现
  • 3.6 malloc()/mmap()的原理和实现
  • 3.6.1 认识VMA
  • 3.6.2 malloc()的实现
  • 3.6.3 认识mm->brk
  • 3.6.4 mmap()的实现
  • 3.7 缺页异常处理
  • 3.7.1 匿名页面缺页中断
  • 3.7.2 文件映射缺页中断
  • 3.7.3 页被交换到交换分区
  • 3.7.4 写时复制
  • 第4章 Linux进程管理
  • 4.1 Linux对进程的描述
  • 4.1.1 通过task_struct描述进程
  • 4.1.2 task_struct、thread_info和内核栈的关系
  • 4.1.3 如何获取当前进程
  • 4.2 用户态进程/线程的创建
  • 4.2.1 fork()函数
  • 4.2.2 vfork()函数
  • 4.2.3 pthread_create()函数
  • 4.2.4 fork()函数、vfork()函数和pthread_create()函数的关系
  • 4.3 do_fork()函数的实现
  • 4.3.1 copy_process()函数
  • 4.3.2 wake_up_new_task()函数
  • 4.4 进程调度
  • 4.4.1 进程的分类
  • 4.4.2 与调度相关的数据结构
  • 4.4.3 调度时刻
  • 4.4.4 调度算法
  • 4.4.5 CFS
  • 4.4.6 选择下一个进程
  • 4.4.7 进程上下文切换
  • 4.5 多核系统的负载均衡
  • 4.5.1 多核架构
  • 4.5.2 CPU拓扑
  • 4.5.3 调度域和调度组
  • 4.5.4 CPU拓扑中调度域的初始化
  • 4.5.5 何时做负载均衡
  • 4.5.6 负载均衡的基本过程
  • 第5章 Linux系统开发工具
  • 5.1 GDB调试工具
  • 5.1.1 程序调试方法
  • 5.1.2 代码断点
  • 5.1.3 数据断点
  • 5.1.4 多线程调试
  • 5.1.5 捕获当前位置
  • 5.1.6 GDB的原理
  • 5.1.7 coredump文件的使用
  • 5.1.8 通过网络进行GDB远程调试
  • 5.2 trace工具
  • 5.2.1 ltrace
  • 5.2.2 strace
  • 5.2.3 ftrace
  • 5.2.4 kprobe
  • 5.3 eBPF
  • 5.3.1 prog注入流程
  • 5.3.2 eBPF寄存器
  • 5.3.3 eBPF prog的加载流程
  • 5.4 SystemTap
  • 5.4.1 底层软件工程师的困境
  • 5.4.2 SystemTap的出现和发展历史
  • 5.4.3 关于SystemTap的两个例子
  • 5.4.4 基本原理
  • 5.4.5 深入了解原理
  • 第6章 人工智能技术
  • 6.1 视频编解码主流技术及软件框架
  • 6.1.1 FFmpeg/VAAPI框架介绍
  • 6.1.2 Gstreamer框架介绍
  • 6.1.3 OpenCV框架介绍
  • 6.2 NVIDIA计算平台CUDA
  • 6.2.1 CUDA:并行化的编程模型
  • 6.2.2 线程层次结构
  • 6.2.3 CUDA的线程索引计算
  • 6.2.4 CUDA的内存模型
  • 6.2.5 CUDA用例
  • 6.3 基础技术介绍
  • 6.3.1 GEMM算法
  • 6.3.2 Resnet
  • 6.3.3 KCF算法
  • 6.3.4 PyTorch&LibTorch深度学习框架
  • 第7章 OpenCL的编程技术
  • 7.1 GPU计算与OpenCL介绍
  • 7.1.1 什么是OpenCL
  • 7.1.2 OpenCL类图
  • 7.2 OpenCL架构
  • 7.2.1 平台模型
  • 7.2.2 执行模型
  • 7.2.3 内存模型
  • 7.2.4 编程模型
  • 7.2.5 OpenCL总结
  • 7.3 关于OpenCL的例子
  • 7.4 平台、上下文、设备
  • 7.4.1 OpenCL平台
  • 7.4.2 设备
  • 7.4.3 OpenCL上下文
  • 7.5 程序对象和内核对象
  • 7.5.1 程序对象
  • 7.5.2 内核对象
  • 7.6 缓冲区
  • 7.6.1 创建内存对象
  • 7.6.2 查询缓冲区信息
  • 7.6.3 读、写和复制缓冲区
  • 7.6.4 映射缓冲区
  • 7.7 关于OpenCL的案例研究
  • 7.7.1 图像颜色模型转换
  • 7.7.2 图像缩放
  • 7.7.3 高斯模糊
  • 第8章 一些开源项目
  • 8.1 ISA-L开源项目优化技巧
  • 8.1.1 memory
  • 8.1.2 crc
  • 8.1.3 igzip
  • 8.1.4 isa-l_crypto
  • 8.2 OOPS-RTOS
  • 8.2.1 基于硬件板的OOPS-RTOS实践
  • 8.2.2 基于虚拟机的OOPS-RTOS实践
  • 8.3 基于Linux内核的BiscuitOS实践
  • 8.3.1 构建基于ARM64 Linux的BiscuitOS
  • 8.3.2 基于BiscuitOS的内核源代码实践
  • 8.3.3 基于BiscuitOS的内核模块开发
  • 8.3.4 基于BiscuitOS的应用程序开发
  • 8.3.5 BiscuitOS高级实践
  • 第9章 硬件架构
  • 9.1 概述
  • 9.2 开源硬件soDLA
  • 9.2.1 FIFO模块
  • 9.2.2 RDMA和WDMA模块
  • 9.2.3 Retiming模块和pipe模块
  • 9.2.4 CSC和CMAC模块
  • 9.2.5 DMA类型的选择
  • 9.3 Intel神经网络异构加速芯片
  • 9.3.1 Spring Hill硬件架构
  • 9.3.2 推理计算引擎ICE
  • 9.3.3 DL计算网络
  • 9.3.4 矢量处理器
  • 9.3.5 内存架构
  • 9.3.6 负载灵活及可扩展性
  • 9.3.7 神经网络推理计算优化
  • 9.3.8 通用神经网络优化
  • 9.3.9 与硬件相关的神经网络优化
  • 9.4 SystemC框架
  • 9.4.1 SystemC的用途
  • 9.4.2 SystemC环境搭建
  • 9.4.3 一个简单的SystemC例子
展开全部

评分及书评

尚无评分
目前还没人评分

出版方

人民邮电出版社

人民邮电出版社是工业和信息化部主管的大型专业出版社,成立于1953年10月1日。人民邮电出版社坚持“立足信息产业、面向现代社会、传播科学知识、服务科教兴国”,致力于通信、计算机、电子技术、教材、少儿、经管、摄影、集邮、旅游、心理学等领域的专业图书出版。