2011-03-23 34 views
0

我想计算一些简单的c程序在不同的多核处理器上的运行时间。但正如我们所知道的,随着技术的进步,新的处理器正在采用更多的方法来加快计算速度,如时钟速度等。我如何规范这种速度变化(以滤除除多核之外的其他先进方法的效果),因为我只想以处理器核心数为基础得出结果。在不同的多核处理器上测试速度的规范化

+0

这是不合逻辑的,您想要测试不同CPU的并发性能,但只能改变可用内核的数量。只需获取16核主机并禁用核心,或使用进程关联性在1-16个活动核心之间进行测试。 – 2011-03-23 10:58:28

回答

1

决定一套已知的参考硬件,运行某种可重复的参考基准,并获得一个可比较的已知值。然后,您可以针对其他系统运行此基准,以了解如何扩展您从目标基准测试中获得的值。

您的参考基准越接近您的实际应用,缩放结果越准确。您可以将您的应用程序的单个确定性运行(单个代码路径,可能是多次执行的平均值)用作参考基准。

+0

如果您试图完全针对不同的系统,而不是简单地在同一个系统上使用不同数量的内核,则这个答案更有意义。 – 2011-03-23 11:00:34

1

在Linux下,可以使用内核命令行参数maxcpus=N进行引导,以将机器限制为只有N个CPU。有关详细信息,请参阅内核源代码中的Documentation/kernel-parameters.txt

大多数BIOS环境还具有关闭超线程的功能;取决于你的基准,HT可能会加快或减慢你的测试;控制HT将是理想的。

+0

因为我将在我的dep服务器上执行dis,所以不建议重新启动。谷歌也给了我博客http://pundiramit.blogspot.com/2010/07/how-to-disable-cpu-cores-in-multicore.html它提到的数据,你可以使用这个命令做同样的事情 $ sudo sh -c“echo'n'>/sys/devices/system/cpu/cpu1/online” 在这个方法中是否存在任何问题? – Manish 2011-03-23 12:37:06

+0

看起来它会起作用; 'driver'/base/cpu.c'函数'store_online()'似乎读取了'1'和'0',所以如果''n''不起作用,请试一试。 – sarnold 2011-03-23 19:45:45

0

如果我正确地理解了您,您正在尝试找到一种测量方法,可以从单处理器改进的进步中分离出缩放核心数的效果。恐怕这不太可能。例如。如果您将多核系统与该系统的单个核心进行比较,则可以获得非线性关联。由于有共享资源,例如内存总线。如果您只使用一个多核系统核心,则它可以使用完整的内存带宽,同时它必须共享多核心案例。类似的参数适用于许多共享资源:因为有高速缓存,总线,IO功能,ALU等。

0

您的问题是根据任何给定时间的活动核心数量自动调整核心频率。例如,AMD Phenom 6内核芯片工作频率为3.4GHz(或者有点类似),如果你的应用程序创建了3个以上的线程,则会降至2.8Ghz(或类似)。另一方面,英特尔使用一堆启发式技术来确定任何给定时间的正确频率。 但是,您可以随时通过BIOS关闭这些设置,然后根据时钟频率将结果进行比较。通常,人们测量千兆差距以获得可比较的结果。