Инструкции mmx sse. Развитие технологии SSE в новых процессорах Intel Prescott

Инструкции mmx sse. Развитие технологии SSE в новых процессорах Intel Prescott

18.05.2019

В современных процессорах инструкции используются для ускорения работы и оптимизации исполняемых алгоритмов.

AMD64 (x86-64)

EM64T (x86-64)

Extended 3DNow!

IA-32 (x86-32)

MIMD

MISD

SIMD

SISD

SSE2

SSE3

SSE4

SSE4.1

SSE4.2

SSE4A

SSSE3

MMX (Multimedia Extensions - мультимедийное расширение) - коммерческое название дополнительного набора инструкций, выполняющих характерные для процессов кодирования/декодирования потоковых аудио/видео данных действия за одну машинную инструкцию. Впервые появился в процессорах Pentium MMX. Разработан в лаборатории Intel в Хайфе, Израиль, в первой половине 1990-х.

SIMD (англ. Single Instruction, Multiple Data) - принцип компьютерных вычислений, позволяющий обеспечить параллелизм на уровне данных.

SSE (англ. Streaming SIMD Extensions, потоковое SIMD-расширение процессора) - это SIMD (англ. Single Instruction, Multiple Data, Одна инструкция - множество данных) набор инструкций, разработанный Intel, и впервые представленный в процессорах серии Pentium III как ответ на аналогичный набор инструкций 3DNow! от AMD, который был представлен годом раньше. Первоначально названием этих инструкций было KNI что расшифровывалось как Katmai New Instructions (Katmai - название первой версии ядра процессора Pentium III).

Технология SSE позволяла преодолеть 2 основных проблемы MMX - при использовании MMX невозможно было одновременно использовать инструкции сопроцессора, так как его регистры использовались для MMX и работы с вещественными числами.

SSE включает в архитектуру процессора восемь 128-битных регистров (xmm0 до xmm7), каждый из которых трактуется как 4 последовательных значения с плавающей точкой одинарной точности. SSE включает в себя набор инструкций, который производит операции со скалярными и упакованными типами данных.

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

Реализация блоков SIMD осуществляется распараллеливанием вычислительного процесса между данными. То есть когда через один блок проходит поочерёдно множество потоков данных.

SSE2 (англ. Streaming SIMD Extensions 2, потоковое SIMD-расширение процессора) - это SIMD (англ. Single Instruction, Multiple Data, Одна инструкция - множество данных) набор инструкций, разработанный Intel, и впервые представленный в процессорах серии Pentium 4.

SSE2 использует восемь 128-битных регистров (xmm0 до xmm7), включённых в архитектуру x86 с вводом расширения SSE, каждый из которых трактуется как 2 последовательных значения с плавающей точкой двойной точности. SSE2 включает в себя набор инструкций, который производит операции со скалярными и упакованными типами данных. Также SSE2 содержит инструкции для потоковой обработки целочисленных данных в тех же 128битных xmm регистрах, что делает это расширение более предпочтительным для целочисленных вычислений, нежели использование набора инструкций MMX, появившегося гораздо раньше.

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

SSE3 (PNI - Prescott New Instruction) - третья версия SIMD-расширения Intel, потомок SSE, SSE2 и x87. Впервые представлено 2 февраля 2004 года в ядре Prescott процессора Pentium 4. В 2005 AMD предложила свою реализацию SSE3 для процессоров Athlon 64 (ядра Venice и San Diego).

Набор SSE3 содержит 13 инструкций:

FISTTP (x87)

MOVSLDUP (SSE)

MOVSHDUP (SSE)

MOVDDUP (SSE2)

LDDQU (SSE/SSE2)

ADDSUBPD (SSE)

ADDSUBPD (SSE2)

HADDPS (SSE)

HSUBPS (SSE)

HADDPD (SSE2)

HSUBPD (SSE2)

- MONITOR (нет аналога в SSE3 для AMD)

- MWAIT (нет аналога в SSE3 для AMD).

SSE4 это набор команд Intel Core микроархитектуры, впервые реализованный в процессорах серии Penryn (не следует путать с SSE4A от AMD). Он был анонсирован 27 Сентября 2006, однако детальное описание стало доступно только весной 2007.

SSE4 состоит из 54 инструкций, 47 из них относят к SSE4.1 (они есть только в процессорах Penryn). Ожидается, что полный набор команд (SSE4.1 и SSE4.2, то есть 47 + оставшиеся 7 команд) будет доступен в процессорах Nehalem. Ни одна из SSE4 инструкций не работает с 64-х битными mmx регистрами (только с 128-ми битными xmm0-15).

Компилятор языка Си от Intel начиная с версии 10 генерирует инструкции SSE4 при задании опции -QxS.

В SSE4 добавлены инструкции, ускоряющие компенсацию движения в видеокодеках, быстрое чтение из WC памяти, множество инструкций для упрощения векторизации программ компиляторами. Впервые в SSE4 регистр xmm0 стал использоваться как неявный аргумент для некоторых инструкций.

SSE4.1 это расширенный набор команд SSE4 от Intel.

Ниже приведены инструкции, входящие в SSE4.1:

- Ускорение видео (3 инструкции)

- Векторные примитивы (5 инструкций)

- Вставки/извлечения (4 инструкции)

- Скалярное умножение векторов (2 инструкции)

- Смешивания (4 инструкции)

Проверки бит

- Округления (2 инструкции)

Чтение WC памяти

SSE4.2 состоит из 7 инструкций.

- Обработка строк (4 инструкции)

Подсчет CRC32

- Подсчет популяции единичных бит

- Векторные примитивы

SSE4A это расширенный набор команд SSE4 от AMD, разработанный скорее не как дополнение, а как альтернатива инструкциям SSE4 от Intel.

SSSE3 (Supplemental Streaming SIMD Extension 3) - это обозначение данное Intel 4-му расширению системы команд. Предыдущее имело обозначение SSE3 и Intel добавил ещё один символ "S" вместо того, чтобы увеличить номер расширения, возможно потому, что они посчитали SSSE3 простым дополнением к SSE3. Часто, до того как стало использоваться официальное обозначение SSSE3, эти новые команды назывались SSE4. Также их называли кодовыми именами Tejas New Instructions (TNI) и Merom New Instructions (MNI) по названию процессоров, где впервые Intel намеревалась поддержать эти новые команды. Появившись в Intel Core Microarchitecture, SSSE3 доступно в сериях процессоров Xeon 5100 (Server и Workstation версии), а также в процессорах Intel Core 2 (Notebook и Desktop версии).

Новыми в SSSE3, по сравнению с SSE3, являются 16 уникальных команд, работающих с упакованными целыми. Каждая из них может работать как с 64-х битными (MMX), так и с 128-ми битными (XMM) регистрами, поэтому Intel в своих материалах ссылается на 32 новые команды.

Вот некоторые из них:

- Работа со знаком (2 инструкции)

Сдвиги

- Перемешивание байт

- Умножения (2 инструкции)

- Горизонтальные сложения/вычитания целых (4 инструкции)

3DNow! - дополнительное расширение MMX для процессоров AMD, начиная с AMD K6 3D. Причиной создания 3DNow! послужило стремление завоевать превосходство над процессорами производства компании Intel в области обработки мультимедийных данных. Хотя это расширение является разработкой AMD, его также интегрировали в свои процессоры IBM, Cyrix и другие.

