AltiVec

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

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

Надо отметить, что 3-е и 4-е поколение 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;" - вектор из шестнадцати 8-битных байтов). Перегруженные функции, такие как "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 может выполнять 8 32-битных FLOPS за цикл а SSE в реализации как Intel, так и AMD могут только 4 32-битных FLOPS за цикл (надо отметить, что SSE-2 позволяет выполнить 2 64-битных операции за цикл, чего не может AltiVec). Логично было бы предположить, что увеличив частоту в два раза, SSE смог бы догнать AltiVec. Однако, частота работы процессоров Pentium превышает частоту PowerPC совсем не в два раза, так что AltiVec может выполнить существенно больше операций в секунду. Реальная скорость программы будет зависеть от гораздо большего количества факторов, таких как скорость и объём памяти, архитектура подсистемы ввода-вывода, компиляторов, ОС и просто архитектуры самой программы.

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

Внешние ссылки

 
Начальная страница  » 
А Б В Г Д Е Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ы Э Ю Я
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
0 1 2 3 4 5 6 7 8 9 Home