Contagens inesperadas do processador / núcleo para o processador AMD

3

Eu queria determinar se uma máquina tem o hyperthreading ativado ou não. Para determinar isso, usei o conselho que encontrei on-line, que funciona da seguinte maneira:

physical_proc_count = 'grep "physical id" /proc/cpuinfo | sort -u  | wc -l'
logical_proc_count = 'grep "processor" /proc/cpuinfo | wc -l'
core_count = 'grep "core id" /proc/cpuinfo | sort -u | wc -l'

A ideia é que, se o número de processadores lógicos for o dobro do número de núcleos, o hyperthreading será ativado.

Na minha ingenuidade na época, eu estava alheio ao fato de que os processadores da AMD não têm hyperthreading. Eu sabia que eles não têm a tecnologia exata chamada "Hyper-Threading", mas eu acreditei erroneamente que eles tinham um equivalente funcional. Então, eu corri o script em uma máquina com quatro processadores AMD Opteron 6276, e a saída foi:

  • 4 CPUs físicas
  • 64 CPUs lógicas
  • 8 núcleos por CPU física

8 núcleos por CPU física == 32 núcleos. No entanto, existem 64 CPUs lógicas. Por isso concluí que a máquina tinha hyperthreading habilitado. Isso foi ainda agravado pelo fato de que os sinalizadores do processador em / proc / cpuinfo incluem o sinalizador "ht". O que eu aprendi desde então significa "HyperTransport" no caso de chips AMD --- doh!

Um colega de trabalho percebeu o meu erro e entrou em cena informando-me educadamente que os processadores da AMD não têm hyperthreading. Eu ainda não entendo porque eu tenho os números acima que eu fiz.

Verificando as especificações técnicas do processador, há 16 núcleos por CPU física: link

Basicamente, a saída me parece que há hyperthreading. Onde foi que eu errei? Como posso analisar / proc / cpuinfo para obter as contagens verdadeiras para todos os chips AMD e Intel (HT e não-HT)?

    
por CptSupermrkt 30.10.2014 / 20:44

1 resposta

3

A microarquitetura AMD's Bulldozer / Piledriver / Steamroller / Excavator, que é usada na maioria de seus processadores atuais e recentes, incluindo o seu 6276, tem "módulos" que são pares de "núcleos" que compartilham certos componentes. Os módulos estão em algum lugar entre um único núcleo hyperthreaded e um par verdadeiro de núcleos independentes, com desempenho variando entre ser como um núcleo e como dois núcleos dependendo do aplicativo.

A AMD comercializa cada módulo como dois núcleos, chamando o Opteron 6276 como um 16-core. Alguns softwares consideram cada módulo como um único núcleo físico com dois núcleos lógicos, e parece que o Linux está fazendo dessa maneira.

    
por 24.03.2015 / 16:50