Java 不同多核处理器测试速度的标准化

Java 不同多核处理器测试速度的标准化,java,c,time,runtime,multicore,Java,C,Time,Runtime,Multicore,我想计算一些简单c程序在不同多核处理器上的运行时间。但正如我们所知,随着技术的进步,新处理器正在采用更多的方法来提高计算速度,如时钟速度等。我如何规范这些速度变化(以滤除处理器中除多核以外的其他先进方法的影响)因为我只想根据处理器的内核数量得到结果。决定一组已知的参考硬件,运行某种可重复的参考基准,并获得一个好的已知值进行比较。然后,您可以针对其他系统运行此基准测试,以了解如何缩放从目标基准测试运行中获得的值 参考基准越接近实际应用程序,缩放结果就越准确。您可以将应用程序的一次确定性运行(单代码

我想计算一些简单c程序在不同多核处理器上的运行时间。但正如我们所知,随着技术的进步,新处理器正在采用更多的方法来提高计算速度,如时钟速度等。我如何规范这些速度变化(以滤除处理器中除多核以外的其他先进方法的影响)因为我只想根据处理器的内核数量得到结果。

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


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

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


大多数BIOS环境还能够关闭超读功能;根据您的基准,HT可能会加快或减慢您的测试;控制HT将是理想的选择。

如果我没有弄错的话,您正在尝试找到一种测量方法,可以将扩展内核数量的效果与单处理器改进的进展分离开来。恐怕这不容易做到。例如,如果将一个多核系统与该系统的一个单核系统进行比较,则存在非线性相关性。因为存在共享资源,例如内存总线。如果您只使用多核系统的一个核,它可以使用整个内存带宽,而它必须在多核情况下共享。类似的论点适用于许多共享资源:因为存在缓存、总线、io能力、ALU等。

您的问题在于根据任何给定时间的活动内核数量自动调整内核频率。例如,AMD phenom 6核芯片的工作频率为3.4GHz(或类似频率),如果您的应用程序创建的线程数超过3个,则会降至2.8Ghz(或类似频率)。另一方面,英特尔使用一系列启发式方法来确定任何给定时间的正确频率。
但是,您始终可以通过转到BIOS关闭这些设置,然后结果将具有可比性,只是根据时钟频率的不同而有所不同。通常,人们测量千兆次浮点运算以获得可比较的结果。

这是不合逻辑的,您希望测试不同CPU之间的并发性能,但只改变可用内核的数量。只需获得一个16核主机并禁用核心或使用进程关联在1-16个活动核心之间进行测试。如果您试图完全针对不同的系统,而不是同一系统上不同数量的核心,则此答案更有意义。由于我将在我的dep服务器上执行dis,因此不建议重新启动。谷歌还给了我一个dis博客,上面提到了dat,你可以用这个命令做同样的事情$sudo sh-c“echo'n'>/sys/devices/system/cpu/cpu1/online”,这个方法有什么问题吗?看起来可以
drivers/base/cpu.c
函数
store_online()
显示为读取
1
0
,因此如果
'n'
不起作用,请尝试一下。