SIMD в х86: мультимедийные расширения

Параллелизм, достигаемый за счет работы с независимыми данными.

Наиболее широко используемый вариант SIMD-системы сегодня имеется практически в каждом микропроцессоре и составляет основу сотен MMX- и SSE-инструкций микропроцессора x86. Эти инструкции были добавлены для повышения производительности мультимедийных программ, и дают возможность оборудованию располагать множеством одновременно работающих АЛУ, или, что одно и то же, поделить одно широкое АЛУ на множество параллельных, меньших по размеру АЛУ, работающих одновременно. Например, один и тот же компонент оборудования можно рассматривать как одно 64-разрядное АЛУ, или как два 32-разрядных АЛУ, или как четыре 16-разрядных АЛУ, или как восемь 8-разрядных АЛУ. Загрузки и сохранения имеют просто такую же ширину, как и самое широкое АЛУ, поэтому программист может относиться к одним и тем же инструкциям передачи данных как к передаче 64-разрядных элементов данных, либо двух 32-разрядных элементов данных, либо четырех 16-разрядных элементов данных, либо восьми 8-разрядных элементов данных.

Этот очень дешевый параллелизм для ограниченных целочисленных данных послужил исходным толчком для создания инструкций ММХ семейства процессоров х86. Под влиянием закона Мура к этим мультимедийным расширениям было добавлено еще больше оборудования, и теперь инструкции SSE2 поддерживают одновременное выполнение действий сразу над двумя 64-разрядными числами с плавающей точкой.

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

Вектор

Более старая и элегантная интерпретация SIMD называется векторной архитектурой, она тесно связана с продукцией компании Cray Computers. Здесь опять наблюдается довольно сильная связь с проблемами широкого применения параллелизма на уровне данных. Вместо использования 64 АЛУ, выполняющих одновременно 64 сложения, подобно старым матричным процессорам, векторная архитектура конвейеризирует АЛУ, чтобы получить высокую производительность при меньших затратах. Основная философия векторной архитектуры заключается в сборе элементов данных из памяти, помещении их в определенном порядке в большой набор регистров, проведении их последовательной обработки в регистрах, а затем в записи результатов обратно в память. Основным свойством векторных архитектур является набор векторных регистров. Поэтому векторная архитектура может иметь 32 векторных регистра, в каждом из которых 64 64-разрядных элемента.

Наиболее ярким является то, что векторный процессор существенно сокращает диапазон инструкций, выполняя только шесть инструкций против почти 600 для MIPS. Это сокращение получается из-за того, что векторные операции работают с 64 элементами, а также из-за того, что верхние команды, которые составляют на MIPS почта половину цикла, в векторном коде отсутствуют. Не удивительно, что это уменьшает количество извлекаемых инструкций и время их выполнения, экономя энергию.

В векторном процессоре каждая векторная инструкция будет приостанавливаться только для первого элемента каждого вектора, а затем последующие элементы будут ровно следовать вниз по конвейеру. Таким образом, задержки конвейера требуются только один раз для каждой векторной операции, а не один раз для каждого векторного элемента. В этом примере частота задержек конвейера в MIPS будет примерно в 64 раза выше, чем в VMIPS. Задержки конвейера могут быть сокращены в MIPS путем использования развертывания цикла. Но большую разницу в диапазоне инструкций сократить не удастся.

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





Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: