• 【全新正版】 C++高性能编程
21年品牌 40万+商家 超1.5亿件商品

【全新正版】 C++高性能编程

全新正版图书,支持七天退换,可开具电子发票。

72.81 5.2折 139 全新

库存50件

上海黄浦
认证卖家担保交易快速发货售后保障

作者[美]费多尔·G.皮克斯 著 刘鹏 译

出版社清华大学出版社

ISBN9787302620693

出版时间2021-01

装帧平装

开本32开

定价139元

货号31629020

上书时间2024-04-12

轩天书店

已实名 已认证 进店 收藏店铺

   商品详情   

品相描述:全新
商品描述
目录
第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.1C++计时器25

 2.3.2高分辨率计时器26

 2.4性能分析31

 2.4.1perf性能分析器32

 2.4.2使用perf进行详细性能分析34

 2.4.3GooglePerformance性能分析器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.3GoogleBenchmark51

 2.5.4微基准测试是谎言54

 2.6小结58

 2.7思考题59

 第3章CPU架构、资源和性能61

 3.1技术要求61

 3.2CPU和性能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影响性能的不止CPU100

 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关于Spectre127

 4.6.2Spectre攻击示例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.3C++中的内存顺序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.2C++11中的并发支持251

 8.3C++17中的并发支持253

 8.4C++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.4API设计注意事项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

内容摘要
本书详细阐述了与C++高性能编程相关的基本解决方案,主要包括性能和并发性简介,性能测量,CPU架构、资源和性能,内存架构和性能,线程、内存和并发,并发和性能,并发数据结构,C++中的并发,高性能C++,C++中的编译器优化,未定义行为和性能,性能设计等内容。此外,本书还提供了相应的示例、代码,以帮助读者进一步理解相关方案的实现过程。本书适合作为高等院校计算机及相关专业的教材和教学参考书,也可作为相关开发人员的自学用书和参考手册。

主编推荐
 《C 高能编程》适用于从事能关键项目开发并希望学习不同技术以提高代码能的经验丰富的开发人员和程序员。计算机建模、算法交易、游戏、生物信息学、基于物理的模拟、计算机辅助设计、计算基因组学或计算流体动力学等领域的程序员都可以从本书中学习到各种技术,并将之应用到自己的工作领域。 

精彩内容
 高能编程艺术再次受到重视。多年以前,程序员必须对每一比特数据的情况都了如指掌(这里说的“一比特”有时是它字面上的意思,因为一比特的数据有可能控制前面板上的开关)。现在,计算机有足够的能力来处理日常任务。当然有一些领域永远没有足够的计算能力。但是,大多数程序员都可以避免编写低效的代码。这并不是一件坏事,因为程序员可以不受能限制,专注于以其他方式改进代码。 本书首先解释为什么越来越多的程序员不得不再次关注能和效率。这为整本书定下基调,因为它定义了我们将在后续章节中使用的方法:关于能的知识终必须来自测量,并且每个与能相关的意见都必须有数据支持。 高能编程有5个组成部分,它们也是共同决定程序能的5个元素。 第1个元素是计算硬件,它也是我们需要深入探索的底层基础。本书从单个组件(处理器和内存)到多处理器计算系统进行了比较的讨论,详细阐释了内存模型、数据共享的成本,甚无锁编程等。 第2个元素是使用编程语言。正是基于这一点,本书更加特定于C (其他语言有不同的低效率特征)。 第3个元素是编译器。本书讨论了与编译器相关的提高程序能的技巧。 第4个元素是设计。也可以说,它其实应该是排在位的元素:如果设计没有将能作为其明确目标之一,那么在后期添加良好的能几乎是不可能的。当然,本书将能设计安排在后,因为这是一个概念,它需要以我们之前讨论的所有知识为基础。 高能编程的第5个元素是程序员,程序员的知识和技能将决定终结果。 为了帮助读者顺利学习,本含许多示例,可用于读者的实战探索和自学。高能编程是一项艺术,对于艺术的追求永无止境。因此,本书将是读者探寻高能编程的起 点,而不是终点。 本书读者 本书适用于从事能关键项目开发并希望学习不同技术以提高代码能的经验丰富的开发人员和程序员。计算机建模、算法交易、游戏、生物信息学、基于物理的模拟、计算机辅助设计、计算基因组学或计算流体动力学等领域的程序员都可以从本书中学习到各种技术,并将之应用到自己的工作领域。 虽然本书使用的是C 语言,但书中展示的概念可以很容易地转移或应用到其他编译语言,如C、C#、Java、Rust和Go等。 内容介绍 本书分为3篇,共12章,具体介绍如下。 第1篇“能基础”括第1~5章。 第1章“能和并发简介”,详细阐释了我们要关心程序能的原因,是为什么会出现能低下的现象,讨论了有关程序能的指标,因为无论执行快慢,了解影响能的不同因素以及程序特定行为的原因都很重要。 第2章“能测量”,其内容与测量有关。能通常是不直观的,所有涉及效率的决策,从设计选择到优化,都应以可靠数据为指导。本章描述了不同类型的能测量,解释了它们的不同之处以及何时使用它们,并介绍了如何在不同情况下正确测量能。 第3章“CPU架构、资源和能”,研究了重要的硬件资源以及如何有效地使用它们以实现佳能。本章着重介绍了CPU资源能、使用它们的佳方法、未充分利用CPU资源的常见原因以及如何解决这些问题。 第4章“内存架构和能”,阐释了现代内存架构及其固有的弱点,以及对抗或少隐藏这些弱点的方法。对于许多程序来说,能取决于程序员是否利用了旨在提高内存能的硬件特,本章介绍了这样做的必需技能。 第5章“线程、内存和并发”,继续研究了内存系统及其对能的影响,但本章将研究扩展到多核系统和多线程程序领域。原本很容易成为能瓶颈的内存,在加入并发机制时,问题会更大。虽然硬件强加的基本限制无法克服,但大多数程序的能甚还没有接近这些限制,因此,熟练的程序员仍有很大的空间来提高代码的效率。本章为读者提供了与此相关的必要知识和工具。 第2篇“并发的应用”括第6~8章。 第6章“并发和能”,介绍了如何为线程程序开发高能并发算法和数据结构。一方面,要充分利用并发,必须对问题和解决方案策略有一个高层次的看法,例如,数据组织方式、工作划分以及解决方案的选择等都会对程序的能产生重大影响。另一方面,还要看到,能受到缓存中数据排列等低级因素的影响很大,即使是好的设计,也可能被糟糕的实现所破坏。 第7章“并发数据结构”,解释了并发程序中数据结构的质,以及当数据结构在多线程上下文中使用时,诸如“栈”和“队列”之类的数据结构还意味着什么。 第8章“C 中的并发”,描述了在C 17和C 20标准中添加的并发编程特。虽然现在谈论使用这能以获得佳能的佳实践还为时过早,但我们可以描述它们的作用以及编译器支持的当前状态。 第3篇“设计和编写高能程序”括第9~12章。 第9章“高能C ”,开始将讨论从硬件资源的佳使用转移到特定编程语言的佳应用。虽然此前我们所学的一切都可以直接应用到任何语言的任何程序中,但本章的是讨论C 的特。读者将了解C 语言的哪些特可能会导致能问题以及如何避免这些问题。 第10章“C 中的编译器优化”,讨论了编译器优化以及程序员如何帮助编译器生成更的代码。 第11章“未定义行为和能”,本章有两个,一方面,解释了程序员在试图从他们的代码中榨取大能时经常忽略的未定义行为的危险;另一方面,解释了如何利用未定义行为来提高能以及如何正确和说明此类情况的来说,与通常的“任何事情都可能发生”相比,本章提供了一种比较常见但更相关的方式来理解未定义行为的问题。 第12章“能设计”,回顾了本书中介绍过的所有与能相关的因素和特,并探讨了我们获得的知识和理解如何影响我们在开发新软件系统或重新设计软件架构时做出的决策。 充分利用本书 除了与C 效率相关的章节,本书不依赖任何深奥的C 知识。本书所有示例均使用C 语言,但有关硬件能、数据结构和能设计的内容则适用于任何编程语言。要学习这些示例,读者少需要具备C 的中级知识。 本书涉及的软硬件和操作系统需求如表P-1所示。 表P-1 本书涉及的软硬件和操作系统需求 本书涉及的软硬件 操作系统需求 C 编译器(GCC、Clang、Visual Studio等) Windows、macOS或Linux 能分析器(VTune、Perf、GoogleProf等) Benchmark Library(Google Benchmark) 本书每章都提到了编译和执行示例所需的附加软件(如果需要)。在大多数情况下,任何现代C 编译器都可以与本书示例一起使用,但第8章“C 中的并发”除外,因为该章需要本才能完成关于协程的部分。 建议读者从本书的GitHub存储库访问代码(下文提供了链接)。这样做有助于避免与和粘贴代码相关的任何潜在错误。 下载示例代码文件 本书随附的代码可以在GitHub上找到,其网址如下: sgithub.com/PacktPublishing/The-Art-of-Writing-Efficient-Programs 如果代码有更新,也将在GitHub存储库中更新。 下载彩色图像 本书提供了一个PDF文件,其含本书中使用的屏幕截图/图表的彩色图像。可通过以下地址下载。 sstatic.packt-cdn.com/downloads/9781800208117_ColorImages.pdf 本书约定 本书中使用了许多文本约定。 (1)文本中的代码字、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟URL、用户输入和Twitter句柄等示例如下。 我们还将演示另一个能分析器的使用,即Google能工具集(GperfTools)中的CPU能分析器。该工具集的网址如下: sgithub.com/gperftools/gperftools (2)有关代码块的设置如下。 std::vector v; … 添加数据到v … std::for_each(v.begin(), v.end(),[](double& x){ x; }); (3)任何命令行输入或输出都采用如下所示的粗体代码形式。 Main thread: 140003570591552 Coroutine started on thread: 140003570591552 Main thread done: 140003570591552 Coroutine resumed on thread: 140003570587392 Coroutine done on thread: 140003570587392 (4)术语或重要单词采用中英文对照形式,在括号内保留其英文原文,示例如下。 如果处理器有空闲的计算单元,那么为什么不能同时执行另一个线程来提率呢?这是对称多线程(symmetric multi-threading,SMT)背后的想法,它也称为超线程(hyper- threading)。 (5)对于界面词汇或专有名词将保留英文原文,在括号内添加其中文译名,示例 如下。 在图2.8中,测量了CPU的cycles(周期)和instructions(指令),以及branches(分支)、branch-misses(分支未命中)、cache-references(缓存引用)和cache-misses(缓存未命中)。下一章将详细介绍这些器及其监视的事件。 (6)本书还使用了以下两个图标。 表示警告或重要的注意事项。 表示提示或小技巧。

—  没有更多了  —

以下为对购买帮助不大的评价

此功能需要访问孔网APP才能使用
暂时不用
打开孔网APP