繁体   English   中英

需要帮助了解kcachegrind

[英]Need help understanding kcachegrind

我正在尝试了解kcachegrind,那里似乎没有太多信息,例如,在左侧窗口中,“ Self”是什么,“ incl。”是什么? (请参阅1个核心 )。

我做了一些弱扩展测试,没有任何通信,所以我想这与缓存未命中有关。 但是从我可以看到的情况来看,1个内核和16个内核的数据丢失次数相同,请参阅: 16个内核

我可以看到的1个内核和16个内核之间的唯一区别是,在16个内核上对memcpy的调用明显减少了(我可以解释)。 但是我仍然无法弄清楚为什么在一个内核上执行时间为0.62秒,而在16个内核上执行时间接近1秒。 每个处理器执行相同的工作量。 如果有人可以告诉我在kcachegrind中寻找什么,那真是太棒了,这是我第一次使用kcachegrind和valgrind。

编辑:我的代码以压缩的行格式连接矩阵。 它涉及循环遍历子矩阵的条目,并使用memcpy将值复制到结果矩阵中。 这是代码:-我最多可以发布2个链接...所以我将其发布在评论中。

我只在循环本身上启动了valgrind,循环也是使0.62秒执行时间和1秒执行时间之间产生差异的原因。 花费时间最多的部分是对memcpy的调用(下面的github gist中的第37行),当我注释掉时,我的代码执行时间不到0.2秒,尽管1到16个内核之间仍然有增加(大约增加30%)。

我在由24个内核组成的haswell节点上运行代码(两个Intel®Xeon®Processor E5-2690 v3)

每个核心都有5GB的内存。

那里似乎没有太多信息,例如,在左侧窗口中,“ Self”是什么,“ incl。”是什么?

令人惊讶的是,这是kcachegrind FAQ中第一个经常问到的问题 具体来说,从该链接:

...区分功能本身的成本(“自我成本”)和包括所有被调用功能的成本(“包含成本” [包括])是有意义的

现在,您还没有显示任何代码,也没有给出有关程序功能的提示,但是...

从我所看到的,1核和16核的数据丢失次数相同...

如果您有一定数量的数据需要处理,并且数据从缓存外部开始,则覆盖它的未命中次数相同是合理的。

您也没有提供有关硬件平台的任何线索,所以我不知道您是否在单个套接字上具有16个核心,并具有统一的末级缓存,或者4x4,并且您的末级缓存未命中分区在这些套接字之间,要不然是啥。

但是我仍然无法弄清楚为什么在一个内核上执行时间为0.62秒,而在16个内核上执行时间接近1秒

也许是同步成本。 也许这是在valgrind下运行的产物。 也许是别的东西。 也许没有人能真正在没有任何有关代码的信息的情况下帮助您分析代码。

如果有人可以告诉我在kcachegrind中寻找什么...

您想找到什么? 您的代码在做什么? 当不在valgrind下运行时,那个时差还存在吗? 您正在使用哪些库,什么操作系统以及什么硬件平台?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM