如何确定硬件线程数量

6

什么是硬件线程?它是否总是等于可用处理器核心数的两倍?如何确定Intel Core2 Duo处理器中的硬件线程数量?它可以通过Java代码来确定吗?


2
硬件线程是一个内核级别的概念,取决于您的操作系统。 - EboMike
3个回答

6

什么是硬件线程。

你告诉我们吧。这并不是一个确定的术语。

它是否总是可用处理器内核数量的两倍?

啊,现在看起来你在谈论超线程,其中 CPU 核心内部的部分冗余被用于“伪造”额外的核心。

如何确定 Intel Core2 Duo 处理器中的硬件线程数?能否通过 Java 代码确定?

你可以尝试在系统属性中查找一些内容,但这不会是标准的(即取决于 JVM 和操作系统)。

个人建议,只需使用合理的默认值(4 或 8 个线程 - 拥有过多的线程比未使用可用内核更好),并使其可配置。


1
我很想知道为什么iJeeves想知道。他可能在考虑远远超出核心CPU问题的问题...? - TheBlastOne
在许多并发相关的论文中都会遇到它。http://www.ibm.com/developerworks/java/library/j-jtp11137.html - softwarematter

3
这并不是说硬件线程数是核心数的两倍——AMD处理器没有任何超线程技术( 但是 ),而且超线程可能会在BIOS中关闭(通常对于尼哈勒姆处理器之前的处理器来说,实际上它并没有带来太多好处)。此外,并没有必要每个核心只有两个硬件线程——Power7系统每个核心有 4个硬件线程
没有操作系统或硬件无关的方法来进行这些检查。我知道的唯一一个相当可移植的库,可以查询这些信息,是hardware locality (hwloc)库。它是一个C库,所以从Java中调用应该很简单。

2

我想你是指CPU数量。您可以通过以下方式获取:

int N_CPUS = Runtime.getRuntime().availableProcessors();

使用此值,您可以确定线程池中应存在多少个线程(如果您计划实现它)。要了解有关线程池大小的更多信息,请参阅Java并发性中的第8.2节。


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