Технология 3DNow! ввела 21 новую команду процессора и возможность оперировать 32-битными вещественными типами в стандартных MMXрегистрах. Также были добавлены специальные инструкции, оптимизирующие переключение в режим MMX/3DNow! (femms, которая заменяла стандартную инструкцию emms) и работу с кешем процессора. Таким образом технология 3DNow! расширяла возможности технологии MMX, не требуя введения новых режимов работы процессора и новых регистров.

Проверка поддержки 3DNow! процессором.

Перед началом работы с расширением 3DNow! следует убедиться, что ЦП их поддерживает. Для этого используется инструкция CPUID. Общий порядок действий при проверке выглядит следующим образом:

1. Убедиться, что процессор поддерживает инструкцию CPUID. Если нет, то ЦП не поддерживает и 3DNow!.

2. Выполнить инструкцию cpuid со значением EAX = 0 - это необходимо для следующего шага.

3. Выполнить CPUID со значением EAX = 80000000h. Если после выполнения инструкции в EAX будет значение меньше 1, то 3DNow! не поддерживается.

4. Выполнить CPUID с EAX = 80000001h. Если после выполнения бит 31 регистра EDX будет установлен в 1, то 3DNow! поддерживается. Иначе - нет.

До января 2020 года. Хотя корпорация не собирается пересматривать сроки поддержки операционной системы, выпущенной в 2009 году, похоже, что Редмонд пытается вынудить пользователей обновиться до новых версий Windows за счет ограничения поддержки и игнорирования проблем, обнаруженных в последних обновлениях.

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

Автор популярных книг про Windows Вуди Леонард (Woody Leonhard) сообщил о другом инциденте - Microsoft завершила поддержку некоторых систем Windows 7 с определенными типами процессоров. Во Вторник Патчей в марте 2018 года вышло очередное обновление для Windows 7, которое имело известную ошибку, затрагивающую устройства с процессорами, не поддерживающими SSE2:

Стоп-ошибка возникает на компьютерах, которые не поддерживают инструкции SSE2 (Streaming SIMD Extensions 2).

Данная ошибка сохранялся и в списках известных проблем патчей в апреле, мае и июне 2018 года. До последнего момента Microsoft сообщала, что над устранением данной ошибки ведется работа:

Microsoft занимается разработкой решений и предоставит обновления в будущих выпусках патчей.

На прошлой неделе заметки к июньскому обновлению для Windows 7 были изменены. Компания убрала данную ошибку из известных проблем, но не предоставила никакой дополнительной информации по данному вопросу. Была ли ошибка исправлена?

Чтобы разобраться в данном вопросе, нужно открыть заметки к прошлым обновлениям, например к майскому KB4103718 . Можно заметить, что данная стоп-ошибка числится в списке, но вместо информации о том, что проводится работа над исправлением ошибки, Microsoft просто отмечает, что на устройствах без поддержки SSE2 нужно заменить процессор на более современный или использовать виртуализацию.

Установите на устройство процессор, который поддерживает SSE2 или используйте виртуализацию машины.

Другими словами, Microsoft без лишней огласки завершила поддержку Windows 7 для устройств с процессорами, которые не поддерживают SSE2. Корпорация не собирается исправлять данную проблему и даже удалила информацию из заметок к последнему обновлению, из-за чего пользователи и администраторы остаются в неведении.

Поддержка SSE2 - необходимое условие для установки Windows 8 и более новых систем Windows 10, но никогда SSE2 не являлось условием для установки Windows 7. На официальной странице системных требований для Windows 7 нет ни слова о данном ограничении.

Данное изменение затрагивает устройства с процессорами Pentium III. Общее количество таких устройств неизвестно, но из-за этого пользователи находятся в затруднительном положении. Windows 7 продолжит работать как обычно, но если последние исправления не будут установлены, то система не получит новейшие обновления безопасности.

Переход на новые операционные системы Windows без аппаратного обновления невозможен, потому что для них также требуется поддержка SSE2. У пользователей затронутых устройств остается три возможных варианта дальнейших действий: продолжать использовать неподдерживаемую систему, обновить процессор / ПК или переключиться на Linux.

Заключение

На момент выхода Windows 7 Pentium III уже считался устаревшим процессором. По всей видимости Microsoft провела анализ затрат, чтобы оценить целесообразность разработки патча для устройств с процессорами без поддержки SSE2 и в итоге решила просто отказаться от поддержки данных ПК.

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

Люди заплатили за операционную систему и им гарантировали поддержку до 2020 года. Microsoft должна уважать своих пользователей и выполнять взятые на себя обязательства.

Нашли опечатку? Выделите и нажмите Ctrl + Enter

Многие пользователи при установке различных приложений, сталкиваются с сообщением “Процессор не поддерживает набор инструкций SSE2” . Эта ошибка встречается на компьютерах со старым железом и вводит в ступор пользователей – вроде бы Windows работает без проблем, но программа устанавливаться не хочет. Мы постараемся понятным языком рассказать, что это за технология SSE2 и каковы её функции в PC. Также вы узнаете, можно ли включить поддержку SSE2 Instructions в Windows.

Что такое SSE2 на компьютере?

Технология SSE2 – это расширение 32 битной архитектуры, исполняющее набор инструкций в вашем процессоре. Чем шире набор инструкций, тем больше возможности для обработки процессором системных запросов. Например, набор команд в первой ССЕ равнялся 70, а вторая версия поддерживает уже 144.

Инструкции SSE2 не доступны для ранних линеек процессоров, а это: АМД (до Атлона 64), Интел (до Пентиума 4), также VIA C3 и Transmeta Crusoe. Все более поздние линейки поддерживают данную технологию. Вот полный список устройств.

Что делать с проблемой?

Как уже понятно – ошибка “This program requires a computer that supports SSE2 instructions” возникает при попытке установить приложение, выполнение которого не будет поддержано процессором, ввиду его “древности”. Наиболее часто данная проблема встречается при установке актуальных версий браузеров (Firefox, Opera, Chrome, Internet Explorer), сторонних приложений (Office, Skype, антивирус Norton и т.д.), либо при переустановке ОС Windows.


Если вы получили данную ошибку, то выбора тут не много: обновлять железо – в крайнем случае материнскую плату и процессор, либо же устанавливать более раннюю версию софта. Если вы не желаете докупать новые детали на ПК, тогда отыщите для своей программы более старые версии, которые будут совместимы с требованиями процессора. Например, версии браузеров не требующие SSE2: Опера 20.0.1387.91, Хром 35.0.1870.2, Файерфокс ниже 48 версии. Вот полный список.

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

Можно ли включить SSE2?

Многие пользователи после появления данной ошибки ищут инструкции, которые бы давали возможность включить эту “опцию” в системе, кто-то разбирается чуть более обычного и лезет в BIOS. Где-то даже встречаются упоминания о патчах, которые позволят включить ССЕ2 в компьютере, но кроме дополнительной нагрузки они не дадут эффекта. Такие моды встречаются как решение для ошибки

Вы можете использовать программку CPU-Z, для просмотра характеристик вашего процессора Если в строке Instructions не будет указан SSE2, тогда ничего не поделаешь.


Программа CPU-Z – проверка характеристик процессора

Заключение

Очень часто, компьютер нужен лишь для некоторых целей, таких как распечатка, ограниченный серфинг в интернете, документация – поэтому можно ограничиться загрузкой соответствующей версии софта, что решит ошибку “Процессор не поддерживает SSE2”. Но у любого железа есть момент выработки, поэтому будьте готовы к обновлению аппаратной части PC.

