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[1], 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.
Примечания
[править | править код]- ↑ Hardware — SIMD Executive Summary (англ.). Дата обращения: 28 сентября 2017. Архивировано 11 ноября 2004 года.