Доля рынка микроархитектуры x86 / SIMD - PullRequest
0 голосов
/ 29 октября 2018

Где я могу найти данные о «доле рынка» микроархитектур x86?Какой процент пользователей процессоров семейства x86 имеет процессоры, поддерживающие SSE4.2, AVX, AVX2 и т. Д .?

Я распространяю предварительно скомпилированные двоичные файлы для своей программы, и я хотел бы знать, что этолучшая цель оптимизации и какие SIMD-расширения можно разумно использовать без проверок во время выполнения.

Я могу найти общие данные о доле рынка Intel и AMD, но не разбивку поколений процессоров Intel и AMD.В идеале я хотел бы разбить данные также по ОС и странам, но даже общая глобальная статистика микроархитектур была бы лучше, чем ничего.

Ответы [ 2 ]

0 голосов
/ 30 октября 2018

Простой способ решить эту проблему (выступая в качестве программиста для игр) - просто скомпилировать двоичные файлы для каждого уровня ЦП, который вы хотите поддерживать (например, SSE2, SSE4, AVX2).«Исполняемый файл» для игры - это просто проверка cpuid, которая затем запускает правильный exe в зависимости от того, какой процессор обнаружен.

0 голосов
/ 29 октября 2018

Все, что новее, чем SSE2 (базовый уровень для x86-64) без проверок во время выполнения, рискованно, если нет резервирования или обнаружения во время установки.

AVX и BMI1 / 2, к сожалению, очень далеки от базовых, потому что Intelвсе еще продает чипы Celeron / Pentium с отключенным декодированием префикса VEX (предположительно, чтобы использовать кремний с дефектами в 256-битных исполнительных блоках), но SSE4.2 становится ближе, и возможен SSSE3.См. Самый последний процессор без поддержки инструкций SSSE3? и Mac OSX minumum с поддержкой sse версии

Все ли 64-битные архитектуры Intel поддерживают SSSE3 / SSE4.Инструкции 1 / SSE4.2? имеет ссылку на Обследование оборудования Valve для клиентов Steam (в настоящее время SSE3 отображается как ~ 100% установленной базы, но SSSE3 только на 97%), так что если вы поставляете компьютерную игру, которая должна очень хорошо соотноситься с вашей целевой аудиторией.Тем не менее, некоторые записи выглядят немного странно.Как сообщается, fcmov (условное перемещение без ветвления x87) сделало понижение до 97,5%, но это есть у каждого P6-совместимого процессора.Вы не найдете процессор с SSE2, но без FCMOV.Возможно, новые версии Steam не тестируют его.А, может быть, старые версии Steam не тестируют CMPXCHG16B?Поэтому возьмите их с собой, но они, вероятно, достаточно разумны для SSE2 / 3 / SSSE3 / SSE4.x и AVX.

Для серверного оборудования вы можете легко установить SSE4.Минимум 2Atom / Silvermont поддерживают его, как и архитектуры AMD и VIA с низким энергопотреблением, поэтому энергоэффективные серверы могут работать на нем.Старые традиционные центральные процессоры, как правило, не слишком часто используются серверами за пределами личного домашнего сервера, потому что они часто работают медленнее, чем более дешевая современная машина с кулером.

(Silvermont вряд ли будет поддерживатьAVX скоро, еще меньше AVX2 или FMA.)


У вас нет , чтобы ограничиться одним двоичным файлом. Вы могли бы даже позволить людям выбиратькогда они загружаются, или ваш установщик может выбрать во время установки.

Или у вас может быть оболочка во время выполнения, которая выбирает исполняемые и динамические библиотеки, так что вы эффективно получаете диспетчерскую диспетчеризацию, все еще имея возможность компилировать с gcc -O3 -march=haswell или что угодно, чтобы компилятор мог использовать новые наборы команд повсеместно (особенно полезно для BMI1 / BMI2 для эффективных сдвигов с переменным числом операций за один раз).

Другим вариантом являются трюки с динамическим компоновщиком, либо надля всей библиотеки или для каждой функции, которую использует glibc для разрешения memcpy в __memset_avx2_unaligned_erms. отчет о перфекте показывает, что эта функция "__memset_avx2_unaligned_erms" содержит служебные данные.Означает ли это, что память не выровнена?

Все это (кроме трюков динамического компоновщика для каждой функции) проще, чем информирование вашего кода о расширениях набора команд во время выполнения, и приводит к нулевым издержкам производительности.(Если вы не поместите материал в динамическую библиотеку, если у вас не было бы другого, поэтому он не может быть встроенным.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...