17得票2回答
当代码向量化时,缓存未命中次数增加

我使用SSE 4.2和AVX 2对两个向量进行了点积向量化,如下所示。代码是在使用了-O2优化标志的GCC 4.8.4下编译的。正如预期的那样,性能得到了提高(AVX 2比SSE 4.2更快),但当我使用PAPI对代码进行剖析时,我发现总的缓存未命中次数(主要是L1和L2)大大增加: 未向量...

15得票1回答
为什么Perf和Papi在L3缓存引用和缺失方面给出不同的值?

我正在开展一个项目,需要实现一个已被理论证明与缓存友好的算法。简单来说,如果输入为N,而B是每次出现缓存未命中时在缓存和RAM之间传输的元素数,则该算法将需要O(N/B)次访问RAM。 我想证明这确实是实际情况下的行为。为了更好地了解如何测量各种与缓存相关的硬件计数器,我决定使用不同的工具。其...

13得票1回答
papi_avail: 没有可用的事件

我想进入PAPI。我在Debian GNU/Linux上安装了版本5.3.2.0。papi_avail只告诉我没有可用的硬件事件: $ papi_avail Available events and hardware information. -----------------------...

9得票1回答
如何使用PAPI来衡量并行程序的整体性能表现

我在思考如何最好地测量并行程序的性能(以flops为单位)。我了解了papi_flops,但这似乎仅适用于串行程序。但我不知道如何测量并行程序的整体性能。 我想要衡量blas/lapack函数的性能,例如我的例子gemm。但我也想要衡量其他函数的性能,特别是那些操作数量未知的函数。(对于ge...

8得票2回答
使用rdmsr/rdpmc提高分支预测的准确性

我正在尝试理解CPU中分支预测单元的工作原理。 我已经使用了papi和linux的perf-events,但它们都不能给出准确的结果(对于我的情况)。 这是我的代码: void func(int* arr, int sequence_len){ for(int i = 0; i &l...

7得票1回答
为什么_mm_mfence()会触发ALL_LOADS性能事件的计数?

我正在测试一些内在操作行为。当我注意到_mm_mfence()从用户空间发出load指令时,我感到惊讶,但它不计入L1数据缓存 - miss、hit或填充缓冲器的hit。我使用papi的本地事件,如MEM_INST_RETIRED和MEM_LOAD_RETIRED来读取性能计数器。这段代码: ...

7得票1回答
查找CPU有多少个硬件性能计数器

在运行Linux的Intel或AMD x86-64系统上,我应该如何找到CPU拥有的硬件性能计数器数量? 我想使用Linux的perf工具在执行某些应用程序时收集硬件性能计数器数据。 Perf wiki的教程中提到,如果我在CPU中指定的硬件事件数大于性能计数器数量(使用perf stat或...