В свое врем появление у процессоров Pentium набора команд MMX было воспринято чуть ли не как революция. Правда, оказалось, что повышение производительности было не таким уж впечатляющим...


Чего же стоит ожидать от хваленых (компанией Intel) инструкций SIMD, поддерживаемых третьим поколением процессоров Pentium? 

 

Рис. 1. Воссоздание трехмерного ландшафта с помощью инструкций KNI и без них
 

Как известно, процессор Pentium III (Katmai) поддерживает 70 новых команд (Katmai New Instructions - KNI.): инструкции SIMD (Single Instruction, Multiple Data - "одна инструкция, много данных", произносится сим-ди.) для работы с вещественными числами, управлени состоянием процессора и сохранения данных в кэше. Инструкции 3D-Now! и MMX нельзя использовать одновременно со "стандартными" командами математического сопроцессора. Приходилось заставлять ЦПУ выполнять специальную команду для перехода из одного состояния в другое. (Именно поэтому выполняющие интенсивные вычисления с вещественными числами игры, например, Quake, не оптимизированы для MMX.) Команды KNI лишены этого недостатка. Правда, нос вытянул - хвост увяз: одновременно выполнять инструкции KNI, MMX и команды процессора можно, введя новый режим работы ЦПУ - разрешив инструкциям x86 и MMX обращаться к регистрам KNI. В результате инструкции x86/MMX/KNI могут использовать данные совместно, и скорость вычислений будет намного выше. С другой стороны, чтобы воспользоватьс всеми возможностями инструкций KNI, ПО должно быть в состоянии активизировать нужный режим. Это значит, что существующие приложения надо переписывать (помните ситуацию с технологией MMX?).

 

Инструкции KNI позволяют выполнять вычисления с плавающей точкой намного эффективнее, ведь они могут одновременно работать с четырьмя числами стандартной точности. Строго говоря, инструкции 3DNow выполняют тот же объем работы, но за два такта. Однако процессор Katmai отличается от K6-2 тем, что он может одновременно работать с вещественными числами стандартной точности (с помощью инструкций SIMD) и двойной (с помощью «обычных» инструкций x87), при условии, что ПО сумело перевести процессор в нужный режим. Основные приложения, производительность которых можно намного увеличить, используя инструкции SIMD, это алгоритмы:

  • расчета положения и освещения трехмерных объектов и текстур, оперирующие вещественными числами;
  • оперативной обработки и высокоточной генерации сигналов - вещественными числами;
  • растрирования видеоприложений - целыми числами;
  • кодирования/декодирования - блоками данных;
  • фильтрации - потоками данных большого объема. 

На Web-узле компании Intel можно найти графические изображения, на которых видны преимущества использования инструкций SIMD в приложениях воссоздания трехмерных объектов (рис. 1). Инструкции KNI можно разделить на четыре логические категории - команды SIMD для работы с вещественными и с целыми числами, для управлени кэшированием и режимом работы процессора.

 

"Вещественные" команды KNI

 

Название команды Синтаксис Назначение
addps, addss addps xmm1, xmm2 Сложение двух операндов и запись результата в первый из них.
subps, subss subps xmm1, xmm2 Вычитание двух операндов и запись результата в первый из них.
mulps, mulss mulps xmm1, xmm2 Умножение двух операндов и запись результата в первый из них.
divps, divss divps xmm1, xmm2 Деление двух операндов и запись результата в первый из них.
sqrtps, sqrtss sqrtps xmm1, xmm2 Вычисление квадратного корня второго операнда и запись результата в первый.
rcpps, rcpss rcpps xmm1, xmm2 Вычисление обратной величины первого операнда и запись результата во второй.
rsqrtps, rsqrtss rsqrtps xmm1, xmm2 Вычисление обратной величины квадратного корня первого операнда и запись результата во второй.
maxps, maxss maxps xmm1, xmm2 Сравнение операндов. Большее значение записывается в первый операнд. 
minps, minss minps xmm1, xmm2 Сравнение операндов. Меньшее значение записывается в первый операнд. 
shufps shufps xmm1, xmm2, ìàñêà «Перетасовка» содержимого операндов в соответствии с заданной маской. 
unpcklps, unpckhps unpcklps, xmm1, xmm2 «Распаковка» младшей или старшей части операндов. Результат записывается в первый операнд. 
movaps, movups, movhps, movlps, movss movaps xmm1, [eax] movaps [edi], xmm2 Копирование данных, находящихся по адресу [eax] или в регистре xmm2, в регистр xmm1 или по адресу [edi].
movhlps, movlhps movhlps xmm1, xmm2 Пересылка старшей (младшей) части первого операнда в младшую (старшую) часть второго.
movmskps movmskps eax, xmm1 Создание из самых старших битов вещественных элементов регистра XMM четырехбитовой маски в EAX. 28 старших битов EAX при этом обнуляются.
cmpltps, cmpltss cmpltps xmm1, xmm2 единицами. В противном случае первый операнд заполняется нолями. Сравнение операндов «меньше чем». Если условие выполняется, первый операнд заполняется
andps, andnps, orps, xorps andps xmm1, xmm2 Выполнение одной из логических операций с записью результата в первый операнд.
comiss, ucomiss comiss xmm1, xmm2 Сравнение операндов и установка соответствующих флагов в регистре EFLAGS.
cvtps2pi, cvttps2pi cvtps2pi mm1, xmm1 Преобразование вещественных чисел в целые с округлением или отбрасыванием дробной части.
cvtss2pi, cvttss2pi cvtss2pi eax, xmm1 Преобразование вещественных чисел в целые с округлением или отбрасыванием дробной части.
cvtpi2ps, cvttsi2ss cvtpi2ps xmm1, mm1 cvttsi2ss xmm1, eax Преобразование целого числа в вещественное. 

 

