I don't have a recent AMD CPU to play with, but what I think is behind this is as follows. With Intel, as you move up the range, you move from single simultaneous thread per CPUs core (ie, number of simultaneous threads maxes out at the number of cores) to two simultaneous thread per core CPUs.
Intel calls this hyperthreading.
So, for things like the Celerons and Pentiums, if you have two cores, you have a maximum of two threads that can execute simultaneously. Obviously, you can have more threads than that, but the remaining threads are in stasis until one of the then executing threads is put into stasis and the other gets its day in the sun, and that takes a context switch with all that implies.
With (current??) AMD CPUs, you don't get this 'multi threads per cpu' arrangement at all. You do get what is confusingly a vaguely similar arrangement where there is something called a 'module' which contains two integer CPUs (but only one floating point unit), and that has led the partly-informed to claim that this is the same thing (but it isn't). So, for AMD CPUs, your max number of simultaneous threads is equal to the number of integer CPUs, and there is no 'magic' behind the scenes making one integer CPU look like two to the operating system.
Of course, you could ask why anybody cares about this; after all, isn't total throughput really the only game in town, and if a CPU clocked at some particular clock rate munches through instructions at some particular rate isn't that what is important?
Well, it does have an impact on throughput (Intel's hyperthreading arrangement allows the effect of pipeline stalls to be reduced), so it does, to a limited extent, allow more throughput (but that isn't the same as saying that hyperthreading will always produce more throughput). And, while the hyperthreaded core will look to the OS like two real cores, two real cores would probably have been more effective. And, with all of these arrangements, whether they be multi-core or hyperthreading, they only help if you have enough threads ready and able to be run; if you have enough threads, and all but one are waiting for I/O, say, all you can do with those other threads is wait faster, whether you have lots of cores or hyperthreading to help you do it.
|