类似推荐
编辑推荐
本书结合ARM、Linux和人工智能,讲述计算机系统软件和硬件开发。
内容简介
本书首先介绍通用处理器的架构,以及汇编和编译的技术;然后讲解 Linux 内存管理、Linux 进程管理, 以及 GDB、trace、eBPF、SystemTap 等 Linux 系统开发工具;接着通过视频编解码主流技术和 NVIDIA 计算平台 CUDA 等讨论人工智能技术在音视频领域与自然语言处理领域的应用;最后讲解标准计算平台 OpenCL 的原理、开源硬件 soDLA、Intel 神经网络异构加速芯片、SystemC 框架。本书适合从事企业系统开发及优化的技术人员阅读,也可供计算机相关专业的师生参考。
作者简介
作者周文嘉,目前就职于某国产AI GPU芯片公司,曾服务于ARM、阿里巴巴、HTC等公司,拥有10年以上工作经验,主要从事系统软件开发,涵盖系统库开发、指令集优化、Linux内核开发等,为某些开源社贡献过一定数量的补丁,担任Free time team创始人,致力于免费教育事业。
章节目录
版权信息
内容提要
推荐序
前言
作者简介
服务与支持
第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例子
计算机系统开发与优化实战是2022年由人民邮电出版社出版,作者周文嘉。
得书感谢您对《计算机系统开发与优化实战》关注和支持,如本书内容有不良信息或侵权等情形的,请联系本网站。