如何在OSX中测量L1、L2、L3缓存的命中与未命中

6
我有一个C++程序,想通过检查CPU缓存的命中和未命中次数来量化它的性能。
最好的方法是什么?
我尝试使用Intel's Performance Counter Monitor,但它使用了一个被禁用在Yosemite上的无符号内核扩展。我可以禁用检查以不加载无符号kexts,但我不想走这条路。
还有其他我不知道的可能方式吗?

似乎有一个适用于OSX的Cachegrind版本可用。它可以测量缓存未命中和分支预测失败。 - user4842163
2个回答

4

您可以使用OS X启用未签名的内核扩展(之后需要重新启动):

sudo nvram boot-args=kext-dev-mode=1

这将在您的机器上启用开发者模式,只要它通常支持Mac OS X 10.10(Yosemite),您就可以长时间运行Intel Performance Counter Monitor。
测试完成后不要忘记再次禁用它(否则会存在安全问题):
sudo nvram boot-args=kext-dev-mode=0

据我所知,英特尔的工具要比CacheGrind好得多,因为它使用硬件上的实际计数器而不是在软件中模拟CPU和缓存特性。请注意,文本中保留了HTML标签。

0
你原则上可以申请一个 kext 签名证书,如果你是苹果开发者计划成员,并自己签署 kext。但他们通常不会为内部使用而分发它们,并建议您启用 kext-dev-mode 或禁用 SIP(取决于版本)。另一条好的途径是向英特尔请求提供其 kext 的已签名版本!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接