À l'origine, Intel voulait que les implémenteurs de BIOS énumèrent d'abord tous les processeurs physiques avant les processeurs logiques (HT). La raison en était que si un système d'exploitation prenait en charge moins de processeurs que ceux disponibles dans le système, il verrait d'abord les cœurs physiques avant de voir les cœurs logiques. Ce n'est plus un problème aujourd'hui, mais à l'époque où il était possible d'acheter un Pentium 4 double cœur avec HT, de le mettre dans un système Windows 2000 Pro et de ne voir que 2 CPU quoi qu'il arrive, c'était un vrai souci. Je doute que la mise en œuvre s'en écarte. Donc, dans votre cas, il est plus probable que les CPU 0-3 soient les cœurs physiques et que les CPU 4-7 soient les cœurs HT.
Si vous avez des problèmes avec votre propre logiciel multithread qui ne s'équilibre pas bien à cause de la HT, alors vous voudrez probablement limiter votre nombre de threads aux seuls cœurs physiques, ou travailler sur vos algorithmes/structures de données pour qu'ils soient plus favorables à la HT. GetLogicalProcessorInformation est l'appel API que vous devez consulter pour déterminer le nombre de noyaux physiques et logiques. Cette page a un exemple de code pour déterminer le nombre de CPUs physiques.
Rendre votre code plus convivial est une toute autre affaire et ne convient pas vraiment à SuperUser. :-)