計算機系統開發與最佳化實戰

計算機系統開發與最佳化實戰

《計算機系統開發與最佳化實戰》是2022年人民郵電出版社出版的圖書,作者是周文嘉、劉盼、王鈺達。

基本介紹

  • 中文名:計算機系統開發與最佳化實戰
  • 作者:周文嘉、劉盼、王鈺達
  • 出版時間:2022年8月
  • 出版社:人民郵電出版社
  • ISBN:9787115592880
  • 類別:圖書>計算機/網路>軟體工程/開發項目管理
  • 開本:128 開
  • 裝幀:平裝-膠訂
內容簡介,圖書目錄,作者簡介,

內容簡介

本書首先介紹通用處理器的架構,以及彙編和編譯的技術;然後講解 Linux 記憶體管理、Linux *程管理, 以及 GDB、trace、eBPF、SystemTap 等 Linux 系統開發工具;接著通過視頻編解碼主流技術和 NVIDIA 計算平台 CUDA 等討論人工智慧技術在音視頻領域與自然語言處理領域的套用;後講解標準計算平台 OpenCL 的原理、開源硬體 soDLA、Intel 神經網路異構加速晶片、SystemC 框架。
本書適合從事企業系統開發及最佳化的技術人員閱讀,也可供計算機相關專業的師生參考。

圖書目錄

