Como posso saber se a máquina meu programa está sendo executado em usos hyperthreading? (C #)

StackOverflow https://stackoverflow.com/questions/543039

  •  23-08-2019
  •  | 
  •  

Pergunta

Eu tenho algum código que precisa saber quantos núcleos real estão disponíveis em minha máquina particular, e se ou não Hyperthreading é habilitado.

Existe uma maneira de fazer isso em C #?

Update: As máquinas são uma mistura de XP e Vista

Update: Acessando 'Win32_Processor.NumberOfCores' ou 'Win32_Processor.NumberOfLogicalProcessors' lança uma exceção (a ManagmentException com a mensagem "Not Found") em uma das máquinas (mas não todos eles)

Foi útil?

Solução

No Vista e superior, você pode usar GetLogicalProcessorInformation via PInvoke para obter o número de unidades de processador lógico.

No Windows XP não há nenhuma maneira via C # para confiantemente diferenciar hyper-threading de outros multi-processador / configurações básicas. A solução WMI que alguém postou classe irá processadores multi-core como hiper-threaded.

Antes Vista o único meio confiável é verificar o CPUID do processador. Para usar isso, você poderia criar uma DLL nativa que pode ser chamado de seu código gerenciado. O código a seguir Intel amostra seria um bom ponto de partida.

Outras dicas

A resposta é simples para a primeira questão, pelo menos:. Environment.ProcessorCount deve retornar o número de núcleos na máquina

Editar : aqui 'sa método não baseado em WMI de verificação para se Hyperthreading é habilitado (não que isso seja qualquer Buscamos necessariamente). Veja também este artigo .

System.Environment.ProcessorCount irá dizer-lhe quantos núcleos existir na máquina o código está sendo executado.

Verifique a propriedade Environment.ProcessorCount, ele irá retornar um inteiro, tanto quanto HyperThreading, eu não tenho certeza.

StackOverflow pergunta 188503 tem a informação que você precisa ...

Citando a resposta superior sobre essa questão:

System.Environment.ProcessorCount

retorna o número de processadores lógicos (veja MSDN )

Para distinguir entre HyperThreaded e núcleos separados, sons como se você precisa de um pouco de WMI.

GetLogicalProcessorInformation é suficiente para o aspecto HT mas infelizmente é disponível apenas no XP SP3, 64bit XP / Vista / Server 2003 (e eu acredito que está é um pouco quebrado pré Vista)

Joe Duffy envolto isso em c #, mas ainda não divulgou a fonte, embora Mark Russinovich lançou a ferramenta (Coreinfo) ele criou com ele, provavelmente você pode descompilar que para ver o código.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top