我正在寻找在多核处理器上执行微基准测试的方法。如何在多核处理器上进行基准测试
语境:
大约在介绍的同时桌面处理器乱序执行的是做出业绩很难预测,他们,也许不是巧合,还推出了特殊的指令来得到非常精确的计时。这些指令的示例是x86上的rdtsc
和PowerPC上的rftb
。这些指令给出了比系统调用所允许的更精确的时序,允许程序员将他们的心微观化,无论好坏。
在具有多个内核的更现代的处理器上,其中一些内核会休眠,但内核之间的计数器不会同步。我们被告知,rdtsc
已不再适用于基准测试,但是当我们解释替代解决方案时,我一定会打瞌睡。
问:
一些系统可以保存和恢复的性能计数器,并提供一个API调用来读取正确的总和。如果您知道此通话适用于任何操作系统,请在回答中告诉我们。
某些系统可能允许关闭核心,只剩下一个正在运行。我知道Mac OS X Leopard会在开发人员工具中安装正确的首选项窗格时执行此操作。你认为这使得rdtsc
再次安全使用?
更多背景:
请假设我知道努力做一个微基准当我在做什么。如果你认为,如果一个优化的涨势无法通过定时整个应用程序进行测量,这是不值得的优化,我同意你的看法,但
我不能一次全部应用程序,直到替代数据结构完成,这将需要很长时间。事实上,如果微基准不是很有希望的话,我现在可以决定放弃实施;
我需要一个数字来提供出版物的截止日期,我无法控制。
谢谢,我应该可以从http://developer.apple.com/mac/library/qa/qa2004/qa1398.html中找到它,尽管我对'man mach_absolute_time'的结果非常失望。 – 2010-05-08 16:09:09
@帕斯卡尔:这将是一个很好的错误报告。我发布了一些示例代码,以避免在该笔记中投射指针。 – 2010-05-08 16:11:05
请注意,此解决方案将受到探测效应的影响,远远超过将进程固定到单个内核并使用两次rtdsc(在x86上,不能用于PowerPC)。编译器可能不会内联你的函数,他们会占用更多的指令缓存,并且你正在做乘法和除法,我相信他们可以根据它们的操作数完成多长时间。 'rtdsc'只是读取一个寄存器,因此便宜得多,并且会减少您的结果。 – 2012-08-22 01:31:13