как узнать семейство архитектуры Intel из командной строки

28

Я получаю доступ к некоторым машинам xeon для проверки производительности. Я хочу выяснить, какую архитектуру они используют, такую ​​как Haswell, Sandybridge, Ivybridge. Есть команда, чтобы узнать это?

любопытный инженер
источник
2
/proc/cpuinfoна самом деле дает название модели, как Intel (R) blah blah blah GHz, вы должны Google это напрямую.
Arthur2e5
Я просил семью архитектуры
любопытный инженер
1
Я не думаю, что об «семействе архитектуры» сообщается, это просто коммерческие названия. Вы /proc/cpuinfoвводите название модели , я думаю, что вам нужно перевести это в соответствующую фамилию.
Жиль "ТАК - перестань быть злым"
@Ijustwanttocode Вы должны использовать какую-то таблицу для поиска этих коммерческих названий.
Arthur2e5 19.09.15

Ответы:

45

Это немного дешевый обходной путь, но вы можете получить эту информацию от gcc! Я объясню: gcc может оптимизировать двоичные файлы для каждого подархива с помощью опции -march. Более того, он может обнаружить вашу и автоматически оптимизировать для вашей машины с помощью -march = native. Предполагая, что вам нужно просто вызвать gcc с помощью march = native и спросить, какие флаги он будет использовать:

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

для меня это дает

-march=                               bdver1

но мой компьютер работает с процессором amd buldozer

Nephanth
источник
Ваше решение отвечает на вопрос. Меня устраивает.
AJN
Это не работает для меня, так как возвращается broadwellвместо kabylake. Вероятно, это связано с тем, что моя версия gcc не различает эти два семейства при генерации сборки.
Tyilo
gcc8 может идентифицировать skylake как таковой, тогда как gcc5 идентифицирует как broadwell, действительно.
Эрик
8

Вы, вероятно, не можете, потому что это маркетинговые названия для коммерческих продаж, а не «технические» названия.

Однако вы можете получить то, что вам нужно, с помощью dmidecode, а затем посетить http://ark.intel.com (для вашего процессора Xeon), чтобы определить коммерческое семейство.

[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

Исходя из этого, я мог бы посетить веб-сайт Intel ark и найти процессор 3770, который мог бы сказать, что у меня есть чип Ivy Bridge.

Джейсон Харрис
источник
1
Чтобы сделать это автоматически с помощью скрипта, я бы использовал dmidecode или / proc / cpuinfo и соединил его с grep или awk или perl и версией для печати xeon cpu в Википедии, которую вы получаете с помощью curl или wget: en.wikipedia.org/ w /…
Эрик
5

Ниже Баш скрипт , который автоматически находит кодовое название архитектуры для процессора с использованием /proc/cpuinfoи https://ark.intel.com/ . Для работы требуется, чтобы у вас был установлен щенок .

Запустив код на моем компьютере, я получаю следующий результат:

$ ./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
источник
Это работает и делает то, что предложил @erik!
Панайотис
5

Эти данные хранятся в PMU_NAME, просто введите:

cat /sys/devices/cpu/caps/pmu_name
haswell
wuseman
источник