Cómo averiguar la familia de arquitectura Intel desde la línea de comandos

28

Tengo acceso a algunas máquinas xeon para verificar el rendimiento. Quiero saber qué arquitectura están utilizando, como Haswell, Sandybridge, Ivybridge. ¿Hay un comando para descubrir esto?

un ingeniero curioso
fuente
2
/proc/cpuinfoen realidad da el nombre del modelo como Intel (R) blah blah blah GHz, deberías buscarlo en Google directamente.
Arthur2e5
Estaba preguntando por la familia de la arquitectura
un ingeniero curioso
1
No creo que se informe de la "familia de la arquitectura", son solo nombres comerciales. Obtienes el nombre del modelo /proc/cpuinfo, creo que depende de ti traducir eso al apellido correspondiente.
Gilles 'SO- deja de ser malvado'
@Ijustwanttocode Debe usar algún tipo de tabla para buscar esos nombres comerciales.
Arthur2e5

Respuestas:

45

Es una solución un poco barata, ¡pero podría obtener esa información de gcc! Explicaré: gcc puede optimizar los binarios para cada subarchivo con la opción -march. Además, puede detectar el tuyo y optimizarlo automáticamente para tu máquina con -march = native Suponiendo que así sea, solo tienes que llamar a gcc con march = native y preguntar qué banderas usaría: en resumen

gcc -march=native -Q --help=target|grep march

para mi da

-march=                               bdver1

pero mi PC funciona con un procesador AMD Buldozer

Nephanth
fuente
Su solución responde a la pregunta. Esto funciona para mi.
AJN
Esto no funciona para mí, ya que regresa en broadwelllugar de kabylake. Esto probablemente se deba a que mi versión de gcc no distingue a esas dos familias al generar el ensamblaje.
Tyilo
gcc8 puede identificar skylake como tal, mientras que gcc5 se identifica como broadwell, de hecho.
Eric
8

Probablemente no pueda porque esos son nombres de marketing para venta comercial, no el nombre "técnico".

Sin embargo, puede obtener lo que necesita de dmidecode y luego visitar http://ark.intel.com (para su procesador Xeon) para determinar la familia comercial.

[root@mediasrv ~]# dmidecode|grep -i intel
        Socket Designation: Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz
        Manufacturer: Intel
        Version: Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz

A partir de ese resultado, podría visitar el sitio web de arca de Intel y buscar la CPU 3770, lo que me diría que tengo un chip Ivy Bridge.

Jason Harris
fuente
1
Para hacerlo automatizado con un script, usaría dmidecode o / proc / cpuinfo y lo combinaría con grep o awk o perl y la versión imprimible de la lista de xeon cpu en wikipedia que obtienes con curl o wget: en.wikipedia.org/ w / ...
erik
5

A continuación se muestra un script bash que encuentra automáticamente el nombre del código de arquitectura para su CPU usando /proc/cpuinfoy https://ark.intel.com/ . Para trabajar requiere que tengas cachorro instalado.

Al ejecutar el código en mi computadora obtengo el siguiente resultado:

$ ./intel_codename
Processor name: i7-7700HQ
Kaby Lake

#!/bin/bash

set -euo pipefail

if [[ $# == 0 ]]; then
    modelname=$(cat /proc/cpuinfo | grep 'model name' | head -1)
    if ! grep Intel <<<"$modelname" > /dev/null; then
        echo "You don't seem to have an Intel processor" >&2
        exit 1
    fi

    name=$(sed 's/.*\s\(\S*\) CPU.*/\1/' <<<"$modelname")
    echo "Processor name: $name" >&2
else
    name=$1
fi

links=($(curl --silent "https://ark.intel.com/search?q=$name" | pup '.result-title a attr{href}'))

results=${#links[@]}
if [[ $results == 0 ]]; then
    echo "No results found" >&2
    exit 1
fi

link=${links[0]}
if [[ $results != 1 ]]; then
    echo "Warning: $results results found" >&2
    echo "Using: $link" >&2
fi

url="https://ark.intel.com$link"
codename=$(curl --silent "$url" | pup '.CodeNameText .value text{}' | xargs | sed 's/Products formerly //')

echo "$codename"
Tyilo
fuente
¡Funciona y hace lo que @erik sugirió!
Panayotis
5

Estos datos se almacenan en PMU_NAME, solo escriba:

cat /sys/devices/cpu/caps/pmu_name
haswell
wuseman
fuente