问题标签 [intel-pmu]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
performance - Intel Core Duo 上的硬件性能计数器
我已经读到有 AMD 处理器可以让您测量缓存命中和未命中的数量。我想知道英特尔酷睿双核机器上是否也有这样的功能,或者他们是否还不支持。
linux - 在用户空间中读取 Intel Xeon 的性能计数器
我想在用户空间中使用 shell 脚本读取英特尔至强的性能计数器。Oprofile 无法满足我的要求,因为它太死板了。我正在使用 FC13。谢谢
c - 英特尔性能监视器——任何监控每个进程的方法?
我将如何使用英特尔性能计数器监视器监视特定进程的执行(即,其分支,来自分支跟踪存储),同时过滤掉其他进程的信息?
x86 - 使用 Intel Last Branch Record 的开销是多少?
Last Branch Record 是指寄存器对 (MSR) 的集合,这些寄存器对 (MSR) 存储与最近执行的分支相关的源地址和目标地址。http://css.csail.mit.edu/6.858/2012/readings/ia32/ia32-3b.pdf文档有更多信息,以防您感兴趣。
- a) 有人可以知道 LBR 减慢了常见程序的程序执行速度 - CPU 和 IO 密集型吗?
- b) 当 LBR 跟踪打开时,分支预测是否会关闭?
gpu - 英特尔处理器或 GPU 上的功率计数器
任何人都对英特尔处理器(英特尔性能计数器管理库)或 GPU 上的功率计数器有任何经验,哪种类型的 CPU 和 GPU 支持此类计数器,这些计数器的准确性如何?这样的柜台需要特殊的主板吗?
performance - Haswell memory access
I was experimenting with AVX -AVX2 instruction sets to see the performance of streaming on consecutive arrays. So I have below example, where I do basic memory read and store.
And after compiling with g++-4.9 -ggdb -march=core-avx2 -std=c++11 struct_of_arrays.cpp -O3 -o struct_of_arrays
I see quite good instruction per cycle performance and timings, for benchmark size 4000. However once I increase the benchmark size to 5000, I see instruction per cycle drops significantly and also latency jumps. Now my question is, although I can see that performance degradation seems to be related to L1 cache, I can not explain why this happens so suddenly.
To give more insight, if I run perf with Benchmark size 4000, and 5000
So my question is, why this impact is happening, considering haswell should be capable of delivering 2* 32 bytes to read, and 32 bytes store each cycle?
EDIT 1
I realized with this code gcc smartly eliminates accesses to the myData.a since it is set to 0. To avoid this I did another benchmark which is slightly different, where a is explicitly set.
Second example will have one array being read and other array being written. And this one produces following perf output for different sizes:
Again same pattern is seen as pointed out in the answer, with increasing data set size data does not fit in L1 anymore and L2 becomes bottleneck. What is also interesting is that prefetching does not seem to be helping and L1 misses increases considerably. Although, I would expect to see at least 50 percent hit rate considering each cache line brought into L1 for read will be a hit for the second access (64 byte cache line 32 byte is read with each iteration). However, once dataset is spilled over to L2 it seems L1 hit rate drops to 2%. Considering arrays are not really overlapping with L1 cache size this should not be because of cache conflicts. So this part still does not make sense to me.
performance - 如何重置英特尔的通用性能计数器
我知道我们可以使用wrmsr
和rdmsr
指令来设置性能计数器并读取通用性能计数器寄存器。
但是,我的问题是:
我们是否需要在发布之前重置通用性能计数器寄存器wrmsr
?
换句话说,对于下面的代码,我们需要在下面的代码之前重置性能计数器吗?如果必须,我们如何重置它?
linux - 如何在进程中配置和采样英特尔性能计数器
简而言之,我试图在用户级基准测试过程中实现以下目标(伪代码,假设 x86_64 和 UNIX 系统):
FWIW,我正在考虑使用的性能计数器是CPU_CLK_UNHALTED.THREAD_ALL
,读取独立于时钟频率变化的核心周期数(在较早的问题中,我一直计划为此使用 TSC 寄存器,但唉,这不是这个寄存器措施)。
我最初的意图是使用内联汇编器首先配置一个计数器 using WRMSR
,然后使用RDPMC
inside读取计数器sample_pctr()
。
我遇到了第一个障碍,因为编写 MSR 需要内核权限。看起来您实际上可以从用户空间读取计数器(如果配置正确),但是配置计数器(使用 MSR)的行为需要由内核承担。
有谁知道一种轻量级的方法来要求内核从用户空间配置性能计数器,以便我可以RDPMC
在我的基准测试工具中使用?
我研究过/考虑过的东西:
- Linux 的性能工具。似乎已准备好在流程的整个生命周期内进行采样,而不是在流程中作为特定点(每次迭代之前和之后)进行采样。
- 直接使用 perf 系统调用(即
perf_event_open
)。看起来计数器值只会定期更新(使用采样率)或在计数器超过阈值后更新。在我问的那一刻,我正好需要计数器值。这就是为什么RDPMC
看起来如此吸引人的原因。我想频繁采样本身会扭曲性能计数器读数。 - PAPI建立在 perf 之上,因此可能继承了上述问题。
- 写一个内核模块——太费劲了,太容易出错了。
理想情况下,我想要一个适用于 OpenBSD 和 Linux 的解决方案,但不知何故,我认为这是一项艰巨的任务。也许现在只适用于 Linux。
非常感谢任何帮助。谢谢。
编辑:我刚刚找到了Linux msr 设备节点,这可能就足够了。如果出现更好的答案,我会留下问题。
linux - 我们如何知道 CPU 内置的硬件性能计数器的确切数量?
在我对硬件性能计数器做了几篇阅读之后,我可以声称所有的英特尔处理器都支持硬件性能计数器。因此,为了访问这些额外的硬件寄存器,即硬件性能计数器,我使用了经常用于访问和配置这些计数器的 PAPI 基础设施。
当我使用 papi_avail 实用程序报告有关数字硬件计数器的信息时,看到了意外的值,即相对于图,数字硬件计数器:0。可能吗?
关于我的处理器型号(英特尔酷睿 i7),我认为这是不正确的值。
我非常感谢您能提供的任何帮助。
performance - 我们可以用英特尔的性能计数器衡量成功的存储转发吗?
是否可以使用最新的 Intel x86 芯片上的性能计数器来测量成功的存储转发操作的数量?
我看到了ld_blocks.store_forward
衡量存储转发失败的事件,但我很清楚是否可以衡量成功的案例。