AltiVec: различия между версиями

[непроверенная версия][непроверенная версия]
Содержимое удалено Содержимое добавлено
перевел до конца
Нет описания правки
Строка 1:
'''AltiVec''' это набор [[SIMD]] (векторных) инструкций для работы с [[число_с_плавающей_запятой|плавающей запятой ]] и целочисленной арифметикой, разработанный и принадлежащий [[Apple Computer]], [[International Business Machines|IBM]] и [[Motorola]] (известных, как [[AIM alliance]]). AltiVec реализован на различных версиях процессоров [[PowerPC]], как производства Motorola ([[PowerPC_G4|G4]]), так и производства IBM ([[PowerPC_G5|G5]]).
Само название AltiVec является [[tradename|зарегистрированной торговой маркой]] фирмы Motorola, поэтому Apple использует название '''Velocity Engine''', а [[IBM]] - '''VMX'''.
 
Когда AltiVec появился в конце 90-ых, это был самый мощный набор векторных инструкций в [[Центральный_процессор|процессорах]] для настольных систем. AltiVec предлагает больше [[Регистр|регистров]] и возможностей с ними работать в силу гораздо более гибкого набора команд, чем у его аналогов ([[MMX]], разработанный [[Интел]] для работы с целочисленной арифметикой, набор инструкций с плавающей точкой [[SSE]] и ряд разработок других производителей [[RISC]] процессоров).
Строка 6:
Надо отметить, что 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]], [[VisualAge|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-19981996—1998 годах [[Кейт Дифендорф|Кейтом Дифендорфом]], известным ученымучёным и начальником отдела архитектуры микропроцессоров в Apple Computer.
 
Apple была главным заказчкиком AltiVec-а и использовала его для ускорения [[мультимедиа|мультимедийных]] приложений, таких как [[QuickTime]] или [[iTunes]]. AltiVec так же играет огромную роль в работе таких системных механизмов [[Mac_OS_X|Apple Mac OS X]], как [[Quartz|подсистема рендеринга изображений Quartz]]. Сторонние производители, например Adobe, так же используют AltiVec для ускорения работы своих программ, как например [[Adobe Photoshop]]. Motorola первая начала продавать AltiVec, встроенным в процессоры серии G4 (сейчас AltiVec-ом занимается отдельная компания [[Freescale]], выделенная из подразделения Motorola). AltiVec так же используется в некоторых встраваемых системах, что бы обеспечить быструю работу [[АЦП|аналого-цифровых преобразователей]].
 
[[IBM]] исключила VMX (другое название AltiVec-а) из своей серии [[POWER]], т.к. эти процессоры использовались в мейнфреймах и серверах, где векторные вычисления не очень нужны. Впрочем, в [[PowerPC_G5|PowerPC G5]], предназначенных для настольных компьютеров, IBM встраивает высокопроизводительный модуль AltiVec. На ядре находится модуль сложения/умножения и полная реализация VMX.
Строка 21:
IBM так же заявляет, что часть инструкций VMX включена в процессор, используемый в игровой приставке Microsoft Xbox 360, который основан на PowerPC. Процессор [[Cell]] так же будет включать в себя VMX модуль.
 
Согласно документации Apple на http://developer.apple.com/hardware/ve/summary.html, AltiVec в реализации на процессорах [[PowerPC_G4|G4]] и [[PowerPC_G5|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.
 
 
== Внешние ссылки ==
 
* [http://www.freescale.com/webapp/sps/site/overview.jsp?nodeId=0162468rH3bTdGmKqW5Nf2 страница Freescale, посвященная AltiVec]
* [http://developer.apple.com/hardware/ve/ страница Apple про Velocity Engine]
* [http://www.simdtech.org/altivec список рассылки Simdtech.org]
 
[[Категория:Паралельная обработка данных]]
 
[[de:AltiVec]]
[[en:AltiVec]]
[[es:AltiVec]]
[[fr:AltiVec]]
[[it:AltiVec]]
[[ja:AltiVec]]
[[en:AltiVec]]