|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
В свое время появление у процессоров Pentium набора команд MMX было воспринято чуть ли не как революция. Правда, оказалось, что повышение производительности было не таким уж впечатляющим... Чего же стоит ожидать от хваленых (компанией Intel) инструкций SIMD, поддерживаемых третьим поколением процессоров Pentium?
Как известно, процессор 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 для работы с вещественными и с целыми числами, для управления кэшированием и режимом работы процессора. Таблица 1 Вещественные команды KNI
Команды SIMD FP для работы с вещественными числами
Набор инструкций 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 содержат суффикс и префикс, указывающие на режим выполнения инструкции и тип операндов:
Команды SIMD для управления кэшированием Технология SIMD определяет набор инструкций для управления кэшированием данных. Он позволяет повысить эффективность обращения к области временного хранения данных (кэшу) и уменьшить количество прямых обращений к памяти, а также выполнять предварительную загрузку данных в кэш (prefetch). В частности, инструкции оперативного сохранения (streaming store) позволяют записывать данные, которые будут нужны еще не скоро, сразу в память, не обновляя содержимое кэша. Инструкции movntq и movntps позволяют записывать в память содержимое регистров MMX и XMM, соответственно. Инструкция maskmovq позволяет выборочно, в соответствии с маской в самом старшем байте, записать байты регистра MMX в память. Регистр EDI содержит при этом целевой адрес для записи байтов. Для предварительного считывания областей памяти в кэш предназначены команды prefetcht0 (одновременное считывание в кэш первого и второго уровней), prefetcht1 и prefetcht2 (считывание только в кэш второго уровня), а также prefetchnta (считывание сразу в кэш первого уровня, минуя второй). Инструкция sfetch осуществляет принудительную синхронизацию данных в кэше и оперативной памяти. Это стоит сделать перед обработкой потенциально опасных фрагментов кода, которые могут вызвать уничтожение накопленных в кэше данных до того, как они попадут в оперативную память. Команды SIMD для управления состоянием процессора
Чтобы приложения и операционные системы могли использовать все поддерживаемые процессором Pentium III состояния, разработчики Intel создали несколько новых регистров и команд. Среди них регистр MXCSR (рис. 6), предназначенный для отслеживания исключений (exceptions), определения режима округления чисел и потери значимости. Флагами регистра MXCSR манипулируют с помощью команд ldmxcsr и stmxcsr. Первая предназначена для загрузки в регистр значений флагов, вторая - для выгрузки. Для того чтобы программное обеспечение корректно восприняло переход процессора из одного состояния в другое, информацию о содержимом регистров следует сохранить в памяти. Естественно, после перехода сохраненные значения нужно восстановить. Содержимое регистров XMM, FP/MMX и MXCSR помещается в область памяти объемом 512 байтов. Для сохранения и восстановления этой области используются команды fxsave и fxrstor. Воспользоваться преимуществами новых инструкций для параллельных вычислений можно только с помощью соответствующих средств разработки. Компания Intel предлагает компилятор C/C++, который распространяется в виде подключаемого к Microsoft Visual Studio модуля. Описание этого и других средств разработки можно найти на страницах Web-узла Intel (developer.intel.com/ drg/Pentiumiii/tools/adr.htm). На этом же узле можно разжиться очень полезным обучающим мультимедийным приложением, посвященным возможностям инструкций SIMD и способам их использования. Таблица 2 Целочисленные команды KNI
Сформулировав для любой поисковой машины критерий SIMD, вы найдете немало ссылок на самые разные описания и статьи о новой технологии. Особый интерес представляет обсуждение новых инструкций на игровых Web-узлах. Здесь можно встретить самые противоречивые мнения о том, что готовит нам новый набор инструкций. Сергей МУРАШКИН, Использованы материалы: http://www.cp.comizdat.com
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Copyright © 1999-2000гг. "Internet Zone" & Nik Romanov. nikspase@mail.ru, nikspase@hotmail.ru, http://www.izone.com.ua/ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Копирование и использование данных материалов разрешается только в случае указания на журнал "Internet Zone" как на источник получения информации, при этом во всех ссылках обязательно явное указание адреса вэб-сайта http://www.izone.com.ua/. |