ВступлениеНа проходившем недавно очередном Intel Developers Forum был официально представлен Prescott – новый процессор фирмы Intel, предназначенный для применения в персональных компьютерах. Он представляется как next generation processor - процессор нового поколения. Процессор выполнен по технологии 90 нанометров, что позволит достичь тактовых частот 4-5 GHz. Размер КЭШа второго уровня увеличен до 1MB - видимо, такое увеличение стало оправдано с точки зрения себестоимости благодаря новому техническому процессу. Размер КЭШа первого уровня так же удвоился, и тут заметно положительное влияние улучшенной технологии. Частота системной шины возросла до 800MHz. В целом, все блоки процессора претерпели небольшие улучшения. Но что этот вылизанный до блеска Pentium 4 несёт нового для разработчиков программного обеспечения? Увеличенный КЭШ – это, конечно, хорошо, надо несколько меньше думать о скорости чтения-записи данных из памяти, что часто является серьёзным лимитирующим производительность фактором. Но, всё равно, всех проблем не снимает, когда объём данных велик, увеличение КЭШа даже в два раза не принципиально.
Возросшая частота системной шины уверяет нас, что новый процессор от Intel будет достаточно сбалансированным, в нём не будет явно узких мест, тормозящих общую производительность системы. Как это, увы, было с некоторыми прошлыми процессорами, когда увеличение частоты не давало пропорционального прироста скорости.
Однако, такая вещь, как новый семислойный дизайн процессора мало интересует разработчиков ПО. Им гораздо важнее, какие новые процессорные команды стали доступны, какие оптимизационные приёмы предстоит применить для достижения максимальной производительности, или хотя бы, чтобы не было медленнее, чем на старом. Прошлый процессор фирмы Intel – Pentium 4 – требовал существенную оптимизацию программного обеспечения для увеличения производительности. На широком классе задач Pentium 4 проигрывал Pentium III не только равной частоты, но и значительно меньшей, до двух раз. Ниже мы детально разберёмся, почему это происходило, можно только сразу отметить, что глобальная причина состояла в необходимости существенного изменения ядра в целях наращивания частоты.
В целом, процессорное ядро не претерпело кардинальных изменений. Всё, что не любит Pentium 4 – в первую очередь, ветвления – всё досталось в наследство модификации на 90 нанометровом технологическом процессе. Даже несколько усилилось. В целях увеличения частоты глубина конвейера Prescott’а была увеличена, поэтому можно ожидать большие потери при ведущем к сбросу конвейера неправильном предсказании условных переходов.
Но есть и приятные новости, главная, это расширение набора процессорных инструкций. Введение MMX, SSE, SSE2 было приятно разработчикам программного обеспечения тем, что задавало им дополнительную работу по оптимизации программ. Иначе многие программы отказывались быстро выполняться. Однако, появившиеся в Prescott 13 новых инструкций существенно облегчают долю разработчиков.

MMX, 3DNow! SSE, SSE2 – принцип работы и оптимизации

Прежде, чем мы рассмотрим новые инструкции, совершим краткий обзор предыдущих SIMD-расширений набора процессорных команд, в первую очередь, оценим возможный прирост производительности при использовании того или иного набора инструкций. Те, кто хорошо знаком с предметом, могут пропустить данный раздел и сразу перейти к описанию новых команд Prescott.
Вот, иногда в тестовых обзорах говорится, что данная программа хорошо оптимизирована под SSE, и, благодаря этому, такой-то процессор показывает хорошие результаты. А что такое SSE? Само название говорит о природе этого набора инструкций. SSE – Streaming SIMD Extension. Потоковое SIMD расширение. А что такое SIMD? SIMD – Single Instruction Multiple Data. Одна инструкция – несколько данных-операндов.
Как обычно работают процессоры, как работали процессоры вроде 486, первого Pentium? Просто. Есть несколько ячеек-регистров, в них хранятся числа, в одной ячейке – одно число, процессор выполняет команды: сложить содержимое двух регистров, получится новое число, сравнить это число с содержимым третьего регистра, если больше, выполнить переход по списку инструкций. Однако, при таком подходе постепенно стали возникать трудности с увеличением производительности. Дело в том, что процессор не может начать выполнять следующую инструкцию до того, как будут вычислены предыдущими инструкциями нужные операнды. Можно поместить в процессор хоть сто блоков умножения, он считать быстрее не станет, всё время будет работать только один блок, а другие ждать результатов его вычислений. И, вот, придумали производить операции не с одной парой операндов, а сразу с несколькими парами. Как это выглядит на примере первого современного SIMD расширения в персональных компьютерах – MMX.

Операция часть 3 часть 2 часть 1 часть 0 Регистр
70 50 30 10 1 регистр
+
80 60 40 20 2 регистр
=
150 110 70 30 результат

Одновременно складывается не одна пара чисел, а четыре. Так же можно вычитать, умножать и т.п. сразу несколько пар операндов, каждый из которых находится в одном регистре. Введение этой технологии позволяет легко увеличить производительность процессора путём увеличения количества вычислительных модулей, без увеличения тактовой частоты. Более точно, не количество модулей увеличивается, а у них появляется способность работать сразу с несколькими парами операндов. Но для программирования это не важно.
Однако, для применения SIMD технологии, требуется поддержка на уровне самого кода программы. Процессор сам не может разместить несколько данных со сходными операциями в одном регистре. Программист должен, как говорится, ручками при написании программы явно указать, что процессор загружает такие-то данные из памяти в MMX регистры и производит с ними такие-то SIMD операции. Для этого он должен сам подготовить данные в памяти надлежащим образом, чтобы они хорошо «ложились» в регистры. В некоторых случаях возможно эффективное использование специальных SIMD-оптимизирующих компиляторов, которые автоматически создают код, использующий высокоэффективные SIMD-команды. Но, как правило, для эффективной компиляции код программы уже должен быть написан с соблюдением определённых правил.
Но не все алгоритмы в принципе могут быть хорошо адаптированы к SIMD расширениям. Попробуйте вычислить такое выражение – (a+b*c)*d. Меньше, чем тремя командами не обойтись. В те же три команды можно уложить нахождение суммы четырёх векторов вида (x,y,z,w). (x1+x2+x3+x4, y1+y1+y3+y4, z1+z2+z3+z4, w1+w2+w3+w4). При условии, что SIMD операции выполняются примерно с такой же скоростью, что и обычные, что реально, поскольку процессору всё равно нечего делать, можно увидеть многократное увеличение скорости при исполнении программ, хорошо оптимизированных под SIMD.
С точки зрения разработчика, можно выделить несколько типов SIMD-оптимизации. Прямая ручная оптимизация кода, высокоэффективная и достаточно трудоемкая. «Уговор» компилятора генерировать вместо обычного SIMD-код, что получается с переменным успехом. И использование предоставляемых производителями процессоров заранее оптимизированных библиотек функций, выполняющих стандартные распространённые операции. Понятно, что последний вариант наиболее предпочтителен.
Чем же отличаются SIMD расширения, чем MMX отличается от 3DNow! и SSE и т.п.? В первую очередь, они отличаются типами поддерживаемых данных, размером и количеством регистров и наборами возможных операций. Тип данных – это самое важное отличие, поскольку остальные параметры более-менее сходны у различных расширений.
Процессор работает с числами в нескольких форматах, в первую очередь, данные делятся на числа с плавающей десятичной точкой и целые числа. Разные задачи требуют различного представления данных. Второй параметр – это размер в байтах. Данные в виде чисел с плавающей точкой с некоторой точностью приближают произвольные вещественные числа, чем больше байт отводится на одно число, тем выше точность. Чем больше байт отводится на целое число, тем большему диапазону значений оно может принадлежать.