Команды SIMD FP для работы с вещественными числами


Рис. 2. Формат данных инструкций KNI, работающих с вещественными числами 
 

Рис. 3. Пакетный режим выполнения команд KNI 
 

Рис. 4. Скалярный режим выполнения комманд KNI

 

Набор инструкций KNI содержит группу универсальных команд SIMD FP, оперирующих с новым типом вещественных данных, для хранения которых предназначен набор новых регистров. За один такт инструкции SIMD FP успевают обработать четыре 32разрядных числа стандартной точности, используя для этого восемь новых 128-разрядных универсальных регистров с именами XMM0 - XMM7. Формат 32-разрядных данных стандартной точности с плавающей точкой соответствует стандарту IEEE754 (рис. 2). Стандартные сопроцессоры x87 представляют вещественные числа в виде 80-разрядных значений двойной точности, а процессоры Pentium III - в виде 32-разрядных значений стандартной точности. Поэтому в некоторых случаях, возможно, результаты работы ПО, будут мало отличаться, независимо от того, оптимизировано оно для инструкций KNI или нет. Команды KNI для вещественных чисел могут выполняться в одном из двух режимов - пакетном или скалярном. В пакетном режиме вычисления выполняются "вертикально", сразу над всеми четырьмя элементами 128-разрядных регистров (рис. 3). Мнемонические названия пакетных инструкций дополняются суффиксом ps (например, addps). В скалярном режиме вычисления выполняютс только над младшими элементами операндов (рис. 4). Старшие элементы операндов не участвуют в вычислениях (кроме команды присвоения). Мнемонические названия скалярных инструкций дополняются суффиксом ss (например, addss). В таблице 1 перечислены команды KNI для работы с вещественными числами, их назначение и синтаксис. Операндом - источником команды может быть один из регистров XMM или операнд в памяти. Целевым операндом должен быть один из регистров XMM.

 

Команды SIMD для работы с целыми числами

 

Команды KNI для целых чисел - это словно логическое расширение уже известного набора команд MMX (таблица 2). Как и команды MMX, инструкции SIMD оперируют с целыми числами, упакованными в 64-разрядном формате (рис. 5). Для хранения операндов используются те же "псевдорегистры" MMX c именами MM0MM7, которые располагаются в 80-разрядных регистрах сопроцессора. Но если раньше программисты были вынуждены обнулять регистры сопроцессора после выполнения инструкций MMX, чтобы в них не оставалось результатов целочисленных вычислений, то теперь (в соответствующем режиме процессора) об этом можно не заботиться. Мнемонические имена «целочисленных» инструкций SIMD содержат суффикс и префикс, указывающие на режим выполнения инструкции и тип операндов:

  • Префикс p указывает на пакетный режим выполнения команды.
  • Суффиксы b, w, d и q определяют тип данных, участвующих в вычислениях.
  • Суффиксы s и u определяют наличие знака у операндов.

Команды SIMD для управления кэшированием

 

Технология SIMD определяет набор инструкций для управления кэшированием данных. Он позволяет повысить эффективность обращения к области временного хранения данных (кэшу) и уменьшить количество прямых обращений к памяти, а также выполнять предварительную загрузку данных в кэш (prefetch). В частности, инструкции оперативного сохранения (streaming store) позволяют записывать данные, которые будут нужны еще не скоро, сразу в память, не обновляя содержимое кэша. Инструкции movntq и movntps позволяют записывать в память содержимое регистров MMX и XMM, соответственно. Инструкция maskmovq позволяет выборочно, в соответствии с маской в самом старшем байте, записать байты регистра MMX в память. Регистр EDI содержит при этом целевой адрес для записи байтов. Для предварительного считывания областей памяти в кэш предназначены команды prefetcht0 (одновременное считывание в кэш первого и второго уровней), prefetcht1 и prefetcht2 (считывание только в кэш второго уровня), а также prefetchnta (считывание сразу в кэш первого уровня, минуя второй). Инструкция sfetch осуществляет принудительную синхронизацию данных в кэше и оперативной памяти. Это стоит сделать перед обработкой «потенциально опасных» фрагментов кода, которые могут вызвать уничтожение накопленных в кэше данных до того, как они попадут в оперативную память.

 

