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. 譯 劉鵬

  • C++ 高性能編程-preview-1
  • C++ 高性能編程-preview-2
  • C++ 高性能編程-preview-3
C++ 高性能編程-preview-1

買這商品的人也買了...

商品描述

《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