- Как проверить, требует ли двоичный файл SSE4 или AVX в Linux
- Как узнать, поддерживает ли Linux-устройство инструкции AVX/AVX2?
- ОТВЕТЫ
- Ответ 1
- Ответ 2
- Ответ 3
- Ответ 4
- Как узнать, поддерживает ли Linux-машина инструкции AVX / AVX2?
- 4 ответа
- Как узнать, поддерживает ли машина Linux инструкции AVX/AVX2?
- 4 ответов
- Как узнать, поддерживает ли Linux-устройство инструкции AVX/AVX2?
Как проверить, требует ли двоичный файл SSE4 или AVX в Linux
В Linux /proc/cpuinfo позволяет просто проверить все флаги процессора, которые есть у машины.
Обычно, если программе требуется расширенный набор инструкций машины, самый простой способ определить это — запустить ее и посмотреть, вызывает ли она SIGILL сигнал.
Но в моем случае все мои процессоры поддерживают как минимум SSE4.1 и AVX.
Итак, есть ли простой способ проверить, есть ли внутри двоичного файла специальные инструкции?
Я выбил программу на Rust, которая пытается это сделать. Я думаю, что это работает, хотя это недокументировано и ужасно хрупко:
Я столкнулся с той же проблемой, когда пытался понять процессы оптимизации GCC и выяснить, какие инструкции использовались или не использовались во время этого процесса. Поскольку я не дружу с огромным количеством кодов операций, я искал способ визуализации конкретных (скажем, SSE3) инструкций в разобранном коде или, по крайней мере, для вывода некоторой минимальной статистики, например, есть ли и сколько этих инструкций есть. в двоичном
Я не нашел никакого существующего решения, но ответ Джонатана Бен-Авраама оказался очень полезным, поскольку он указывает на отличный (и даже частично структурированный) источник кодов операций. Основываясь на этих данных, я написал сценарий Bash, который может визуализировать определенные наборы команд или распечатывать статистику о них, используя grep при выводе из objdump .
Список кодов операций был преобразован в автономный скрипт Bash, который затем включается (с целью лучшей читаемости) в основной файл, который я назвал просто opcode . Так как коды операций в gas.vim ( определения синтаксиса Ширка vim , из ответа Джонатана) систематически (на первый взгляд) группировались в соответствии с различными архитектурами ЦП, я попытался сохранить это разделение и сделать отображение набора архитектур-> инструкций ; Сейчас я не уверен, что это хорошая идея. Отображение не является точным, и мне даже пришлось внести некоторые изменения в оригинале gas.vim группировка. Поскольку связанные с архитектурой наборы инструкций не были моей первоначальной целью, я пытался создавать только наборы инструкций основных архитектур, описанных в Интернете, но не обращаясь к документации производителей. Архитектура AMD мне не кажется надежной (за исключением наборов инструкций, таких как 3DNow! И SSE5). Тем не менее, я решил оставить здесь код для наборов команд различных архитектур, чтобы кто-то еще мог его изучить, исправить / улучшить и дать другим некоторые предварительные результаты.
Начало основного файла с именем opcode :
Пример Opcode_list файла, созданного и измененного с использованием инструкций по opcode состоянию на 27 октября 2014 г., можно найти по адресу http://pastebin.com/yx4rCxqs . Вы можете вставить этот файл прямо на opcode место source Opcode_list строки. Я выпустил этот код, потому что Stack Exchange не позволил бы мне отправить такой большой ответ.
Наконец, остальная часть opcode файла с реальной логикой:
Имейте в виду, что если ваш поисковый запрос слишком велик (например, с набором команд Haswell и -r переключателем — это включает в себя сотни инструкций), вычисления могут продолжаться медленно и занимать много времени на больших входных данных, для которых этот простой сценарий не был предназначен ,
За подробной информацией по использованию обращайтесь
Весь opcode сценарий (с включенным Opcode_list) можно найти по адресу http://pastebin.com/A8bAuHAP .
Не стесняйтесь улучшать инструмент и исправлять любые ошибки, которые я мог сделать. Наконец, я хотел бы поблагодарить Джонатана Бен-Авраама за его прекрасную идею использования gas.vim файла Ширка .
РЕДАКТИРОВАТЬ: теперь скрипт может найти, к какому набору инструкций относится код операции (можно использовать регулярное выражение).
Источник
Как узнать, поддерживает ли Linux-устройство инструкции AVX/AVX2?
Я на машинах SUSE Linux Enterprise 10/11. Я запускаю свои регрессии на ферму машин с процессорами Intel. Некоторые из моих тестов не работают, потому что мои инструменты создаются с использованием библиотеки, которая требует поддержки инструкций AVX/AVX2. Я получаю Illegal exception ошибку Illegal exception .
В Linux есть ли какие-либо команды, которые я могу использовать для определения того, что такое имя процессора/имя семейства?
Я считаю, что AVX и AVX2 теперь доступны от семейств Intel SandyBridge и Haswell, соответственно.
ОТВЕТЫ
Ответ 1
В Linux (или Unix-машинах) информация о вашем процессоре находится в /proc/cpuinfo . Вы можете извлекать информацию оттуда вручную или с помощью команды grep flags/proc/cpuinfo ( grep flags/proc/cpuinfo ).
Также большинство компиляторов автоматически определит __AVX2__ чтобы вы могли это проверить.
Ответ 2
Запустите эту команду:
флаги: FPU VME-де-псевдоэфедрин TSC MSR пае MCE CX8 APIC SEP MTRR PGE MCA CMOV погладить pse36 clflush MMX fxsr ссе sse2 сс Системный вызов пх pdpe1gb rdtscp лм constant_tsc arch_perfmon rep_good nopl eagerfpu ПНИ PCLMULQDQ VMX SSSE3 CX16 PCID sse4_1 sse4_2 x2APIC POPCNT tsc_deadline_timer АЕС XSAVE AVX AVX2 гипервизор lahf_lm arat tsc_adjust xsaveopt
Ответ 3
Вы можете проверить наличие наборов инструкций SIMD и других функций ЦП путем изучения /proc/cpuinfo , например
Ответ 4
Вы также можете запустить lscpu и проверить список инструкций в конце.
Источник
Как узнать, поддерживает ли Linux-машина инструкции AVX / AVX2?
Я использую машины SUSE Linux Enterprise 10/11. Я запускаю свои регрессии на ферму машин с процессорами Intel. Некоторые из моих тестов терпят неудачу, потому что мои инструменты построены с использованием библиотеки, которая требует поддержки инструкций AVX / AVX2. Я получаю ошибку Illegal exception .
Есть ли какие-либо команды в Linux, которые я могу использовать, чтобы определить код / название семейства ЦП?
Я считаю, что AVX и AVX2 будут доступны и в дальнейшем из семейств Intel SandyBridge и Haswell соответственно.
4 ответа
На машинах linux (или unix) информация о вашем процессоре находится в /proc/cpuinfo . Вы можете извлечь информацию оттуда вручную или с помощью команды grep ( grep flags /proc/cpuinfo ).
Также большинство компиляторов автоматически определяют __AVX2__ , так что вы тоже можете проверить это.
Запустите эту команду:
флаги: FPU VME-де-псевдоэфедрин TSC MSR пае MCE CX8 APIC Сентябрь MTRR PGE MCA CMOV погладить pse36 clflush MMX fxsr ссе sse2 сс Системный вызов пй pdpe1gb rdtscp лй constant_tsc arch_perfmon rep_good nopl eagerfpu ПНИ PCLMULQDQ VMX SSSE3 CX16 PCID sse4_1 sse4_2 x2APIC POPCNT tsc_deadline_timer АЕС XSAVE AVX AVX2 гипервизор lahf_lm arat tsc_adjust xsaveopt
Вы также можете запустить lscpu и проверить список инструкций в конце.
Вы можете проверить доступность наборов инструкций SIMD и других функций ЦП, изучив /proc/cpuinfo , например
Источник
Как узнать, поддерживает ли машина Linux инструкции AVX/AVX2?
Я на машинах SUSE Linux Enterprise 10/11. Я запускаю свои регрессии на ферму машин с процессорами Intel. Некоторые из моих тестов терпят неудачу, потому что мои инструменты построены с использованием библиотеки, которая требует поддержки инструкций AVX/AVX2. Я получаю Illegal exception ошибка.
в Linux есть ли какие-либо команды, которые я могу использовать для определения кода/фамилии процессора?
Я считаю, что AVX и AVX2 доступны дальше от семейства Intel SandyBridge и Haswell соответственно.
4 ответов
на linux (или unix-машинах) информация о вашем процессоре находится в /proc/cpuinfo . Вы можете извлечь информацию оттуда вручную или с помощью команды grep ( grep flags /proc/cpuinfo ).
также большинство компиляторов автоматически определит __AVX2__ Так что вы можете проверить это.
выполните эту команду:
флаги : ППУ вме де ЧОП ВСК ПМа Пае МРЗ cx8 апик сентября mtrr ЭПГ СМА cmov ПЭТ pse36 clflush ММХ fxsr SSE инструкций SSE2 набор системных вызовов СС ПХ pdpe1gb rdtscp лм constant_tsc arch_perfmon rep_good НОПЛ eagerfpu пни pclmulqdq файл VMX ssse3 cx16 псмд sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer ня команду xsave, Аух поддержкой AVX2 гипервизора lahf_lm Арат tsc_adjust xsaveopt
вы можете проверить наличие наборов инструкций SIMD и других функций процессора, изучив /proc/cpuinfo , например,
вы также можете запустить lscpu и проверьте список инструкций в конце.
Источник
Как узнать, поддерживает ли Linux-устройство инструкции AVX/AVX2?
Я на машинах SUSE Linux Enterprise 10/11. Я запускаю свои регрессии на ферму машин с процессорами Intel. Некоторые из моих тестов не работают, потому что мои инструменты создаются с использованием библиотеки, которая требует поддержки инструкций AVX/AVX2. Я получаю Illegal exception ошибку Illegal exception .
В Linux есть ли какие-либо команды, которые я могу использовать для определения того, что такое имя процессора/имя семейства?
Я считаю, что AVX и AVX2 теперь доступны от семейств Intel SandyBridge и Haswell, соответственно.
В Linux (или Unix-машинах) информация о вашем процессоре находится в /proc/cpuinfo . Вы можете извлекать информацию оттуда вручную или с помощью команды grep flags/proc/cpuinfo ( grep flags/proc/cpuinfo ).
Также большинство компиляторов автоматически определит __AVX2__ чтобы вы могли это проверить.
Запустите эту команду:
флаги: FPU VME-де-псевдоэфедрин TSC MSR пае MCE CX8 APIC SEP MTRR PGE MCA CMOV погладить pse36 clflush MMX fxsr ссе sse2 сс Системный вызов пх pdpe1gb rdtscp лм constant_tsc arch_perfmon rep_good nopl eagerfpu ПНИ PCLMULQDQ VMX SSSE3 CX16 PCID sse4_1 sse4_2 x2APIC POPCNT tsc_deadline_timer АЕС XSAVE AVX AVX2 гипервизор lahf_lm arat tsc_adjust xsaveopt
Вы можете проверить наличие наборов инструкций SIMD и других функций ЦП путем изучения /proc/cpuinfo , например
Вы также можете запустить lscpu и проверить список инструкций в конце.
Источник