This is a question submitted to Intel Software Network Support, followed by a response supplied by the author of the article.
Q. This question is in response to Eric Palmer's article entitled API Detects IA-32 and x64 Platform CPU Characteristics.
What's the best way to differentiate between Pentium 4 with Hyper-Threading and Pentium D? I need to detect HT specifically, because the software I'm distributing freezes on some machines with hyper-threading (and actually can't be killed once that happens), so that I can advise users to either disable HT in BIOS, or to upgrade their BIOS (both of which seem to resolve the problem). My code used to rely on htResultCode being htAvailable, but this wrongly detects Pentium D as having hyper-threading. Also, what do the Core Duo and Core2 Duo CPUs report in the htResultCode?
A. With multi-core processors, the bits that showed HT have essentially been repurposed to mean HT or multi-core. To find HT, look for (logicalPerCoreAvailable > 1). Since Core 2 does not have HT, it will have logicalPerCoreAvailable == 1 (but htResultCode will be htAvailable).