MMX

Расширение MMX появилось уже довольно давно и стало стандартным для персональных компьютеров. MMX расшифровывается как Multi Media Extensions. Расширение, предназначенное для работы с мультимедийными данными, с изображением и звуком.
В процессорах с технологией MMX есть 8 MMX регистров, каждый размером в 64 бит = 8 байт. MMX работает только с целыми числами; поддерживаются данные размером в 1, 2, 4 или 8 байт. То есть, один MMX регистр может содержать 8, 4, 2 или 1 операнд.


И т.д. Данные, содержащиеся в MMX регистрах, можно покомпонентно складывать, умножать, вычитать, выполнять разнообразные специфические, необходимые для multi media приложений, операции, вроде сложения без переполнения, вычисления среднего арифметического и производить логические операции с битами. Побитовый and, or, xor. Делить, правда, нельзя, есть ещё ограничения. Но многие операции можно делать на порядок быстрее, даже больше. Однако, применение MMX в особенности требует специальной ручной оптимизации, никакой компилятор тут существенно не поможет. Под MMX, например, оптимизируются разнообразные кодеки аудио файлов, алгоритмы работы которых хорошо сочетаются с MMX. Причём, не вся программа целиком, а небольшая часть, выполняющая основную работу, и это обстоятельство упрощает оптимизацию.

SSE2 – целочисленные операции

Как это мы сразу перескочили с MMX, которое появилось бог знает когда, на новшество, пришедшее относительно недавно вместе с Pentium 4? Минули и SSE, и 3DNow! Просто SSE2 включает в себя две принципиально разные части – продолжение SSE и продолжение MMX. Продолжение SSE работает с вещественными числами, продолжение MMX – с целыми. В SSE2 регистры по сравнению с MMX удвоились, то есть, там стало помещаться не, например, 8 чисел, а 16. Поскольку скорость выполнения инструкций не изменилась, при оптимизации под SSE2 программа запросто получала двукратный прирост производительности. Надо отметить ещё следующее обстоятельство. Если программа уже была оптимизирована под MMX, то оптимизация под SSE2 даётся сравнительно легко в силу сходности системы команд.
В Athlon XP нет поддержки SSE2, поэтому можно было наблюдать интересную картину, когда сначала Pentium 4 при кодировании проигрывал Athlon XP, а после оптимизации кодека под SSE2 начинал выигрывать. Можно признать удачной идею расширения MMX в SSE2, поскольку под MMX оптимизируется не очень много программ, а те, которые оптимизируются, оптимизируются как следует. Следует отметить, что Intel отличилась в предоставлении разработчикам программного обеспечения почти бесплатно уже оптимизированных под SSE2 библиотек функций, выполняющих некоторые типовые для кодирования операции. И это обстоятельство сыграло немаловажную роль в «спасении» производительности процессоров Pentium 4.

SSE

Рассмотрим теперь набор инструкций SSE. Он появился вместе с процессорами Pentium III, но полностью «расцвёл» после выпуска Pentium 4, на котором использование SSE давало радикальную прибавку к производительности.
SSE интересно прежде всего тем, что оперирует с данными вещественного типа, которые используются в геометрических расчётах, то есть, приложениях трёхмерной графики, компьютерных играх, редакторах вроде 3DStudioMax, и многих других. С тех пор как в компьютерных играх вроде Quake текстурирование треугольников стало производиться при помощи видеоускорителей, большая надобность в целочисленных вычислениях отпала. На первое место вышла скорость операций с плавающей точкой, вроде перемножения вещественного вектора на вещественную матрицу. Посмотрим теперь, что же может предложить SSE разработчику.
При внедрении SSE процессор получил в дополнение к стандартным регистрам архитектуры x87 8 новых больших регистров размером по 128 бит, в каждом из которых содержится 4 32-битных вещественных числа.

часть 3 часть 2 часть 1 часть 0
регистр 7
регистр 6
регистр 5
регистр 4
регистр 3
* * * * регистр 2
2 55.9 -1.9e10 1.567e-6 регистр 1
0.7 -100.0 11.2 0.5 регистр 0

С четвёрками операндов можно покомпонентно производить следующие операции: сложить две четвёрки чисел, вычесть, перемножить, разделить. Вычислить одновременно 4 (обратных) квадратных корня, точно или приближённо. Ещё можно тасовать содержимое регистров, перекладывать данные из одних частей регистра в другие и производить некоторые другие аналогичные операции. Однако перемещение данных происходит не быстрее их сложения, так что эффективное использование SSE возможно только на подготовленных правильно упакованных данных.
И на процессоре Pentium 4 одна SSE операция выполняется столько же, сколько аналогичная обыкновенная. То есть при оптимизации можно получить прирост производительности в 4 раза. Если быть более точным, то даже несколько больше, за счёт использования новых больших регистров. Однако, далеко не все вычисления можно эффективно оптимизировать под SSE. Как пример «хорошей» задачи следует привести умножение четырёхмерной матрицы на четырёхмерный вектор. Ускорение четырёхкратное без особых затрат.
В первую очередь использование SSE позволяет современным процессорам при выполнении трансформации вершин треугольников, составляющих трёхмерную сцену, успешно соревноваться с самыми новейшими видеоускорителями. Другое дело, что у процессора много других задач, и лучше его по возможности разгрузить, чтобы он работал параллельно с видеоускорителем.
А что же Athlon XP? Собственно, одним из главных новшеств по сравнению с обычным Athlon было именно внедрение технологии SSE. Можно ожидать примерно двухкратное ускорение по сравнению с обычным кодом. Нужно, однако, отметить, что это не SSE реализовано у Athlon XP «хуже», а выполнение обычного кода происходит крайне эффективно. На одной частоте при использовании только SSE инструкций Athlon XP и Pentium 4 имеют сходную производительность. Athlon XP ещё имеет преимущество при выполнении условных переходов, так что совсем для него хорошо получается. Но Pentium 4 достигает более высоких частот, что, при использовании SIMD инструкций позволяет ему иногда значительно выигрывать в скорости.

3DNow! и 3 ошибки стратегии AMD

Рассмотрим теперь в некотором смысле конкурента SSE – фирменное расширение процессорных команд от AMD. Может быть, скорее правильнее назвать SSE конкурентом 3DNow! поскольку оно позже появилось. Напомню, 3DNow! впервые было реализовано в процессорах AMD k6-2-3D, конкурентах Intel Pentium II. Собственно, они и получили в силу введения 3DNow! приставку или, если угодно, постфикс 3D. Почему 3DNow! можно смело назвать конкурентом SSE? Дело не только в различной «фирменной» принадлежности этих расширений, в конце концов, они могли быть созданы и одним изготовителем процессоров. Оба этих расширения оперируют с вещественными числами и рассчитаны для применения в геометрических приложениях.
Итак, 3DNow! Это расширение во многом сходно с SSE, но так же имеет и значительные отличия. Регистров так же 8, но они размером не 128 бит, а 64. Соответственно, в них помещается не 4 числа, а только 2. Имеется аналогичный SSE набор арифметических операций с регистрами. Сложить-умножить-разделить две пары операндов и т.п. Есть и операции нахождения (обратного) квадратного корня, точные и более быстрые приближённые.

