A Intel originalmente queria que os implementadores de BIOS enumerassem todas as CPUs físicas antes das CPUs lógicas (HT). A razão para isso era que, se um sistema operacional suportasse menos CPUs do que as disponíveis no sistema, ele veria os núcleos físicos antes de ver os núcleos lógicos. Isso não é um problema hoje em dia, mas quando era possível comprar um Pentium 4 w / HT de dois núcleos, colocá-lo em um sistema Windows 2000 Pro e ver apenas 2 CPUs, não importava o quê, era uma preocupação real. Eu duvido que a implementação se desviasse disso. Portanto, no seu caso, é mais provável que os processadores 0-3 sejam os núcleos físicos e os processadores 4-7 sejam os núcleos HT.
Se você está tendo problemas com seu próprio software multi-threaded não balanceando bem por causa do HT, então provavelmente você vai querer limitar sua contagem de threads somente aos núcleos físicos, ou trabalhar em seus algoritmos / estruturas de dados para serem mais HT-friendly. GetLogicalProcessorInformation é a chamada da API que você precisa examinar para determinar a contagem de núcleos físico versus lógico. Esta página tem código de amostra para determinar o número de CPUs Físicas.
Tornar o seu código mais compatível com HT é, bem, uma bola totalmente diferente de cera e não é realmente adequada para o SuperUser. : -)