第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例子
· · · · · · (
收起)
1 有用 Marvin不慌 2022-10-13 14:24:06 北京
这将是一本各大公司开源爱好者必备的学习材料。作者从自身理解的角度,用尽可能简洁的语言讲解清楚开源项目中涉及概念或者技术,推荐阅读!
0 有用 异步图书 2022-10-12 11:29:55
本书的主要开发环境是Linux的Ubuntu发行版,基于ARM64架构。全书以实践为主,包含了大量实际案例,对应有GitHub的page和代码仓。
1 有用 Marvin不慌 2022-10-13 14:24:06 北京
这将是一本各大公司开源爱好者必备的学习材料。作者从自身理解的角度,用尽可能简洁的语言讲解清楚开源项目中涉及概念或者技术,推荐阅读!
0 有用 异步图书 2022-10-12 11:29:55
本书的主要开发环境是Linux的Ubuntu发行版,基于ARM64架构。全书以实践为主,包含了大量实际案例,对应有GitHub的page和代码仓。