часть 1 часть 0
регистр 7
регистр 6
регистр 5
регистр 4
* * регистр 3
10000.1 6.7 регистр 2
-0.5 1.5e7 регистр 1
2.0 1.0 регистр 0

Как можно догадаться, на участках кода, полностью оптимизированных под 3DNow!, можно ожидать двухкратного прироста производительности за счёт одновременного выполнения операций с двумя парами операндов. Вроде бы менее перспективно, чем при использовании SSE. Действительно, если уж взяться оптимизировать, тем более, вручную, то лучше искать максимальный прирост производительности. Это обстоятельство вкупе с традиционно большей долей процессоров Intel на рынке стало одним из важных факторов, помешавших распространению 3DNow! среди разработчиков.
Конечно, «доля» фактора большей доли SSE-процессоров по влиянию на распространение 3DNow! максимальна. Простите за каламбур. Тем более, что прирост от использования SSE в Pentium III - прошлых конкурентах процессоров Athlon c 3DNow! - примерно вдвое ниже, чем на Pentium 4. И аналогичен эффекту от использования 3DNow! в AMD Athlon.
Однако, есть ещё одно важное отличие расширения 3DNow! Можно складывать между собой содержимое одного регистра. То есть, производить не только «вертикальные» операции, но и горизонтальные. Попробуйте выполнить на SSE одну из основных геометрических операций – скалярное произведение двух трёхмерных векторов. Ничего хорошего не получится. Элементы длинного SSE регистра просто не сложить, надо задействовать дополнительные регистры. Получится ничуть не быстрее, чем без всякого SSE, может, даже медленнее. А скалярное произведение очень часто встречается, в том числе, при нахождении нормы вектора, расстояния между точками. В этом отношении 3DNow! выглядит более предпочтительным благодаря большей гибкости.
Другое важное обстоятельство, говорящее в пользу 3DNow!, это возможность достаточно эффективной автоматической оптимизации средствами компилятора. SSE слишком громоздко - размеры регистров большие - для автоматической организации данных. На коде, наполненном вычислениями с плавающей точкой, можно было бы бесплатно получить примерно полуторный прирост производительности. Но AMD не озаботилась созданием такого компилятора, в то время, как Intel усиленно продвигала свой собственный оптимизирующий компилятор, поддерживающий SSE, и, естественно, ни о каком 3DNow! не знающий. Дело дошло до того, что AMD использовала Intel’овский компилятор для компиляции исходных кодов процессорных тестов Spec (www.spec.org ). Своего нет, приходится для достижения максимальной производительности тестового приложения использовать наиболее эффективный компилятор.
Разработчики, естественно, не стремились лишний раз оптимизировать программы, и так полно хлопот с желательной оптимизацией под наиболее распространённые процессоры фирмы Intel. Получалось, что либо вообще не было SIMD-оптимизации, тогда процессор Athlon показывал себя отлично, особенно, по сравнению с Pentium 4. Либо была оптимизация под SSE(2), тогда Athlon условно говоря проигрывал.
Можно сказать, что AMD серьёзно просчиталось с 3DNow!, конечно, был некий локальный эффект при первой презентации. В основном, рекламный, поскольку из оптимизированных популярных приложений можно было отметить разве что OpenGL драйвера, в которых наблюдался существенный прирост скорости. Лучше бы они, раз уж не могут «пробить» своё расширение команд, строго реализовывали бы в своих процессорах все нововведения Intel. Реализовали бы вместо не используемого 3DNow! в Athlon XP систему команд SSE2, пусть даже не так эффективно. Золотой был бы процессор, почти без слабых мест.
Забегая вперёд, скажу, что, наконец, жизнь заставила AMD озаботиться компилятором для своих процессоров. Поскольку новая архитектура AMD x86-64 требует перекомпиляции существующих приложений для использования новых возможностей. В процессорах AMD Athlon 64 так же сохранилась 3DNow!, так что появилась возможность сравнить эффективность автоматической оптимизации под SSE и 3DNow! Будет, действительно, интересно.

SSE2

И, наконец, рассмотрим SSE2 - последнее из существующих сейчас на рынке x86-совместимых персональных компьютеров SIMD-расширение. Целочисленную составляющую мы уже обсудили ранее. Но в составе SSE2 появились не только инструкции для работы с целыми числами. Те же 8 больших 128-битных регистров теперь можно интерпретировать как содержащие не четыре 32-битных вещественных числа, а два 64-битных вещественных числа повышенной точности. Числа с повышенной точностью используются в тех случаях, когда вычисления с обычной точностью приводят к большим погрешностям. Все операции перенеслись с SSE, только работают не с четвёркой пар операндов, а с двойкой пар операндов. Правда, приближённое вычисление квадратного корня пропало, естественно.

часть 1 часть 0
регистр 7
регистр 6
регистр 5
регистр 4
регистр 3
* * регистр 2
-1.5e10 0.00001 регистр 1
1e-25 5.5 регистр 0

Получился как бы аналог 3DNow!, но без гибкой операции сложения между собой содержимого одного регистра.
А что насчёт скорости? Один научный сотрудник как-то спросил меня, как ему лучше оптимизировать свою расчётную функцию под SSE, он где-то услышал, что можно достичь ускорения на порядок. Я заинтересовался, какой тип данных он использует? Оказалось, что с повышенной точностью, чтобы лишний раз быть уверенным в корректности вычислений. Тогда ему следует использовать для оптимизации SSE2 и довольствоваться «всего лишь» двухкратным увеличением производительности.
Можно вывести простое правило для оценки производительности расчётных программ, если программа специально оптимизирована под SSE2, то будет более-менее быстро выполняться на процессорах Pentium 4 относительно Athlon XP. На самой высокой частоте перегонять. Если нет специальной оптимизации, будет проигрывать процессору Athlon XP с соответствующим рейтингом.

Новые инструкции Prescott

Настало время познакомиться с нововведениями в обычный набор команд, которые будут реализованы в процессоре Prescott, и оценить их полезность.
Прежде всего, а что мы, собственно, хотим? Я имею в виду в первую очередь разработчиков программного обеспечения.
Практически у всех разработчиков трёхмерных программ, в первую очередь, компьютерных игр, есть небольшая мечта: иметь удобную быструю библиотеку классов, представляющих геометрические объекты, вектора и матрицы.

class Vector
{
float x,y,z;

public:

inline friend Vector operator +(const Vector &a, const Vector &b); //сложение

inline float norm() const; // длина вектора
inline float norm2() const; // длина вектора в квадрате

inline friend float Dot(const Vector &a, const Vector &b); // скалярное произведение
};


Чтобы можно было просто писать a=b+c, а не муторно набирать a.x=b.x+c.x; a.y=b.y+c.y; a.z=b.z+c.z; И всегда на пути этого что-то находилось. Либо плохой компилятор так плохо компилировал вызовы функции сложения векторов, что накладные расходы производительности перевешивали удобства написания. Потом оказалось, что с помощью SSE удобно складывать вектора, а считать скалярное и векторное произведение совсем неудобно и медленно.
И вот случилось небольшое чудо, новые инструкции должны сделать существенно более лёгкой оптимизацию под SSE и SSE2, в том числе, и векторной математики.
Рассмотрим более предметно.
Самое главное: наконец появилась возможность довольно эффективно складывать элементы одного SSE регистра между собой.


