
4. Определение поддержки sse
Перед тем как начинать работать с расширениями SSE (согласно документации Intel), нужно убедиться, что выполнены следующие три условия:
1. Бит 2 регистра CRO (эмуляция сопроцессора) должен быть равен нулю.
2. Бит 9 регистра CR4 (поддержка команд FXSAVE/FXRSTOR) должен быть
равен 1.
3. Бит 25 регистра EDX после команды CPUID (поддержка SSE) должен быть
равен 1.
5. Исключения
Особые ситуации при выполнении команд SSE вызывают новое системное исключение #XF (INT 19), обработчик которого может прочитать содержимое регистра MXCSR, чтобы определить тип исключения и выполнить соответствующие действия. Кроме того, команды SSE могут вызывать и обычные системные исключения - #UD (неопределенная команда), #NM (расширение отсутствует), #SS (переполнение стека), #GP (общая ошибка защиты), #PF (ошибка страничной защиты), #АС (невыровненное обращение к памяти).
Собственные исключения, вызываемые командами SSE и отраженные при помощи флагов в регистре MXCSR, - это:
#1 — невыполнимая команда (вызывается перед выполнением команды);
#Z - деление на ноль (вызывается перед выполнением команды);
#D - денормализованный операнд (вызывается перед выполнением команды);
#О - переполнение (вызывается после выполнения команды);
#U - антипереполнение (вызывается после выполнения команды);
#Р - потеря точности (вызывается после выполнения команды).
Практическая часть.
Замечание. Так как технология SSE появилась только в процессоре Pentium III, то требуются новые версии компилятора, поддерживающего соответствующие инструкции. Таким компилятором является, например, Visual Studio 2010, т.к. VS 6.00 была выпущена в 1997 году. Поэтому эту лабораторную работу необходимо выполнить в Visual Studio 2010.
Пример №1. Найти сумму 2-х векторов.
Решение.
Задания для самостоятельной работы
Ознакомьтесь с теоретическим материалом.
Разберите все примеры из практической части лабораторной работы, т.е. наберите и просмотрите их работу.
Выполните индивидуальные задания.
Индивидуальные варианты
№1. Составить программу, которая находит разность 2-х векторов (начальные значения вводим самостоятельно).