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. Это может сильно сократить объём работы с памятью.