Так можно просто тремя командами вычислить скалярное произведение двух векторов или норму вектора без использования дополнительных регистров. Конечно, остаются опасения относительно производительности такой команды горизонтального сложения. Она не должна быть большой, раз уж команда реализована. Будем надеяться, что выполнение этой инструкции не сбрасывает конвейер процессора.
Аналогично можно не складывать, а вычитать элементы одного регистра.
Появилась возможность складывать и вычитать между собой два числа, находящихся в одном SSE2 регистре. Так же появилась инструкция комбинированного сложения-вычитания двух элементов.

y2 x2
ADDSUBPD
y1 x1
=
y1+y2 x1-x2

Появление этой инструкции обязано природе умножения комплексных чисел. (a+bi)*(c+di)=a*c-b*d+(b*c+a*d)i Теперь значительно упростилась оптимизация под SSE2 вычислений с комплексными числами. По сути, SSE2 стало аналогично 3DNow!, только работает с числами с повышенной точностью.

Приведём таблицу новых инструкций.

Инструкция Описание
Горизонтальные операции с регистрами
HADDPS горизонтальное сложение содержимого SSE регистров
HSUBPS горизонтальное вычитание содержимого SSE регистров
HADDPD сложение двух элементов одного SSE2 регистра
HSUBPD вычитание одного из другого двух элементов SSE2 регистра
Во всех отношениях полезные команды, которых давно ждали разработчики, серьёзно упрощающие автоматическую и ручную оптимизацию.
Команды загрузки данных
MOVSHDUP загружает данные в регистр-приёмник, копируя только 2 и 4 32- битный элемент
MOVSLDUP загружает данные в регистр-приёмник, копируя только 1 и 2 32-битный элемент
MOVDDUP загружает данные в регистр-приёмник, копируя и удваивая первую половину регистра-источника
Полезно для автоматической и ручной оптимизации.
Комбинированное сложение-вычитание
ADDSUBPS (x1,y1,z1,w1) * (x2,y2,z2,w2) =
(x1-x2,y1+y1,z1-z2,w1+w2)
ADDSUBPD (x1, y1) * (x2, y2) =
(x1-x2, y1+y2)
Значительно упрощает реализацию операций с комплексными числами. Помогает в автоматической оптимизации программ.

Для относительно редкой тонкой ручной и автоматической оптимизации.
Преобразование данных
FISTTP Единственная новая x87 инструкция. Осуществляет быстрое преобразование содержимого стека сопроцессора к целому типу.
Полезно для автоматической оптимизации программы при компиляции. Когда-то давным-давно эту инструкцию забыли добавить в стандартный набор x87 инструкций, и теперь это упущение восполнено.
Улучшение поддержки Hyper-threading
MONITOR/MWAIT Процессор отслеживает событие записи в указанный диапазон памяти и активирует «уснувший» поток.
Упрощает оптимизацию программ и сервисов операционной системы для поддержки технологии Hyper-Threading и, в целом, multi-threading.

Оценка нововведений и сравнение с AMD x86-64

Глядя на дополнения к системам команд, можно смело сказать, что набор инструкций процессора Prescott приобрёл некоторую стройность и завершённость. С ним можно жить длительное время, до появления радикальных нововведений. Жаль, количество регистров не увеличилось, но это было трудно сделать без потери совместимости в силу ограничений формата машинных инструкций архитектуры x86. Доделаны всякие приятные мелочи, вроде команды эффективной конвертации fisttp. Значительно упрощена автоматическая генерация SIMD-оптимизированного кода. У процессора, помимо неизвестной цены, может быть только одно слабое место – большая глубина конвейера и, следовательно, сильная «нелюбовь» к условным переходам. Однако, удлинение конвейера это, видимо, неизбежное зло перехода к более высоким частотам. Мне лично кажется, что это наиболее красивый процессор от Intel за последние годы. Мы сейчас не касаемся вопросов потребления мощности, требования к охлаждению - будем надеяться, что с этим проблем не будет. А что касается цены, есть основания полагать, что она не будет чрезмерной. Взглянем на объём КЭШа второго уровня – 1MB, что же тогда будет представлять соответствующий Celeron? Он, что, будет иметь 512KB КЭШа? Это будет уже не Celeron, а какой-то карманный монстр. Для многих приложений достаточно и 256KB КЭШа, так что имеется большой запас снижения себестоимости. Что и говорить, переход к новому технологическому процессу сулит большие выгоды.
Однако, есть одно обстоятельство, которое может резко поднять цену процессора. Будут ли у него достойные конкуренты? В лице такого конкурента нам хотелось бы видеть новый 64-битный процессор от AMD – Athlon 64. Про его технические характеристики уже много сказано, посмотрим, чем он может привлечь разработчиков.
AMD, наконец, реализовала поддержку SSE2, это приятно. Теперь у процессоров Intel не будет выигрыша только за счёт одного факта использования в программе SSE2. Как известно, Athlon 64 имеет несколько режимов работы – режим совместимости и 64-битный режим, открывающий, собственно, все возможности новой архитектуры AMD x86-64. В режиме совместимости новый процессор представляется с точки зрения разработчика ПО Pentium’ом 4 с прикрученным 3DNow! И лишенным некоторых специфических недостатков, как-то отвратительное исполнение не SIMD-оптимизированного кода и большая не любовь к ветвлениям. Можно смело сказать, что новый процессор AMD будет достойным соперником обычному Pentium 4, если, конечно, сможет добраться до ринга.
Можно даже определённо предсказать, что обычному процессору Pentium 4 потребуется очень существенное превосходство в частоте, чтобы сравняться по производительности с новым Athlon в интегральных тестах, охватывающих широкий спектр приложений. Да, собственно, хотя процессора ещё нет на рынке, полно тестов опытных образцов, где коэффициент производительности на частоту вдвое выше у Athlon 64.
Но что же предлагает разработчику новый эксклюзивный 64-битный режим? Помимо приятной перекомпиляции всего и вся, есть три главные вещи – удвоение количества регистров, 64-битная арифметика и расширенное за пределы 2GB виртуальное адресное пространство приложения. 64-битная арифметика приятна сама по себе, но на сегодняшний день имеет довольно узкую область применения в настольных системах. Подавляющему числу приложений вполне достаточно 32 бит. AMD нашла одно достаточно актуальное поле применения 64-битной целой арифметики – выполнение некоторых задач криптографии ускоряется в разы.
Расширение адресного пространства, безусловно, будет востребовано в недалёком будущем и в настольных приложениях, но в ближайшие годы персональных компьютеров с объёмом памяти больше 2GB будет, скорее всего, не очень много.
Осталось увеличение вдвое количества регистров. Появляются дополнительные возможности по хранению используемых переменных в регистрах без лишнего обращения к памяти. Можно будет более эффективно передавать при помощи регистров параметры функций. Причём, разработчику не нужно об этом беспокоится, все сделает оптимизирующий компилятор. Увеличение количества регистров так же позволит более эффективно размещать в коде независимые команды, что позволит более плотно загрузить процессор. И это тоже ляжет на выносливые плечи компилятора. Мне последнее представляется наиболее весомым преимуществом. Дело в том, что у современных процессоров есть большое количество так называемых буферов отложенной записи, которые позволяют достаточно эффективно организовать swap регистров без загрузки памяти. Данные, отправленные в память и тут же востребованные, не ожидаются из памяти, а мгновенно загружаются из буфера. У Prescott, кстати, количество таких буферов увеличено.
Да, можно смело предположить хорошие перспективы нового процессора AMD в серверных системах. Ветвления его не пугают, адресное пространство большое, регистров достаточно, умеет быстро шифровать. Всё это очень не плохо для сервера какой-нибудь базы данных. Относительно невысокая цена может сделать его идеальным в определённой нише.
Однако, рассмотрим его перспективы в вычислительно тяжёлых графических приложениях для персональных компьютеров, в первую очередь, в трёхмерных компьютерных играх. Собственно, из чего складывается производительность в современной игре? Из двух основных компонент: высокоуровневой интеллектуальной обработки сцены, отсечении невидимых примитивов при помощи портальной технологии и т.п., расчёта AI и физической модели. И вторая компонента – умение быстро затолкать данные в видеоускоритель. Огромная тактовая частота и высокая частота системной шины не должны подвести новый процессор от Intel в проблеме «кормления» VPU. С производительностью собственно игрового движка всё сложнее. На стороне AMD более лояльное отношение к ветвлениям, которые в коде такого сорта встречаются очень часто. Большое количество случайных ветвлений может нивелировать любое преимущество в частоте. И, наконец, должно проявить себя 3DNow!, достаточно удобный набор инструкций для оптимизации геометрических расчётов, которыми полны современные игры. Причём, поскольку для AMD Athlon 64 желательна перекомпиляция приложений для использования новых возможностей x86-64, оптимизация под 3DNow! будет производиться автоматически оптимизирующим компилятором, не требуя усилий разработчика.
Не появись в процессоре Intel Prescott новых удобных инструкций, существенно облегчающих оптимизацию, я бы отдал предварительное предпочтение процессору AMD, лишённому, на первый взгляд, откровенно слабых мест, присущих Pentium 4. А так – посмотрим, тяжело заранее сказать.
Корпорация Intel предоставляет разработчикам большой набор оптимизированных функций, они точно получат максимальное ускорение от применения новых инструкций. AMD тоже пошла по этому пути, анонсировав свой набор библиотек, полностью использующих возможности x86-64.
Мне вот что подумалось, ходили странные слухи, что Intel собирается внедрить в процессорах Prescott архитектуру AMD x86-64, особенно, в случае успеха оной. Это немного невероятно, такого никогда не было. Наоборот, почему бы AMD, раз уж она всё равно задерживает выпуск процессоров, не включить в новые Athlon дополнительные инструкции процессора Prescott? Тогда все оптимизированные для Intel библиотеки функций будут прекрасно работать на процессорах AMD. У процессора Prescott не будет никакого преимущества за счёт удобных инструкций. Тем более, что это на первый взгляд не очень сложно сделать, процессоры AMD выполняют же уже давно гибкие операции 3DNow! Скорее, можно было ожидать от AMD введения подобных «горизонтальных» операций с данными, в силу более подходящей архитектуры процессорного ядра, в первую очередь, меньшей частоты, большего количества исполняющих модулей и т.п.
Я надеюсь, что это значительное упущение будет исправлено, тем более что всё равно потом AMD придётся, как это всегда было, реализовывать в своих процессорах расширения SSE.