Команды SIMD для управления состоянием процессора 


 

Рис. 5. Форматы данных  
 

Рис. 6. Регистр MXCSR

 

Чтобы приложения и операционные системы могли использовать все поддерживаемые процессором Pentium III состояния, разработчики Intel создали несколько новых регистров и команд. Среди них регистр MXCSR (рис. 6), предназначенный для отслеживания исключений (exceptions), определения режима округления чисел и потери значимости. Флагами регистра MXCSR манипулируют с помощью команд ldmxcsr и stmxcsr. Перва предназначена для загрузки в регистр значений флагов, вторая - для выгрузки. Для того чтобы программное обеспечение корректно восприняло переход процессора из одного состояния в другое, информацию о содержимом регистров следует сохранить в памяти. Естественно, после перехода сохраненные значения нужно восстановить. Содержимое регистров XMM, FP/MMX и MXCSR помещается в область памяти объемом 512 байтов. Для сохранени и восстановления этой области используютс команды fxsave и fxrstor.

 

Полезные ресурсы Web

 

Воспользоваться преимуществами новых инструкций для "параллельных" вычислений можно только с помощью соответствующих средств разработки. Компания Intel предлагает компилятор C/C++, который распространяется в виде подключаемого к Microsoft Visual Studio модуля. Описание этого и других средств разработки можно найти на страницах Web-узла Intel (developer.intel.com/drg/Pentiumiii/tools/adr.htm). На этом же узле можно разжиться очень полезным обучающим мультимедийным приложением, посвященным возможностям инструкций SIMD и способам их использования.


"Целочисленные" команды KNI

 

Название команды Синтаксис Назначение
pextrw pextrw eax, mm1, маска В соответствии с заданной маской копирует 16-битовое слово упакованных данных из регистра MMX в младшую часть 32-битового целочисленного регистра.
pinsrw pinsrw mm1, eax, маска В соответствии с заданной маской копирует младшее слово 32-битового целочисленного регистра в регистр MMX.
pminsw, pminub, pmaxsw, pmaxub pminsw mm1, mm2 Выполняют сравнение операндов, состоящих из слов со знаком или беззнаковых байтов.
pmovmskb pmovmskb eax, mm1 Создает из самых старших битов восьми байтов регистра MMX маску в EAX. 24 старших бита EAX при этом обнуляются.
pmulhuw pmulhuw mm1, mm2 Перемножает беззнаковые слова, из которых состоят 64-разрядные операнды, и записывает в первый операнд только старшие слова полученных произведений.
pshurw pshurw mm1, mm2, маска В соответствии с заданной маской выбирает данные из второго операнда в первый.

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

2004.11.22
19.03.2009
В IV квартале 2008 г. украинский рынок серверов по сравнению с аналогичным периодом прошлого года сократился в денежном выражении на 34% – до $30 млн (в ценах для конечных пользователей), а за весь календарный год – более чем на 5%, до 132 млн долл.


12.03.2009
4 марта в Киеве компания Telco провела конференцию "Инновационные телекоммуникации", посвященную новым эффективным телекоммуникационным технологиям для решения задач современного бизнеса.


05.03.2009
25 февраля в Киеве компания IBM, при информационной поддержке "1С" и Canonical, провела конференцию "Как сохранить деньги в условиях кризиса?"


26.02.2009
18-19 февраля в Киеве прошел юбилейный съезд ИТ-директоров Украины. Участниками данного мероприятия стали ИТ-директора, ИТ-менеджеры, поставщики ИТ-решений из Киева, Николаева, Днепропетровска, Чернигова и других городов Украины...


19.02.2009
10 февраля в Киеве состоялась пресс-конференция, посвященная итогам деятельности компании "DiaWest – Комп’ютерний світ" в 2008 году.


12.02.2009
С 5 февраля 2009 г. в Киеве начали работу учебные курсы по использованию услуг "электронного предприятия/ учреждения" на базе сети информационно-маркетинговых центров (ИМЦ).


04.02.2009
29 января 2009 года в редакции еженедельника "Computer World/Украина" состоялось награждение победителей акции "Оформи подписку – получи приз!".


29.01.2009
22 января в Киеве компания "МУК" и представительство компании Cisco в Украине провели семинар для партнеров "Обзор продуктов и решений Cisco Small Business"

 

 
 
Copyright © 1997-2008 ИД "Комиздат".