问题标签 [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.
sse - 英特尔 C 编译器 (icc) 中的错误自动向量化
我需要用 SSE 对程序中的一些巨大循环进行矢量化。为了节省时间,我决定让ICC来处理。为此,我准备好数据,考虑到对齐,并使用编译器指令 #pragma simd
, #pragma aligned
, #pragma ivdep
. 当使用几个-vec-report
选项编译时,编译器告诉我循环是矢量化的。快速查看编译器生成的程序集似乎证实了这一点,因为您可以找到大量适用于压缩单精度操作数(串行代码处理程序浮点操作数中的所有操作)的矢量指令。
问题是,当我使用 PAPI 进行硬件计数器时,我得到的 FP 操作的数量(PAPI_FP_INS
和PAPI_FP_OPS
)在自动矢量化代码和原始代码中几乎相同,而在自动矢量化代码中预期会明显减少. 更重要的是,手动矢量化是一个相关问题的简化问题,在这种情况下,我得到的 FP 操作减少了 3 倍。
有没有人经历过类似的事情?
c - 对所有核心使用 perfsuite
我正在尝试使用 perfsuite(内部使用 papi)来测量函数周围的一些性能计数器。此函数为每个内核生成一个线程。问题是,如果我在函数调用之前启动计数器并在调用之后停止它们,我会得到这些计数器的错误值。但如果该函数不创建任何线程,它会获得正确的值。
我知道 psrun 可以获得可执行文件的所有内核的计数器。但我希望函数调用具有相同的功能,而不是可执行文件。
我在 Debian 上使用来自 C 的 perfsuite 1.1.1 和 papi 4.4.0。
c - x86 上的简单 PAPI 分析中出现意外大量 TLB 未命中
我正在使用 PAPI 高级 API 来检查一个简单程序中的 TLB 未命中,该程序循环遍历一个数组,但看到的数字比预期的要大。
在其他简单的测试用例中,结果似乎相当合理,这让我认为结果是真实的,额外的未命中是由于硬件预取或类似原因造成的。
谁能解释这些数字或指出我在使用 PAPI 时的一些错误?
我希望打印的数字在 32 的区域内,或者至少是某个倍数,但始终得到 93 或更高的结果(并非始终高于 96,即不是每次迭代都只有 3 次未命中)。我正在运行固定到一个核心,上面没有其他任何东西(除了定时器中断)。
我在 Nehalem 上并且不使用大页面,因此 DTLB 中有 64 个条目(L2 中有 512 个)。
papi - 常春藤桥上的事件与 PAPI
我正在PAPI
做一些测量和特征工作,我有几个关于常春藤桥事件的问题。
根据 SDM 表 19-5(第三代 Intel® Core™ i7、i5、i3 处理器的处理器内核中的非架构性能事件),Ivy Bridge 具有名为
CYCLE_ACTIVITY.CYCLES_LDM_PENDING
和CYCLE_ACTIVITY.CYCLES_L1D_PENDING
的计数器CYCLE_ACTIVITY.CYCLES_L2_PENDING
。但是,当我尝试 时papi_native_avail
,我不仅得到了这三个,而且还得到STALLS
了每个对应的事件,CYCLE_ACTIVITY.STALLS_LDM_PENDING
包括CYCLE_ACTIVITY.STALLS_L1D_PENDING
和CYCLE_ACTIVITY.STALLS_L2_PENDING
。我也有不同的数字CYCLES
和STALLS
事件。所以问题是它们之间有什么区别。这个问题与上述问题有关,因为在 Intel 64 and IA-32 Architectures Optimization Reference Manual 附录 B.3.2.3 中提到的所有事件都是
STALLS
事件,实际上在 SDM 中甚至都没有提到,而不是CYCLES
事件。问题是它们应该是什么,CYCLES
或者STALLS
?我应该使用哪些来进行 B.3.2.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
有人可以帮我解决这个问题吗?
c - PAPI 和本机事件
是否可以找到映射到 PAPI 事件的一组本机事件(CPU 计数器寄存器)?
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 的任何内容。
我需要为此安装一些驱动程序吗?任何帮助都会很棒..
multicore - 使用 PAPI 读取 Intel Core i7 中的性能监控计数器
我想在 Core i7 中读取性能监控计数器 每个事件的输出仅包含 1 个数据,并且没有关于该数据所针对的核心的信息。如何通过 PAPI 分别读取每个内核的事件计数?
太感谢了
fortran - Fortran PAPIF_stop 始终读取 0
我在 fortran 中有一个简单的程序,它使用 PAPI API 来读取性能计数器值。所有 API(PAPIF_start、PAPIF_stop 等)都正常工作(意思是,返回 PAPI_OK)。但是,PAPIF_stop 读取的值始终为 0。我在 BG/Q 上尝试了另一个分析软件以确保这些值不应该为 0。知道为什么会出现这种情况吗?这是我第一次尝试编写 fortran 代码。所以这很可能是一个对我来说并不明显的fortran问题。将不胜感激任何帮助。谢谢!--德
我正在从另一个函数调用这些子例程,如下所示:
我得到的输出是:
c++ - 为什么我在某些计算机上运行 Makefile 而在其他计算机上却没有出现“未定义的引用”错误?
我正在对并行处理进行一些研究,需要使用不同的并行化 API 测试计数器输出。每次我尝试编写代码时,我都会得到undefined reference to 'PAPI_...
.
我正在使用 PAPI 5.1.1 并且已经知道哪些目录libpapi.a
在其中papi.h
。我在另一台 PC 上运行此 Makefile 没有问题,但在我需要的另一台 PC 上,它似乎无法正常工作。这就是我所拥有的
我读过其他关于未定义引用的帖子,但是,我看到的每个人都建议使用-L/usr/local/lib
or /usr/local/lib/libpapi.a
,我已经在这样做了。
有人有其他建议吗?
cuda - 具有 CUDA 功耗的 PAPI
我正在尝试测量 GPU 上的功耗。首先,我想知道我是否可以使用 PAPI 来测量功耗,并且如果可能的话,我想知道如何使用 PAPI 代码编译 CUDA。