No-eXecute (NX)

No-eXecute (NX) - это функция процессора, которая позволяет отмечать страницы памяти, как не содержащие исполняемый код. Эта функция позволяет ЦП обеспечивать защиту системы от атак вредоносных программ. Функция NX предотвращает размещение вредоносного программного кода в доступных областях памяти. Windows 8 требует, чтобы системы имели процессоры, которые поддерживают NX, и функция NX должна быть включена для обеспечения надлежащей безопасности и во избежание возможных уязвимостей.

В этом разделе термин NX относится непосредственно к биту процессора NX, который определен AMD, или эквивалентному биту процессора XD, который определен Intel для поддержки функции предотвращения запуска данных (DEP) в Microsoft Windows.

DEP позволяет предотвращать запуск вредоносного кода со страниц памяти. содержащих данные. 32-разрядная версия Windows использует один из следующих функций для поддержки DEP:

    Функция процессора для защиты страниц от запуска исполняемого кода (NX)

    Функция бита eXecute Disable (XD), определенная Intel.

Для использования этих функций процессора процессор x86 (32-разрядный) должен работать в режиме расширения физических адресов (PAE). 64-разрядная версия Windows использует функцию процессора NX для 64-разрядных расширений и определенные значения поля прав доступа PTE для процессоров семейства Intel Itanium (IPF).

Помимо DEP функция случайного выбора расположения адресного пространства (ASLR) перемещает исполняемые образы в случайные места при загрузке системы, что усложняет возможность преднамеренного запуска вредоносного кода. ASLR и DEP эффективны только при совместном использовании. Для эффективной работы этих двух важных мер безопасности Windows должна быть включена функция NX. Дополнительные сведения см. в разделе Меры обеспечения безопасности программ для Windows независимыми поставщиками программных продуктов .

Расширение физических адресов (PAE)

Процессор должен работать в режиме расширения физических адресов (PAE) для использования функции процессора NX. PAE - это функция процессора, которая позволяет процессорам x86 получать доступ к более чем 4 ГБ физической памяти на поддерживающих эту функцию версиях Windows. Архитектуры процессоров Intel Itanium и x64 естественным образом могут получать доступ к более чем 4 ГБ физической памяти, поэтому не имеют эквивалента PAE. PAE поддерживается 32-разрядными версиями Windows, работающими исключительно на системах x86.

Если функция DEP включена на системе, процессор который поддерживает функцию NX, функция PAE включается автоматически.

Расширения SIMD (SSE2)

Все процессоры, которые поддерживают NX, также поддерживают расширения SIMD 2 (SSE2). SSE2 - это дополнительный набор инструкций процессора SIMD. AMD также включает поддержку SSE2 в линейки Opteron и Athlon 64 своих процессоров AMD64. Все процессоры, которые поддерживают NX, также поддерживают SSE2. Многие приложения Windows 8 имеют пути кода с набором инструкций SSE2. SSE2 является обязательным требованием для Windows 8.

Область применения

Все современные процессоры поддерживают функцию NX. Функция NX может быть отключена в BIOS. На основе доступных данных телеметрии на одном проценте всех систем под управлением Windows® 7 функция NX отключена из-за неправильной настройки BIOS.

Для работы NX в 32-разрядных версиях Windows требуется наличие процессоров, поддерживающих PAE. Все 64-разрядные процессоры поддерживают NX, поскольку поддерживают AWE. Поэтому использование более старых 32-разрядных процессоров, которые не поддерживают PAE, не влияет на WOA или Windows Server (Windows Server 2012 является исключительно 64-разрядной системой). Требование к процессору не влияет на клиентов, использующих современные системы, или на системы, которые соответствуют требованиям к эмблеме Windows 7, поскольку эти системы оснащены поддерживающими PAE 32-битными процессорами, которые также поддерживают функцию NX и ее включение. Это затронет только небольшое число клиентов, у которых Windows 7 работает на очень старых 32-битных процессорах без поддержки PAE/NX.

Для Windows 8 и Windows Server 2012 наличие PAE является обязательным. Это требование влияет на небольшое число пользователей, которые используют более старое оборудование, не поддерживающее PAE. Ошибки возникают, когда Windows 8 устанавливается на неправильно настроенных виртуальных машинах (ВМ). Установка Windows завершается с ошибкой 0xc0000260 и откатывается до Windows 7.

