Interested Article - AltiVec

AltiVec — набор SIMD (векторных) инструкций для работы с числами одинарной точности с плавающей запятой и целочисленной арифметикой, разработанный и принадлежащий Apple Computer , IBM и Motorola (известных, как AIM ). AltiVec реализован в различных версиях процессоров PowerPC , как производства Motorola ( G4 ), так и производства IBM ( G5 ).

Само название AltiVec является зарегистрированной торговой маркой фирмы Motorola, поэтому Apple использует название Velocity Engine , а IBM — VMX .

Когда AltiVec появился в конце 1990-х годов, это был самый мощный набор векторных инструкций в процессорах для настольных систем. AltiVec предлагает больше регистров и возможностей с ними работать в силу гораздо более гибкого набора команд, чем у его аналогов ( MMX , разработанного Intel для работы с целочисленной арифметикой, набора инструкций с плавающей точкой SSE и ряда разработок других производителей RISC -процессоров).

Третье и четвёртое поколения SIMD-наборов инструкций фирмы Intel ( SSE2 и SSE3 , изначально доступные в Pentium 4 , а позже реализованные AMD в архитектуре AMD64 ), имеют гораздо больший набор команд, чем AltiVec.

Как AltiVec, так и SSE оперируют 128-битными векторными регистрами, которыми можно пользоваться, как шестнадцатью 8-битными байтами, восемью 16-битными словами, четырьмя 32-битными целыми или четырьмя числами с плавающей запятой. Оба предоставляют механизм работы с кэш-памятью , таким образом программист может сам снизить количество промахов при работе с потоком данных.

Между AltiVec и SSE есть серьёзные отличия. Только AltiVec поддерживает тип данных « RGB - пиксел », но не может работать с 64-битными дробными целыми двойной точности и отсутствует механизм прямой передачи данных между скалярными и векторными регистрами. В соответствии с моделью «загрузить/сохранить» RISC архитектуры процессора PowerPC, векторные регистры, равно как и скалярные, можно загружать и сохранять только в память. Впрочем, AltiVec предлагает существенно более расширенный набор «горизонтальных» инструкций, которые работают со всеми элементами вектора; допустимых комбинаций типов данных и операций гораздо больше. В отличие от восьми 128-битных векторных регистров в SSE и SSE2, AltiVec предлагает 32 таких регистра и большинство его инструкций работает сразу с тремя регистрами («положить в C результат сложения A и B»), в отличие от двухоперандных (регистр/регистр, регистр/память: «прибавить к A содержимое B») команд в IA-32 . Это может сильно сократить объём работы с памятью.

Современные версии GCC , IBM Visual Age Compiler предоставляют набор функций для непосредственной работы с инструкциями AltiVec прямо из языка C и C++ .

Существует специальный модификатор vector для спецификации типа переменной (например, vector unsigned char foo; — вектор из шестнадцати байтов). Перегруженные функции, такие как vec_add , оперируют с векторными регистрами исходя из их содержимого, при этом проводя очень чёткий контроль типов. Векторные инструкции Intel никакого контроля за типами не производят и оперируют лишь размером вектора, не различая байты и слова. Такая халатность может привести к тому, что вектор слов будет сложен с вектором байт, полностью разрушив данные. Чтобы такого не происходило, для архитектуры Intel существует целая серия дублирующих друг друга инструкций вида: _mm_add_epi16 (x, y) для сложения двух векторов слов, _mm_add_epi32 (x, y) для сложения двух векторов целых и т. п.

AltiVec разрабатывался в 1996—1998 годах , известным учёным и начальником отдела архитектуры микропроцессоров в Apple Computer .

Apple была главным заказчиком AltiVec и использовала его для ускорения мультимедийных приложений, таких как QuickTime или iTunes . AltiVec также играет огромную роль в работе таких системных механизмов Apple Mac OS X , как подсистема рендеринга изображений Quartz . Сторонние производители, например Adobe, также используют AltiVec для ускорения работы своих программ, например Adobe Photoshop . Motorola первая начала продавать AltiVec, встроенным в процессоры серии G4 (сейчас AltiVec’ом занимается компания Freescale , выделившаяся из Motorola). AltiVec также используется в некоторых встраиваемых системах , чтобы обеспечить быструю работу аналого-цифровых преобразователей .

IBM исключила VMX (другое название AltiVec) из своей серии POWER , так как эти процессоры использовались в мейнфреймах и серверах, где векторные вычисления не очень нужны. Впрочем, в PowerPC G5, предназначенных для настольных компьютеров, IBM встраивает высокопроизводительный модуль AltiVec. На ядре находится модуль сложения/умножения и полная реализация VMX.

IBM также заявляет, что часть инструкций VMX включена в процессор, используемый в игровой приставке Microsoft Xbox 360 , который основан на PowerPC. Процессор Cell также включает в себя VMX-модуль.

Согласно документации Apple , AltiVec в реализации на процессорах G4 и G5 может выполнять восемь 32-битных FLOPS за цикл, а SSE в реализации как Intel, так и AMD могут только четыре 32-битных FLOPS за цикл (надо отметить, что SSE-2 позволяет выполнить две 64-битных операции за цикл, чего не может AltiVec). Логично было бы предположить, что увеличив частоту в два раза, SSE смог бы догнать AltiVec. Однако частота работы процессоров Pentium превышает частоту PowerPC совсем не в два раза, так что AltiVec может выполнить существенно больше операций в секунду. Реальная скорость программы будет зависеть от гораздо большего количества факторов, таких как скорость и объём памяти, архитектура подсистемы ввода-вывода, компиляторов , ОС и просто архитектуры самой программы.

Несмотря на то что Apple заявляет, что PowerPC быстрее, чем Pentium при работе с мультимедийными приложениями, от таких оценок лучше воздержаться, так как однозначных данных о превосходстве SSE или AltiVec нет, несмотря на теоретически бо́льшую скорость AltiVec.

Примечания

  1. (англ.) . Дата обращения: 28 сентября 2017. 11 ноября 2004 года.

Ссылки

Источник —

Same as AltiVec