我们正在对现有的Java程序进行基准测试。它们是线程化应用程序,旨在从多核CPU中获益。我们想衡量内核数量对运行速度的影响,但我们不愿意(也无法)更改这些应用程序的代码。
当然,我们可以在不同的机器上测试软件,但这既昂贵又复杂。我们宁愿有一个软件解决方案。
注意:您可以假设测试平台是Windows、Linux或Mac。理想情况下,我们希望能够在这两个平台上运行测试。
它被称为设置CPU亲和性,它是针对进程的操作系统设置,而不是Java特有的。
在Linux上:http://www.cyberciti.biz/tips/setting-processor-affinity-certain-task-or-process.html
在Windows上:http://www.addictivetips.com/windows-tips/how-to-set-processor-affinity-to-an-application-in-windows/
在Mac上,您似乎无法设置:https://superuser.com/questions/149312/how-to-set-processor-affinity-on-os-x
将问题颠倒过来;与其弄清楚如何限制应用程序在m核心计算机上仅使用n内核,不如弄清楚如何确保应用程序只有n核可用。您可以编写一个非常简单的程序,通过执行类似while (true);
的操作来吃掉一个核心,并启动该程序的m-n实例,以最高优先级运行,从而确保您的代码只有n核心可用。
或者,如果您的BIOS或操作系统允许禁用CPU内核,也可以。我知道Mac OS X上的CHUD工具曾经这样做过,但自从G5时代以来,我就没有接触过这些工具,所以这可能不再有效了。