SIMD-команды

Операции с десятичными числами

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

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

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

Первой на мультимедийный бум отреагировала фирма Intel, добавив в систему команд своего микропроцессора Pentium MMX 57 SIMD-команд. Название ММХ (MultiMedia eXtention - мультимедийное расширение) разработчики обосновывали тем, что при выборе состава новых команд были проанализированы алгоритмы, применяемые в различных мультимедийных приложениях. Команды ММХ обеспечивали параллельную обработку упакованных целых чисел. При выполнении арифметических операций каждое из чисел, входящих в группу, рассматривается как самостоятельное, без связи с соседними числами. Учитывая специфику обрабатываемой информации, команды ММХ реализуют так называемую арифметику с насыщением: если в результате сложения образуется число, выходящее за пределы отведенных под него позиций, оно заменяется наибольшим двоичным числом, которое в эти позиции вмещается. На рис. 2.54 показано сложение двух групп четырехразрядных целых чисел, упакованных в 32-разрядные слова.

                   
{1, 2, 3, 9} = 0000123916                  
  +                
                   
{5, 6, 7, 8} = 0000567816                  
                   
                   
{6, 8, 10, 15} = 000068AF16                  
    31 28 27 24 23 20 19 16 15 12 11 8 7 4 3 0

Рис. 2.54. Сложение с насыщением упакованных целых чисел

Следующим шагом стало создание новых наборов SIMD-команд, работающих также с операндами, представленными в виде упакованных чисел с плавающей запятой. Такие команды в соответствующих приложениях повышают производительность процессора примерно вдвое. Первой подобную технологию в середине 1998 года предложила фирма AMD в микропроцессоре К6-2. Это мультимедийное расширение включало в себя 21 SIMD-команду и получило название 3DNow!. Расширение 3DNow! в дополнение к SIMD-обработке целочисленной информации типа ММХ позволяло оперировать парой упакованных чисел в формате с плавающей запятой.

В дальнейшем наборы SIMD-команд стали обозначать аббревиатурой SSE – Streaming SIMD Extension (потоковая обработка по принципу «одна команда – много нанных»). В последних разработках фирм Intel и AMD технология обозначена как SSE4, при этом у каждой из фирм она имеет свои особенности. Так в микропроцессорах с ядром Penryn фирмы Intel реализован набор из 47 SIMD-команд (SSE4.1), в микропроцессорах с ядром Nehalem (Core i7) – дополнено еще 7 команд (SSE4.2). Микропроцессоры Phenom фирмы AMD поддерживают лишь 4 команды из SSE4, но дополнительно реализуют две новые команды, обозначаемые как SSE4а. В 2007 году фирма AMD анонсировало новый стандарт – SSE5, преподносимый как 128-разрядное расширение SSE. Предполагается набор из 170 команд, который будет реализован в процессорах Bulldozer.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: