CPU性能优化--skylake 微架构事件编码示例

Event 事件 编码 Umask 掩码 事件掩码助记 描述

C0H 00H INST_RETIRED.ANY_P 退休指令数量

C4H 00H BR_INST_RETIRED 退休的分支跳转指令

linux perf提供常用性能计数器的映射,可以通过映射的事件名称来访问,而不是指定Event 和Umask十六进制值。例如,branches只是BR_INST_RETIRED.ALL_BRANCHES的同义词,可以测量相同的东西,可以通过perf list查看可用的映射名称列表。

perf list

然而,linux perf 并没有为每个CPU架构的所有性能计数器提供映射,如果要找的PMC没有映射,则可以使用如下语法来采集它。

perf stat -e cpu

此外,围绕linux perf还有一些封装工具,可以用来处理映射工作,例如oprofile和ocperf.py 下面是用法

ocperf -e uops_retired ./a.exe

性能计数器并不是在每个环境中都可以,因为访问PMC需要root权限,

5.3.3 事件多路复用和缩放

在某些情况下,我们想同事统计许多不同的事件,但是一个计数器一次只能统计一个事件。这就是为什么PMU中有多个计数器,即便如此,固定计数器和可编程技术起的数量也总是不够用的。显然,CPU没有那么多计数器这时多路复用技术可以发挥作用了。

如果事件多余计数器,则分析工具使用时间多路复用技术使每个事件都有机会访问监控硬件。

性能事件1 第一组 PMC1 PMC2 PMC3 PMC$

性能事件2

性能事件3

性能事件4 第二组

性能事件5

性能事件6

使用多路复用技术时一个事件不会一直测量只有一部分能被测量运行结束剖析工具需要根据运动时间启动事件换算原始计数

5.4 采样

采用最常见分析方法a 调试器运行程序 b 10s暂停一次程序 c 记录程序停止位置 每次捕获新样本所分析程序执行都会被中断中断剖析收集程序状态快照快照构成一个样本针对每个样本收集信息可能包括中断执行指令地址寄存器状态调用收集样本数据存储数据文件中这些可以进一步用于显示调用程序最耗时部分统计意义重要代码控制

5.4.1 用户模式采样和基于硬件事件的采样。

用户模式采样基于硬件事件采样EBS用户模式采样是一种纯软件方法代理嵌入被分析应用程序代理应用程序每个线程设置OS计时器计时器计时完成时应用程序接受SIGPROF信号用户模式下只能识别热点EBS可以用于涉及PMC其他分析例如缓存未命中采样TMA

用户模式采样EBS产生更多运行时开销使用10ms 默认采样间隔用户模式采样平均开销约为5%,采样1ms采样间隔EBS平均开销2%. 因为可以更高频率收集样本所以通常EBS更准确

5.4.2 寻找热点

我们可以任何想要查看性能事件进行采样比如想知道程序哪里发生L3缓存未命中最多可以对应事件(MEM_LOAD_RETIRED.L3_MISS)进行采样

准备工作完成后我们开始计数运行基准测试需要配置统计时钟周期PMC计数器每个时钟周期递增一次最终会溢出计数器溢出硬件发起PMI剖析工具配置成捕获PMI 记录计数器溢出CPU执行指令然后计数器重置N并且恢复基准测试执行现在我们会到N使用可以控制获取终端频率

多次重复古城以获取足够样本接下来汇总这些样本可以构成程序中热点位置直方图就像下面Linux Perf record 输出显示那样

linux perf工具收集调用栈三种可能方法

1 指针 perf record--call-graph fp 需要二进制文件编译构建时带上 --fnoomit-frame-pointer参数因为指针RBP 无须弹出所有参数就能获取调用所以以前用于调试

### GPU架构及其在计算中的应用 #### 图形处理单元(GPU)概述 图形处理单元是一种专门设计用于高效执行并行计算任务的硬件设备。它通过大量的小型核心来实现高吞吐量的数据处理能力,特别适合于矩阵运算、图像渲染以及机器学习等领域的工作负载[^1]。 #### Intel HD 530 (Gen9) 架构特点 Intel HD Graphics 530 属于第六代 Skylake 微架构的一部分,基于 Gen9 图形引擎构建。其主要特性包括支持 DirectX 12 和 OpenGL 4.4 API,提供增强的媒体编码/解码功能,并且集成了多达 24 个执行单元(EU),这些都极大地提升了固定函数管线效率与可编程着色器性能表现。 ```python # Python 示例展示如何查询 NVIDIA 或 AMD 显卡信息 import GPUtil gpus = GPUtil.getGPUs() for gpu in gpus: print(f'Name : {gpu.name}') print(f'Memory Total: {gpu.memoryTotal}MB') ``` #### 计算机体系结构中 GPU 的角色 现代计算机系统通常采用异构计算模型,在这种模式下 CPU 负责串行指令流管理而 GPU 则专注于大规模数据并行操作。例如,在内存内计算场景里,为了达到最佳效果需考虑特定算法适配度问题;同样地当涉及到 ARM 平台 big-little 设计时也需要权衡大小核间切换策略从而优化整体功耗水平及响应速度等方面因素[^2]。 对于具体查看某些 Linux 系统上关于处理器或者存储子系统的低级属性可以借助工具如 `dmidecode` 来完成相应诊断工作[^3]: ```bash sudo apt-get install dmidecode sudo dmidecode -t processor sudo dmidecode -t memory ``` 以上命令可以帮助管理员获取有关服务器内部组件更详细的规格参数描述。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值