第1章 通用處理器架構簡介 1
1.1 綜述 1
1.2 AArch64暫存器堆 2
1.2.1 通用暫存器 2
1.2.2 特殊暫存器 2
1.2.3 系統控制暫存器 2
1.2.4 處理器狀態 3
1.2.5 函式調用標準 4
1.3 流水線 5
1.3.1 Cortex-A77微架構 5
1.*.* 微架構與代碼最佳化 7
1.4 AArch64異常級別 8
1.5 記憶體模式 9
1.5.1 記憶體對齊 9
1.5.2 檢查記憶體模式問題的工具 9
1.6 原子操作 10
1.6.1 指令介紹 10
1.6.2 原子指令使用示例 11
1.7 處理器快取 12
1.8 系統安全增強 12
1.8.1 屏障指令 12
1.8.2 PAN 13
1.8.3 MTE 14
1.9 虛擬化 14
1.9.1 ARMv7a虛擬化擴展 14
1.9.2 ARM KVM work 15
1.9.3 ARM VHE 15
1.9.4 虛擬化的其他特性 15
1.10 更多處理器架構特性 16
1.10.1 獲取處理器特性 16
1.10.2 運行時問題的深入討論 16
1.10.3 處理器架構檢測 18
1.10.4 ARMv8架構主要特性 20
1.11 主流編譯器和模擬器對ARMv8 架構的支持 21
1.11.1 GCC對ARMv8架構的支持 21
1.11.2 QEMU模擬器對ARMv8架構的支持 22
第 2章 彙編與編譯技術入門 23
2.1 通過C/C 學習彙編語言 23
2.1.1 位運算通用最佳化技巧 23
2.1.2 利用ARM的ubfiz等指令最佳化位操作 23
2.1.3 指令與數據保序 24
2.2 ARM64 NEON技術 24
2.2.1 NEON暫存器 25
2.2.2 調試環境 27
2.2.3 NEON編程 28
2.2.4 不同NEON開發方式的比較 37
2.2.5 SIMD最佳化技巧 38
2.2.6 實際案例 38
2.3 RISC-V彙編介紹 38
2.3.1 RISC-V彙編指令說明 40
2.*.* RISC-V啟動代碼的分析 41
2.4 玩具編譯器mini_c的實現 45
2.4.1 詞法分析 45
2.4.2 語法分析 46
2.4.3 mini_c的原始碼 48
2.5 LLVM簡介 49
2.5.1 LLVM的代碼表示 49
2.5.2 LLVM最佳化 50
2.6 LLVM實驗代碼 51
2.7 LLVM原始碼 52
2.7.1 LLVM-6.0原始碼編譯 52
2.7.2 LLVM-12.0原始碼編譯 53
第3章 Linux記憶體管理 54
3.1 從CPU角度看記憶體 54
*.* 核心初始化記憶體 58
*.*.1 early_fixmap_init()函式 58
*.*.2 setup_machine_fdt()函式 59
*.*.3 arm64_memblock_init()函式 60
*.*.4 paging_init()函式 61
*.*.5 bootmem_init()函式 63
3.3 分區頁幀分配器 67
3.3.1 夥伴算法 77
3.*.* 水位控制 84
3.3.3 記憶體回收 88
3.3.4 碎片頁面規整 91
3.4 slab分配器及kmalloc的實現 96
3.4.1 走*slab分配器 96
3.4.2 數據結構 98
3.4.3 流程分析 100
3.4.4 kmalloc的實現 101
3.5 vmalloc()的原理和實現 103
3.5.1 數據結構 103
3.5.2 vmalloc()的實現 105
3.6 malloc()/mmap()的原理和實現 107
3.6.1 認識VMA 107
3.6.2 malloc()的實現 112
3.6.3 認識mm->brk 112
3.6.4 mmap()的實現 114
3.7 缺頁異常處理 115
3.7.1 匿名頁面缺頁中斷 120
3.7.2 檔案映射缺頁中斷 122
3.7.3 頁被交換到交換分區 123
3.7.4 寫時複製 125
第4章 Linux*程管理 128
4.1 Linux對*程的描述 128
4.1.1 通過task_struct描述*程 128
4.1.2 task_struct、thread_info和核心棧的關係 129
4.1.3 如何獲取當前*程 131
4.2 用戶態*程/執行緒的創建 131
4.2.1 fork()函式 132
4.2.2 vfork()函式 134
4.2.3 pthread_create()函式 135
4.2.4 fork()函式、vfork()函式和pthread_create()函式的關係 136
4.3 do_fork()函式的實現 137
4.3.1 copy_process()函式 138
4.*.* wake_up_new_task()函式 144
4.4 *程調度 146
4.4.1 *程的分類 146
4.4.2 與調度相關的數據結構 147
4.4.3 調度時刻 150
4.4.4 調度算法 154
4.4.5 CFS 156
4.4.6 選擇下一個*程 158
4.4.7 *程上下文切換 162
4.5 多核系統的負載均衡 164
4.5.1 多核架構 164
4.5.2 CPU拓撲 165
4.5.3 調度域和調度組 169
4.5.4 CPU拓撲中調度域的初始化 172
4.5.5 何時做負載均衡 173
4.5.6 負載均衡的基本過程 174
第5章 Linux系統開發工具 177
5.1 GDB調試工具 177
5.1.1 程式調試方法 177
5.1.2 代碼斷點 177
5.1.3 數據斷點 182
5.1.4 多執行緒調試 184
5.1.5 捕獲當前位置 187
5.1.6 GDB的原理 191
5.1.7 coredump檔案的使用 191
5.1.8 通過網路*行GDB遠程調試 197
5.2 trace工具 198
5.2.1 ltrace 198
5.2.2 strace 200
5.2.3 ftrace 202
5.2.4 kprobe 206
5.3 eBPF 209
5.3.1 prog注入流程 209
5.*.* eBPF暫存器 210
5.3.3 eBPF prog的載入流程 210
5.4 SystemTap 241
5.4.1 底層軟體工程師的困境 241
5.4.2 SystemTap的出現和發展歷史 241
5.4.3 關於SystemTap的兩個例子 242
5.4.4 基本原理 243
5.4.5 深入了解原理 247
第6章 人工智慧技術 250
6.1 視頻編解碼主流技術及軟體框架 250
6.1.1 FFmpeg/VAAPI框架介紹 250
6.1.2 Gstreamer框架介紹 251
6.1.3 OpenCV框架介紹 253
6.2 NVIDIA計算平台CUDA 255
6.2.1 CUDA:並行化的編程模型 255
6.2.2 執行緒層次結構 256
6.2.3 CUDA的執行緒索引計算 257
6.2.4 CUDA的記憶體模型 258
6.2.5 CUDA用例 259
6.3 基礎技術介紹 261
6.3.1 GEMM算法 261
6.*.* Resnet 263
6.3.3 KCF算法 265
6.3.4 PyTorch&LibTorch深度學習框架 270
第7章 OpenCL的編程技術 273
7.1 GPU計算與OpenCL
介紹 273
7.1.1 什麼是OpenCL 273
7.1.2 OpenCL類圖 275
7.2 OpenCL架構 276
7.2.1 平台模型 277
7.2.2 執行模型 277
7.2.3 記憶體模型 282
7.2.4 編程模型 283
7.2.5 OpenCL總結 284
7.3 關於OpenCL的例子 285
7.4 平台、上下文、設備 295
7.4.1 OpenCL平台 295
7.4.2 設備 296
7.4.3 OpenCL上下文 298
7.5 程式對象和核心對象 300
7.5.1 程式對象 301
7.5.2 核心對象 303
7.6 緩衝區 305
7.6.1 創建記憶體對象 305
7.6.2 查詢緩衝區信息 306
7.6.3 讀、寫和複製緩衝區 306
7.6.4 映射緩衝區 314
7.7 關於OpenCL的案例研究 315
7.7.1 圖像顏色模型轉換 315
7.7.2 圖像縮放 317
7.7.3 高斯模糊 320
第8章 一些開源項目 323
8.1 ISA-L開源項目最佳化技巧 323
8.1.1 memory 324
8.1.2 crc 324
8.1.3 igzip 325
8.1.4 isa-l_crypto 326
8.2 OOPS-RTOS 326
8.2.1 基於硬體板的OOPS-RTOS實踐 326
8.2.2 基於虛擬機的OOPS-RTOS實踐 331
8.3 基於Linux核心的BiscuitOS實踐 332
8.3.1 構建基於ARM64 Linux的 BiscuitOS 332
8.*.* 基於BiscuitOS的核心原始碼實踐 333
8.3.3 基於BiscuitOS的核心模組開發 335
8.3.4 基於BiscuitOS的應用程式開發 337
8.3.5 BiscuitOS高級實踐 338
第9章 硬體架構 339
9.1 概述 339
9.2 開源硬體soDLA 339
9.2.1 FIFO模組 341
9.2.2 RDMA和WDMA模組 341
9.2.3 Retiming模組和pipe模組 342
9.2.4 CSC和CMAC模組 342
9.2.5 DMA類型的選擇 344
9.3 Intel神經網路異構加速晶片 344
9.3.1 Spring Hill硬體架構 345
9.*.* 推理計算引擎ICE 346
9.3.3 DL計算網路 347
9.3.4 矢量處理器 348
9.3.5 記憶體架構 349
9.3.6 負載靈活及可擴展性 349
9.3.7 神經網路推理計算最佳化 349
9.3.8 通用神經網路最佳化 350
9.3.9 與硬體相關的神經網路最佳化 351
9.4 SystemC框架 351
9.4.1 SystemC的用途 352
9.4.2 SystemC環境搭建 353
9.4.3 一個簡單的SystemC例子 354

作者簡介

周文嘉,目前就職於某國產 AI GPU 晶片公司,曾服務於 ARM、阿里巴巴、HTC 等公司,擁有 10 年以上工作經驗,主要從事系統軟體開發,涵蓋系統庫開發、指令集最佳化、Linux 核心開發等,為某些開源社貢獻過一定數量的補丁,擔任 Free time team 創始人,致力於免費教育事業。 劉盼,目前就職於某國際晶片公司,曾服務於三星電子研究所、某自動駕駛科技公司,具有手機、汽車和晶片行業的工作經驗,創辦 4 萬多人的極客社區—“人人都是極客”,擔任某科技公司合伙人,是谷歌開發者社區優秀講師。 王鈺達,加州大學伯克利分校和伊利諾伊理工學院雙碩士,目前專注於 RISC-V 工具鏈、NVDLA 工具鏈、自定義自動駕駛相關加速器晶片前端和後端設計的敏捷開發。

相關詞條

熱門詞條

聯絡我們