在最近的Linux分布式共享内存系统上运行的多线程应用程序中,是否有一种简便的方法来计算每个线程对远程(非本地)NUMA内存节点的请求数?
我正在考虑使用PAPI来计算互连通信量。这是要走的路吗?
在我的应用程序中,线程在整个生命周期中都绑定(bind)到特定的内核或处理器。应用程序启动时,将按页面分配内存,并以循环方式在所有可用的NUMA内存节点之间分配内存。
谢谢您的回答。
最佳答案
如果您有权访问VTune,则通过硬件计数器OFFCORE_RESPONSE.ANY_DATA.OTHER_LOCAL_DRAM_0可以对本地和远程NUMA节点的访问进行计数,而对于本地NUMA节点的快速访问,则通过OFFCORE_RESPONSE.ANY_DATA.REMOTE_DRAM_0进行计数,从而可以降低远程NUMA节点的访问速度。
计数器在VTune中的显示方式:
计数器在两种情况下的外观:
NUMA不满意代码:驻留在NUMA节点1上的核心0(NUMA节点0)递增50 MB:
NUMA快乐代码:驻留在NUMA节点0上的核心0(NUMA节点0)增加50 MB: