首页
学习
活动
专区
工具
TVP
发布

C++ 动态新闻推送

专栏成员
168
文章
47591
阅读量
56
订阅数
分支记录机制(Branch Recording Mechanisms)
现代高性能 CPU 提供分支记录机制,使处理器能够连续记录一组先前执行的分支。但在进入细节之前,你可能会问:为什么我们对分支如此感兴趣? 嗯,因为这是我们如何确定程序控制流的方式。我们基本上忽略基本块(参见 [@sec:BasicBlock])中的其他指令,因为分支总是基本块中的最后一个指令。由于基本块中的所有指令都保证执行一次,因此我们只能关注将“代表”整个基本块的分支。因此,如果我们跟踪每个分支的结果,就可以重建程序的整个逐行执行路径。事实上,这就是英特尔处理器跟踪 (PT) 功能可以做到的,它在附录 D 中讨论。我们将在这里讨论的分支记录机制基于采样而不是跟踪,因此具有不同的用例和功能。
王很水
2024-08-27
1120
自顶向下微架构分析 (TMA) 介绍
自顶向下微架构分析 (TMA) 方法是一种非常强大的技术,用于识别程序中的 CPU 瓶颈。它是一种健壮、正式的方法,即使是经验不足的开发人员也易于使用。该方法最棒的一点是,它不需要开发人员深入了解系统中的微架构和 PMCs,即可高效找到 CPU 瓶颈。
王很水
2024-08-21
1140
现代CPU性能分析与优化-性能分析方法-编译器优化报告​
如今,软件开发在很大程度上依赖编译器进行性能优化。编译器在加速软件方面扮演着关键角色。大多数开发人员将优化代码的工作留给编译器,只有当他们发现编译器无法完成的优化机会时才会干预。可以说,这是一个好的默认策略。但是,当您追求最佳性能时,它就不太管用了。如果编译器没有执行关键优化,例如向量化循环,怎么办?您将如何知道这一点?幸运的是,所有主流编译器都提供优化报告,我们现在将讨论这些报告。
王很水
2024-08-20
700
C++ 中文周刊 2024-08-18 第166期
今天群聊提到了一个场景,unique_ptr传值加move 并不能完美优化掉,看代码
王很水
2024-08-19
1340
现代CPU性能分析与优化-性能分析方法-静态性能分析
如今,我们拥有广泛的静态代码分析工具。对于 C 和 C++ 语言,我们有一些著名的工具,例如 Clang 静态分析器: https://clang-analyzer.llvm.org/、Klocwork: https://www.perforce.com/products/klocwork、Cppcheck: http://cppcheck.sourceforge.net/ 等。它们旨在检查代码的正确性和语义。同样,也有一些工具试图解决代码的性能方面的问题。静态性能分析器不会执行或分析程序,而是模拟代码,就好像它在真实硬件上执行一样。静态预测性能几乎是不可能的,因此这种类型的分析有很多限制。
王很水
2024-08-19
760
现代CPU性能分析与优化-性能分析方法- Roofline 性能模型
Roofline 性能模型是一个以吞吐量为导向的性能模型,在 HPC 领域广泛使用。它于 2009 年在加州大学伯克利分校开发。模型中的“roofline”表示应用程序的性能不能超过机器的能力。程序中的每个函数和每个循环都受到机器的计算或内存容量的限制。这个概念在下图中有所体现。应用程序的性能始终会受到某条“roofline”函数的限制。
王很水
2024-08-19
1250
现代CPU性能分析与优化-性能分析方法-采样
采样是最常用的性能分析方法。人们通常将其与程序中的热点识别联系起来。广义而言之,采样有助于找到代码中对特定性能事件贡献最多的位置。如果我们考虑发现热点,那么这个问题可以重新表述为程序中的哪个地方消耗了最多的 CPU 周期。人们通常将技术上称为采样的操作称为“性能分析”。根据维基百科https://en.wikipedia.org/wiki/Profiling_(computer_programming)1的说法,性能分析是一个更广泛的术语,包括各种收集数据的技术,例如中断、代码检测和 PMC。
王很水
2024-08-19
1180
现代CPU性能分析与优化-性能分析方法-使用标记器 API
在某些情况下,我们可能对分析特定代码区域的性能感兴趣,而不是整个应用程序。例如,当您开发一段新代码并只想关注该代码时,就会遇到这种情况。自然地,您会希望跟踪优化进度并捕获其他性能数据,以帮助您一路前进。大多数性能分析工具都提供特定的 标记器 API,可以让您做到这一点。这里有一些例子:
王很水
2024-08-19
1120
现代CPU性能分析与优化-性能分析方法-工作负载特征化
工作负载特征化是通过定量参数和函数描述工作负载的过程。简单来说,它意味着计算某些性能事件的绝对数量。特征化的目标是定义工作负载的行为并提取其最重要的特征。在高层次上,一个应用程序可以属于以下一种或多种类型:交互式、数据库、实时、基于网络的、大规模并行等。不同的工作负载可以使用不同的指标和参数来解决特定的应用程序领域。
王很水
2024-08-19
1200
现代CPU性能分析与优化-性能分析方法-代码跟踪
跟踪在概念上与插桩化非常相似,但略有不同。代码插桩化假设用户可以编排他们应用程序的代码。另一方面,跟踪依赖于程序的外部依赖项的现有插桩化。例如,strace工具使我们能够跟踪系统调用,并可以被视为对Linux内核的插桩化。英特尔处理器跟踪(见附录D)使您能够记录程序执行的指令,并可以被视为对CPU的插桩化。跟踪可以从事先适当插桩化的组件中获得,并且不受更改的影响。跟踪通常被用作黑匣子方法,其中用户无法修改应用程序的代码,但他们希望了解程序在幕后执行的操作。
王很水
2024-08-19
1160
现代CPU性能分析与优化-性能分析方法-代码插桩
有读者反馈介绍的很不清晰。这里把翻译完整发出来。大家先看个大概,所有翻译都发一遍之后会做总结。预计这个内容起码发一个月吧
王很水
2024-08-08
1390
CPU性能分析与优化(三)
本章讲性能分析中的术语和指标。如果略过本章节,很难看懂linux perf 或者 intel vTune。Linux perf 是一个性能分析器,您可以使用它来查找程序中的热点、收集各种低级 CPU 性能事件、分析调用堆栈以及许多其他事情。为什么暂时没有使用vTune,因为vTune基于GUI,隐藏了复杂性。
王很水
2024-08-07
990
CPU性能分析与优化(二)
大多数现代体系结构可以归类于基于寄存器的loadstore架构,其中操作数明确指定,内存只能通过load/store来访问。除了基本的load store control 标量算术操作(使用整数和浮点型),当前ISA还在增加新的计算模式。vector处理 Intel整了AVX系列,ARM整了SVE,RISC-V整了V extension,matrix/tensor Intel还整了AMX。通常使用这些高级指令,软件的速度会有数量级的提升。
王很水
2024-08-06
1100
CPU性能分析与优化(一)
近50年来,处理器的发展趋势如下,单核性能趋,频率,功耗趋于平稳,核数,晶体管数量在增加。
王很水
2024-08-06
750
C++ 中文周刊 2024-07-29 第165期
https://lemire.me/blog/2024/07/26/safer-code-in-c-with-lifetime-bounds/
王很水
2024-07-30
850
C++ 中文周刊 2024-07-21 第164期
七月邮件列表 https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/#mailing2024-07
王很水
2024-07-30
900
C++ 中文周刊 2024-07-06 第163期
https://mpusz.github.io/mp-units/latest/blog/2024/07/02/report-from-the-st-louis-2024-iso-c-committee-meeting/
王很水
2024-07-30
980
C++ 中文周刊 2024-06-30 第162期
编译器信息最新动态推荐关注hellogcc公众号 本周更新 2024-06-26 第260期
王很水
2024-07-30
600
popcnt也能向量化?
popcnt指令本身也支持sse向量化了,但如果序列非常大 popcnt只能处理8B,怎么办
王很水
2024-07-30
780
C++ 中文周刊 2024-06-17 第160期
编译器信息最新动态推荐关注hellogcc公众号 本周更新 2024-06-12 第258期
王很水
2024-07-30
670
点击加载更多
社区活动
【纪录片】中国数据库前世今生
穿越半个世纪,探寻中国数据库50年的发展历程
Python精品学习库
代码在线跑,知识轻松学
博客搬家 | 分享价值百万资源包
自行/邀约他人一键搬运博客,速成社区影响力并领取好礼
技术创作特训营·精选知识专栏
往期视频·千货材料·成员作品 最新动态
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档