Re: Detecting CPUs and cores
Daniel Dyer wrote:
What's slightly less helpful is that my Windows PC at work returns 2
from availableProcessors() despite the fact that it is single-core,
albeit with Intel's Hyper-Threading.
That's not Window's nor Java's fault. The HT processor is electrically
equivalent to two CPUs to the rest of the system. So are multi-core CPUs.
Here's the $64,000 question - what is the value of knowing the number of
dies on which the cores reside? A "core" /is/ a CPU as far as any
practical use of it goes; same for the two virtual cores seen in a
HyperThreaded processor. You program them in every respect as if they
were completely separate; the fact that they happen to share some real
estate couldn't be less relevant.
A difference that makes no difference is no difference.
Well, yes: But it *does* make a difference. The difference
doesn't arise from the die layouts per se, but from attributes
that tend to go along with them. The cores may share resources
in ways that interfere and make their "computational power" non-
additive. Intel's hyperthreaded chips, for example, share a
single execution unit and a single path to memory; only one "CPU"
at a time can initiate an operation on either resource. Similar
remarks apply to Sun's T1 processor; the thirty-two "strands"
share eight execution units, one on-chip cache, and one floating-
point unit, but multiplex across four memory channels.
The differences make a difference -- but taking proper account
of them is far more involved than simply counting cores or chips.
You need to get into the architecture of what's shared and what
isn't, which components can run in parallel and to what degree,
and so on. This is well outside the scope of what cross-platform
Java is equipped to handle; one would need a lot of supplementary
information to make sense out of whatever number one obtained.