使用PCM工具测量英特尔处理器的TLB未命中惩罚



我正在尝试测量X86-64上的TLB(Translation Look-Aside Buffer(未命中惩罚。特别是第二级统一TLB的未命中惩罚,这是TLB步行的成本。

我一直在研究英特尔pcm工具,但还没能弄清楚如何将其用于此目的。以下是我用来通过PCM库获取性能计数器的代码:

#include "cpucounters.h"        // Intell PCM monitoring tool
int main() {
PCM * m = PCM::getInstance();
PCM::ErrorCode returnResult = m->program();
if (returnResult != PCM::Success){
std::cerr << "Intel's PCM couldn't start" << std::endl;
std::cerr << "Error code: " << returnResult << std::endl;
exit(1);
}

SystemCounterState before_sstate = getSystemCounterState();

//  CODE TO MEASURE TLB MISS PENALTY 

SystemCounterState after_sstate = getSystemCounterState();
std::cout << "Instructions per clock:" << getIPC(before_sstate,after_sstate) << std::endl;
std::cout << "Bytes read:" << getBytesReadFromMC(before_sstate,after_sstate) ;
}

有了这个,我就能拿到IPC。但我不知道为了高精度地测量TLB未命中惩罚,测试程序会是什么样子。

任何关于我可以使用哪些其他工具来快速估计的提示都将非常有用。

我在英特尔pcm的官方网站上看到一篇帖子,它说pcm由于其实现机制:而无法添加TLB miss之类的指标

PCM使用一个自由运行的计数器,即计数器在启动时用一组固定的事件编程一次。PCM已经使用了所有可用的核心计数器,在不放弃缓存未命中等其他指标的情况下,我们无法添加任何其他指标,如TLB未命中。

相关内容

  • 没有找到相关文章

最新更新