使用Uncore Events 在Sandy Bridge处理器上测量内存访问带宽



1.  什么是Uncore 事件?




VTune(TM)Amplifier XE 工具利用CPU上的Performance Monitor Unit (PMU) 上的性能事件计数器来测定影响程序性能的事件,从而定位到产生问题的代码,继而做相应的改善。在多核的CPU架构上,除了以前的PMU上的Events,还有一些监控内核间交互,内核和系统交互的事件(非CPU事件),称之为Uncore event。需要注意的是:你可以在系统平台上收集Uncore Event 的数据 – 但是你不能定位这些数据到具体的进程、线程、模块、函数及源代码,也即数据为进程运行过程中统计数据。为排除来自其他应用程序的干扰,尽可能关闭无关的后台程序。




2.  Intel® Sandy Bridge 处理器上的 Uncore 事件




那么在新一代的SandyBridge处理器上有什么样的Uncore 事件呢?

首先,我们来看有哪些与内核无关的事件,如图:



主要有三种:共享的L3缓存;负责内核间交互的QPI;负责各个核内存的控制IMC

现在的VTune™ Amplifier XE 2011 Update 5 支持所有OFFCORE events, 可用命令显示

amplxe-runsa -event-list | grep OFFCORE

主要是对L3缓存的分析,进而得到访问主存的频度,也即内存带宽。

通过事件,

OFFCORE_RESPONSE.ANY_REQUEST.LLC_MISS_LOCAL.DRAM_0

OFFCORE_RESPONSE.ANY_REQUEST.LLC_MISS_LOCAL.DRAM_1

MEM_LOAD_UOPS_MISC_RETIRED.LLC_MISS_PS (非Uncore event, Cross-snoop misses in one core)




3.  针对Intel® Sandy Bridge processors,怎么使用预定义的分析类型




一般来说,针对Sandy Bridge处理器, VTune™ Amplifier XE提供预订有关SNB的分析类型。
[peter@snb01 config]$ amplxe-cl -collect-list | grep snb

snb_access-contention           Intel® Microarchitecture Code Name Sandy Bridge - Access Contention

snb_bandwidth                   Intel® Microarchitecture Code Name Sandy Bridge - Bandwidth

snb_branch-analysis             Intel® Microarchitecture Code Name Sandy Bridge - Branch Analysis

snb_client                      Intel® Microarchitecture Code Name Sandy Bridge - Client Analysis

snb_core-port-saturation        Intel® Microarchitecture Code Name Sandy Bridge - Core Port Saturation

snb_cycles-uops                 Intel® Microarchitecture Code Name Sandy Bridge - Cycles and uOps

snb_general-exploration         Intel® Microarchitecture Code Name Sandy Bridge - General Exploration

snb_loop-analysis               Intel® Microarchitecture Code Name Sandy Bridge - Loop Analysis

snb_memory-access               Intel® Microarchitecture Code Name Sandy Bridge - Memory Access

snb_port-saturation             Intel® Microarchitecture Code Name Sandy Bridge - Port Saturation

所以用户可以快速使用命令行收集数据 (也可以工作在图形界面上收集), 如:

amplxe-cl -collect snb_bandwidth -duraton 10 -- ./matrix

结果可以用amplxe-gui来浏览:





这样可以知道不同时间的内存访问的带宽,还可以选择某一个时间段分析,及深入到源代码行。




4. 怎么使用直接Uncore事件

如果不用预定义的分析类型,直接使用事件来收集性能数据:

amplxe-runsa -duration 10 --event-config="OFFCORE_RESPONSE.ANY_REQUEST.LLC_MISS_LOCAL.DRAM_0,OFFCORE_RESPONSE.ANY_REQUEST.LLC_MISS_LOCAL.DRAM_1,MEM_LOAD_UOPS_MISC_RETIRED.LLC_MISS_PS:,CPU_CLK_UNHALTED.THREAD:,CPU_CLK_UNHALTED.REF_TSC:,INST_RETIRED.ANY:" -- ./matrix

你可以产生数据,但是没有Formula (内部公式) 去计算 Bandwidth, GB/sec

所见的是这些Event count,大约知道何时、什么代码内存访问较多,但没有带宽的量化指标。和以前的方法一致,根据指标找相应的代码。



Tags:
Para obter mais informações sobre otimizações de compiladores, consulte Aviso sobre otimizações.