问题标签 [papi]

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.

0 投票
1 回答
281 浏览

sse - 英特尔 C 编译器 (icc) 中的错误自动向量化

我需要用 SSE 对程序中的一些巨大循环进行矢量化。为了节省时间,我决定让ICC来处理。为此,我准备好数据,考虑到对齐,并使用编译器指令 #pragma simd, #pragma aligned, #pragma ivdep. 当使用几个-vec-report选项编译时,编译器告诉我循环是矢量化的。快速查看编译器生成的程序集似乎证实了这一点,因为您可以找到大量适用于压缩单精度操作数(串行代码处理程序浮点操作数中的所有操作)的矢量指令。

问题是,当我使用 PAPI 进行硬件计数器时,我得到的 FP 操作的数量(PAPI_FP_INSPAPI_FP_OPS)在自动矢量化代码和原始代码中几乎相同,而在自动矢量化代码中预期会明显减少. 更重要的是,手动矢量化是一个相关问题的简化问题,在这种情况下,我得到的 FP 操作减少了 3 倍。

有没有人经历过类似的事情?

0 投票
1 回答
135 浏览

c - 对所有核心使用 perfsuite

我正在尝试使用 perfsuite(内部使用 papi)来测量函数周围的一些性能计数器。此函数为每个内核生成一个线程。问题是,如果我在函数调用之前启动计数器并在调用之后停止它们,我会得到这些计数器的错误值。但如果该函数不创建任何线程,它会获得正确的值。

我知道 psrun 可以获得可执行文件的所有内核的计数器。但我希望函数调用具有相同的功能,而不是可执行文件。

我在 Debian 上使用来自 C 的 perfsuite 1.1.1 和 papi 4.4.0。

0 投票
2 回答
615 浏览

c - x86 上的简单 PAPI 分析中出现意外大量 TLB 未命中

我正在使用 PAPI 高级 API 来检查一个简单程序中的 TLB 未命中,该程序循环遍历一个数组,但看到的数字比预期的要大。

在其他简单的测试用例中,结果似乎相当合理,这让我认为结果是真实的,额外的未命中是由于硬件预取或类似原因造成的。

谁能解释这些数字或指出我在使用 PAPI 时的一些错误?

我希望打印的数字在 32 的区域内,或者至少是某个倍数,但始终得到 93 或更高的结果(并非始终高于 96,即不是每次迭代都只有 3 次未命中)。我正在运行固定到一个核心,上面没有其他任何东西(除了定时器中断)。

我在 Nehalem 上并且不使用大页面,因此 DTLB 中有 64 个条目(L2 中有 512 个)。

0 投票
0 回答
524 浏览

papi - 常春藤桥上的事件与 PAPI

我正在PAPI做一些测量和特征工作,我有几个关于常春藤桥事件的问题。

  1. 根据 SDM 表 19-5(第三代 Intel® Core™ i7、i5、i3 处理器的处理器内核中的非架构性能事件),Ivy Bridge 具有名为CYCLE_ACTIVITY.CYCLES_LDM_PENDINGCYCLE_ACTIVITY.CYCLES_L1D_PENDING的计数器CYCLE_ACTIVITY.CYCLES_L2_PENDING。但是,当我尝试 时papi_native_avail,我不仅得到了这三个,而且还得到STALLS了每个对应的事件,CYCLE_ACTIVITY.STALLS_LDM_PENDING包括CYCLE_ACTIVITY.STALLS_L1D_PENDINGCYCLE_ACTIVITY.STALLS_L2_PENDING。我也有不同的数字CYCLESSTALLS事件。所以问题是它们之间有什么区别。

  2. 这个问题与上述问题有关,因为在 Intel 64 and IA-32 Architectures Optimization Reference Manual 附录 B.3.2.3 中提到的所有事件都是STALLS事件,实际上在 SDM 中甚至都没有提到,而不是CYCLES事件。问题是它们应该是什么,CYCLES或者STALLS?我应该使用哪些来进行 B.3.2.3 提到的内存绑定表征?

  3. 上面提到的附录 B.3.2.3 中有一些关于如何计算不同级别的内存子系统的界限的公式。我发现令人困惑的一件事是,当我使用上述 STALLS 事件进行测量时,我得到的数字STALLS_L2_PENDING大于STALLS_L1D_PENDING,而该部分中有一个公式显示:

%L2 Bound = (CYCLE_ACTIVITY.STALLS_L1D_PENDING - CYCLE_ACTIVITY.STALLS_L2_PENDING) / CLOCKS

这是否意味着我的测量是错误的?如果不是,那么我怎么能计算%L2 Bound,因为它会高于零。

源代码在以下链接: https ://github.com/yqzhang/SMTM/blob/master/native/native.c

有人可以帮我解决这个问题吗?

0 投票
3 回答
1993 浏览

c - PAPI 和本机事件

是否可以找到映射到 PAPI 事件的一组本机事件(CPU 计数器寄存器)?

0 投票
1 回答
1302 浏览

osx-lion - mac 10.8 上的性能 API

有人尝试在 mac os 10.8 上安装 papi(performance API) 5.1.0 版吗?我在 make 命令上遇到以下错误。

INSTALL.txt 在 mac os 上什么也没说。只是说它可以安装没有程序所以我只尝试了提到的标准程序。

在 papi -> platform supported 的主页上,它没有说明有关 mac os 的任何内容。

我需要为此安装一些驱动程序吗?任何帮助都会很棒..

0 投票
1 回答
485 浏览

multicore - 使用 PAPI 读取 Intel Core i7 中的性能监控计数器

我想在 Core i7 中读取性能监控计数器 每个事件的输出仅包含 1 个数据,并且没有关于该数据所针对的核心的信息。如何通过 PAPI 分别读取每个内核的事件计数?

太感谢了

0 投票
1 回答
245 浏览

fortran - Fortran PAPIF_stop 始终读取 0

我在 fortran 中有一个简单的程序,它使用 PAPI API 来读取性能计数器值。所有 API(PAPIF_start、PAPIF_stop 等)都正常工作(意思是,返回 PAPI_OK)。但是,PAPIF_stop 读取的值始终为 0。我在 BG/Q 上尝试了另一个分析软件以确保这些值不应该为 0。知道为什么会出现这种情况吗?这是我第一次尝试编写 fortran 代码。所以这很可能是一个对我来说并不明显的fortran问题。将不胜感激任何帮助。谢谢!--德

我正在从另一个函数调用这些子例程,如下所示:

我得到的输出是:

0 投票
1 回答
1502 浏览

c++ - 为什么我在某些计算机上运行 Makefile 而在其他计算机上却没有出现“未定义的引用”错误?

我正在对并行处理进行一些研究,需要使用不同的并行化 API 测试计数器输出。每次我尝试编写代码时,我都会得到undefined reference to 'PAPI_....

我正在使用 PAPI 5.1.1 并且已经知道哪些目录libpapi.a在其中papi.h。我在另一台 PC 上运行此 Makefile 没有问题,但在我需要的另一台 PC 上,它似乎无法正常工作。这就是我所拥有的

我读过其他关于未定义引用的帖子,但是,我看到的每个人都建议使用-L/usr/local/libor /usr/local/lib/libpapi.a,我已经在这样做了。

有人有其他建议吗?

0 投票
1 回答
591 浏览

cuda - 具有 CUDA 功耗的 PAPI

我正在尝试测量 GPU 上的功耗。首先,我想知道我是否可以使用 PAPI 来测量功耗,并且如果可能的话,我想知道如何使用 PAPI 代码编译 CUDA。