Instruções de montagem para descobrir quantos threads estão ativados em um sistema com vários núcleos

Estou trabalhando em um sistema básico no qual preciso determinar algum tempo após a inicialização quantos núcleos e threads estão ativados, para que eu possa enviar eventos SIPI. Também quero que cada thread saiba qual é o thread.

or exemplo, em uma configuração de núcleo único com HT ativado, temos (por exemplo, Intel Atom):

thread 0 --> core 0 thread 0
thread 1 --> core 0 thread 1

Enquanto em uma configuração de núcleo duplo sem HT, temos (por exemplo, Core 2 Duo):

thread 0 --> core 0 thread 0
thread 1 --> core 1 thread 0

Qual é a melhor maneira de determinar isso?

Editar Descobri como cada thread pode encontrar qual é o thread. Ainda não encontrei como determinar quantos núcleos existe

questionAnswers(1)

yourAnswerToTheQuestion