C++ 高性能編程 The Art of Writing Efficient Programs: An advanced programmer's guide to efficient hardware utilization and compiler optimizations using C++ examples
Pikus, Fedor G. 譯 劉鵬
- 出版商: 清華大學
- 出版日期: 2022-11-01
- 定價: $834
- 售價: 8.5 折 $709
- 語言: 簡體中文
- ISBN: 7302620695
- ISBN-13: 9787302620693
-
相關分類:
C++ 程式語言
- 此書翻譯自: The Art of Writing Efficient Programs: An advanced programmer's guide to efficient hardware utilization and compiler optimizations using C++ examples (Paperback)
下單後立即進貨 (約4週~6週)
買這商品的人也買了...
-
$480$374 -
$2,770$2,632 -
$773$734 -
$454程序員修煉之道:通向務實的最高境界, 2/e
-
$602嵌入式 C語言自我修養 — 從芯片、編譯器到操作系統
-
$780$585 -
$894$849 -
$1,428$1,357 -
$378程序員軟技能
-
$654$621 -
$594$564 -
$659$626 -
$454高級 C/C++ 編譯技術 (典藏版)
-
$719$683 -
$594$564 -
$659$626 -
$650$507 -
$517高性能 Linux 網絡編程核心技術揭秘
-
$421TPM 2.0 安全算法開發示例實戰
-
$454CPU 眼裡的 C/C++
-
$654$621 -
$594$564 -
$850$663 -
$800$600 -
$654$621
相關主題
商品描述
《C++高性能編程》詳細闡述了與C++高性能編程相關的基本解決方案,主要包括性能和並發性簡介,性能測量, CPU架構、資源和性能,內存架構和性能,線程、內存和並發,並發和性能,並發數據結構,C++中的並發,高性能C++,C++中的編譯器優化,未定義行為和性能,性能設計等內容。此外,本書還提供了相應的示例、代碼,以幫助讀者進一步理解相關方案的實現過程。 本書適合作為高等院校電腦及相關專業的教材和教學參考書,也可作為相關開發人員的自學用書和參考手冊。
目錄大綱
目 錄
第1篇 性 能 基 礎
第1章 性能和並發性簡介 3
1.1 程序員要關註性能的原因 3
1.2 有關性能重要性的解釋 6
1.3 程序性能 8
1.3.1 吞吐量指標 8
1.3.2 功耗指標 9
1.3.3 實時應用性能 10
1.3.4 上下文環境 11
1.4 評估和預測性能 12
1.5 精通高性能應用程序開發 13
1.6 小結 14
1.7 思考題 15
第2章 性能測量 17
2.1 技術要求 17
2.2 性能測量示例 18
2.3 性能基準測試 25
2.3.1 C++計時器 25
2.3.2 高分辨率計時器 26
2.4 性能分析 31
2.4.1 perf性能分析器 32
2.4.2 使用perf 進行詳細性能分析 34
2.4.3 Google Performance性能分析器 37
2.4.4 使用調用圖進行性能分析 38
2.4.5 優化和內聯 42
2.4.6 實際性能分析 44
2.5 微基準測試 45
2.5.1 微基準測試的基礎知識 45
2.5.2 微基準測試和編譯器優化 48
2.5.3 Google Benchmark 51
2.5.4 微基準測試是謊言 54
2.6 小結 58
2.7 思考題 59
第3章 CPU架構、資源和性能 61
3.1 技術要求 61
3.2 CPU和性能 62
3.3 使用微基準測試性能 64
3.4 可視化指令級並行性 70
3.5 數據依賴和流水線 72
3.6 流水線和分支 77
3.6.1 分支預測 80
3.6.2 分支預測錯誤的性能分析 82
3.7 推測執行 85
3.8 復雜條件的優化 86
3.9 無分支計算 90
3.9.1 循環展開 90
3.9.2 無分支選擇 91
3.9.3 無分支計算示例 93
3.10 小結 96
3.11 思考題 97
第4章 內存架構和性能 99
4.1 技術要求 99
4.2 影響性能的不止CPU 100
4.3 測量內存訪問速度 102
4.3.1 內存架構 103
4.3.2 測量內存和緩存速度 105
4.4 內存的速度:數字 108
4.4.1 隨機內存訪問速度 108
4.4.2 順序內存訪問速度 111
4.4.3 硬件中的內存性能優化 113
4.5 優化內存性能 115
4.5.1 高效使用內存的數據結構 116
4.5.2 分析內存性能 119
4.5.3 優化內存性能的算法 121
4.6 機器里的“幽靈” 126
4.6.1 關於Spectre 127
4.6.2 Spectre攻擊示例 129
4.6.3 釋放“幽靈” 133
4.7 小結 137
4.8 思考題 137
第5章 線程、內存和並發 139
5.1 技術要求 139
5.2 理解線程和並發 139
5.2.1 關於線程 140
5.2.2 對稱多線程 141
5.2.3 線程和內存 141
5.2.4 內存受限程序和並發 145
5.3 瞭解內存同步的成本 146
5.4 數據共享成本高昂的原因 151
5.5 瞭解並發和順序 157
5.5.1 順序的需要 157
5.5.2 內存順序和內存屏障 159
5.5.3 C++中的內存順序 165
5.6 內存模型 168
5.7 小結 172
5.8 思考題 172
第2篇 並發的高級應用
第6章 並發和性能 175
6.1 技術要求 175
6.2 高效使用並發需要的條件 176
6.3 鎖、替代品及其性能 177
6.3.1 基於鎖、無鎖和無等待的程序 179
6.3.2 針對不同問題的不同鎖 181
6.3.3 鎖與無鎖的真正區別 185
6.4 並發編程的構建塊 187
6.4.1 並發數據結構的基礎知識 188
6.4.2 計數器和累加器 191
6.4.3 發布協議 196
6.5 並發編程的智能指針 198
6.5.1 發布指針 198
6.5.2 原子共享指針 201
6.6 小結 204
6.7 思考題 204
第7章 並發數據結構 205
7.1 技術要求 205
7.2 關於線程安全數據結構 205
7.2.1 最好的線程安全性 206
7.2.2 真正的線程安全性 208
7.3 線程安全棧 208
7.3.1 線程安全的接口設計 209
7.3.2 互斥鎖保護的數據結構的性能 211
7.3.3 不同用途的性能要求 213
7.3.4 有關棧性能的細節討論 217
7.3.5 同步方案的性能估計 220
7.3.6 無鎖棧 223
7.4 線程安全隊列 229
7.4.1 無鎖隊列 230
7.4.2 非順序一致的數據結構 235
7.4.3 並發數據結構的內存管理 238
7.5 線程安全列表 240
7.5.1 列表的挑戰 240
7.5.2 無鎖列表 243
7.6 小結 249
7.7 思考題 249
第8章 C++中的並發 251
8.1 技術要求 251
8.2 C++11中的並發支持 251
8.3 C++17中的並發支持 253
8.4 C++20中的並發支持 256
8.4.1 協程的基礎知識 257
8.4.2 協程C++語法 261
8.4.3 協程示例 262
8.5 小結 268
8.6 思考題 269
第3篇 設計和編寫高性能程序
第9章 高性能C++ 273
9.1 技術要求 273
9.2 關於編程語言的效率 273
9.3 不必要的復制 275
9.3.1 復制和參數傳遞 275
9.3.2 將復製作為一種實現技術 277
9.3.3 復制以存儲數據 278
9.3.4 復制返回值 279
9.3.5 使用指針避免復制 283
9.3.6 避免不必要的復制 284
9.4 低效的內存管理 285
9.4.1 不必要的內存分配 285
9.4.2 並發程序中的內存管理 289
9.4.3 避免內存碎片 290
9.5 條件執行的優化 293
9.6 小結 295
9.7 思考題 296
第10章 C++中的編譯器優化 297
10.1 技術要求 297
10.2 編譯器優化代碼 297
10.2.1 有關編譯器優化的基礎知識 298
10.2.2 函數內聯 300
10.2.3 編譯器真正知道的東西 305
10.2.4 將運行時信息轉換為編譯時信息 311
10.3 小結 314
10.4 思考題 315
第11章 未定義行為和性能 317
11.1 技術要求 317
11.2 關於未定義行為 317
11.3 產生未定義行為的緣由 320
11.4 未定義行為和C++優化 321
11.5 使用未定義行為進行高效設計 330
11.6 小結 333
11.7 思考題 334
第12章 性能設計 335
12.1 技術要求 335
12.2 設計與性能之間的相互作用 335
12.3 著眼於性能的設計 336
12.3.1 最小信息原則 337
12.3.2 最大信息原則 338
12.4 API設計註意事項 344
12.4.1 有關並發的API設計 344
12.4.2 復制和發送數據 349
12.5 優化數據訪問的設計 351
12.6 性能權衡 354
12.6.1 接口設計 354
12.6.2 組件設計 355
12.6.3 錯誤和未定義的行為 356
12.7 做出明智的設計決策 357
12.8 小結 359
12.9 思考題 359
附錄 思考題解答 361
第1章 性能和並發性簡介 361
第2章 性能測量 361
第3章 CPU架構、資源和性能 362
第4章 內存架構和性能 363
第5章 線程、內存和並發 364
第6章 並發和性能 365
第7章 並發數據結構 365
第8章 C++中的並發 366
第9章 高性能C++ 367
第10章 C++中的編譯器優化 368
第11章 未定義行為和性能 369
第12章 性能設計 369