Visual Studio предоставляет инструкции SSE2 по умолчанию. Приложения, которые обращаются к этим инструкциям, завершаются со сбоем на системах с более старыми процессорами, которые не поддерживают SSE2, как описано в разделе Инструкции SSE2 создаются при указании параметра /arch:SSE .

Требования к поддержке

В этом разделе описаны меры, которые проверяют поддержку требований к PAE, NX и SSE2 процессорами систем, работающих под управлением Windows 8.

Требование к эмблеме Windows 8

Требование сертификации оборудования для Windows 8 требует, чтобы все драйверы работали вместе с защитой предотвращения выполнения данных для обеспечения надлежащего поведения системы устройства и драйвера. Драйверы не должны выполнять код из стека, выгружаемого пула и пула сеансов. Драйверы не должны давать сбои при загрузке, если включен режим PAE. Во встроенном ПО системы должна быть включена функция NX, а для политики DEP должно быть установлено значение Всегда выключено . Включен сертификационный тест, подтверждающий, что система соответствует этому требованию к поддержке NX.

Дополнительные сведения см. в разделе Требования к сертификации оборудования для Windows .

Проверка на совместимость оборудования при установке Windows

Программа установки Windows имеет средство проверки совместимости оборудования для поддержки PAE, NX и SSE2 в устанавливаемой системе. Системы, которые не соответствуют требованию к поддержке процессором PAE, NX и SSE2, отмечаются как блокировки по оборудованию для Windows 8 в отчете о проблемах совместимости, при этом отображается сообщение Процессор вашего компьютера не совместим с Windows 8 .

Рис. 1. Сообщение об ошибке, связанной с несовместимостью процессора

Примечание

Эта проверка требований к поддержке доступна только в новой программе установки Windows и помощнике по обновлению. Windows 8 включает альтернативную версию программы установки и папке Sources на установочном носителе, которая не выполняет подобной проверки. Клиенты, которые попытаются использовать эту альтернативную версию программы установки Windows в системе, не соответствующей требованиям к поддержке PAE/NX/SSE2, увидят сообщение об ошибке во время установки, после чего будет выполнен откат к предыдущей версии операционной системы.

При загрузке с носителя или из сети, например с помощью служб развертывания Windows (WDS) во время установки Windows проверка совместимости не выполняется. При таких сценариях система без поддержки NX и SSE2 выдаст критическую ошибку (которая описана в следующем разделе Улучшения ядра ), когда программа установки попытается загрузить Windows.

Улучшения ядра

В целях проверки соответствия требованию поддержки инструкций SSE2 и функции NX для работы Windows 8 ядро этой операционной системы проверяет наличие этих функций во время инициализации. Системы, которые не поддерживают NX или SSE2, не могут инициализировать ядро Windows 8. В системах, которые могут отключить NX во встроенном ПО, этот параметр переопределяется, поэтому неправильно настроенное встроенное ПО не приводит к сбою загрузки. Попытка загрузить систему без поддержки NX или SSE2 приведет к возникновению критической ошибки. В 32-разрядной системе пользователи получают ошибку кода UNSUPPORTED_PROCESSOR (0x0000005D) вместе с 4 информационными строками:

    Строка 1 - код, указывающий отсутствующую функцию и идентификатор ЦП

    Строки 2 - 4 - строки идентификатора поставщика

В 64-разрядной системе критическая ошибка показывает тот же код UNSUPPORTED_PROCESSOR, что и на 32-разрядной системе вместе со следующими четырьмя информационными строками:

    Строка 1 - содержимое регистра стандартных функций

    Строка 2 - содержимое регистра расширенных функций

    Строки 3 - 4 - обе со значением 0

Вопросы и ответы

Как узнать, поддерживает ли моя система NX или SSE2?

Вы можете использовать средство командной строки Coreinfo для получения сведений о процессоре системы и просмотреть записи PAE, NX и SSE2 в выходном списке. Символ * отображается рядом с названием поддерживаемой функции. Символ - отображается, если функция не поддерживается. Например:

Coreinfo v3.04 - Dump information on system CPU and memory topology Copyright (C) 2008-2012 Mark Russinovich Sysinternals - www.sysinternals.com AMD Athlon(tm) 64 X2 Dual Core Processor 4600+ x86 Family 15 Model 75 Stepping 2, AuthenticAMD HTT* Hyperthreading enabled HYPERVISOR - Hypervisor is present VMX - Supports Intel hardware-assisted virtualization SVM * Supports AMD hardware-assisted virtualization EM64T * Supports 64-bit mode SMX - Supports Intel trusted execution SKINIT - Supports AMD SKINIT EIST - Supports Enhanced Intel Speedstep NX * Supports no-execute page protection PAGE1GB - Supports 1 GB large pages PAE * Supports > 32-bit physical addresses PAT * Supports Page Attribute Table PSE * Supports 4 MB pages PSE36 * Supports > 32-bit address 4 MB pages PGE * Supports global bit in page tables SS - Supports bus snooping for cache operations VME * Supports Virtual-8086 mode FPU * Implements i387 floating point instructions MMX * Supports MMX instruction set MMXEXT * Implements AMD MMX extensions 3DNOW * Supports 3DNow! instructions 3DNOWEXT * Supports 3DNow! extension instructions SSE * Supports Streaming SIMD Extensions SSE2 * Supports Streaming SIMD Extensions 2 SSE3 * Supports Streaming SIMD Extensions 3 SSSE3 - Supports Supplemental SIMD Extensions 3 SSE4.1 - Supports Streaming SIMD Extensions 4.1 SSE4.2 - Supports Streaming SIMD Extensions 4.2 …….. ……..

Если в выходных данных команды Coreinfo PAE отображается как неподдерживаемая функция, это означает, что процессор системы не поддерживает PAE и не может поддерживать NX. Если PAE отображается как поддерживаемое, но функция NX отображается в выходных данных команды Coreinfo как не поддерживаемая:

    Если процессор поддерживает NX, возможно, настройки BIOS этой системы неправильно определены для поддержки NX.

Если NX поддерживается в системе, как включить NX?

Изучите руководство производителя системы и зайдите на системе, которая поддерживает NX, в BIOS, чтобы найти параметр NX или XD в разделе Безопасность , а затем включить поддержку NX. Если в системе нет параметров BIOS, включающих поддержку NX, возможно, следует обратиться к производителю, чтобы обновить BIOS.

Примечание

Если NX поддерживается 64-разрядной системой, параметры конфигурации системы не позволяют установить для политики DEP значение Всегда выключено . Дополнительные сведения о системной конфигурации DEP см. в разделе .

Для успешной загрузки Windows 8 процессоры системы должны поддерживать NX и SSE2. Если система поддерживает эти функции, но параметры настроены неверно, эти параметры переопределяются перед загрузкой системы ядром.

Что делать, если не удалось установить Windows 8 на виртуальной машине из-за ошибки 0x0000260?

Если виртуальная машина размещена на системе, которая поддерживает NX, необходимо включить PAE/NX в параметрах ВМ или диспетчере конфигураций при настройке виртуальной машины Windows 8. Инструкции по включению PAE/NX для виртуальной машины см. в руководстве по установке продукта виртуализации.

Примечание

Если при попытке установить Windows 8 на виртуальной машине, размещенной в системе под управлением Windows, где функция NX отключена, необходимо выполнить инструкции в разделах и , чтобы включить NX в системе до включения PAE/NX для виртуальной машины.



© 2024 beasthackerz.ru - Браузеры. Аудио. Жесткий диск. Программы. Локальная сеть. Windows