Jump to content

АлтиВек

(Перенаправлено с Altivec )

AltiVec одинарной точности с плавающей запятой и целочисленными значениями, SIMD — это набор инструкций разработанный и принадлежащий Apple , IBM и Freescale Semiconductor (ранее подразделение Motorola Semiconductor Products Sector) — альянсу AIM . Он реализован в версиях архитектуры PowerPC , включая процессоры Motorola G4 , IBM G5 процессорной и POWER6 , а также PA Semi PA6T от PWRficient . AltiVec — торговая марка, также называет систему Velocity Engine принадлежащая исключительно Freescale, поэтому Apple и VMX ( Vector Multimedia Extension ) IBM и PA Semi.

Хотя AltiVec относится к набору команд, реализации в процессорах IBM и Motorola отличаются с точки зрения логического проектирования. На сегодняшний день ни одно ядро ​​IBM не включает в себя логическую схему AltiVec, лицензированную у Motorola, или наоборот.

AltiVec является стандартной частью Power ISA v.2.03. [1] спецификация. До этой спецификации он никогда формально не был частью архитектуры PowerPC, хотя он использовал форматы и синтаксис инструкций PowerPC и занимал пространство кода операции, специально выделенное для таких операций. целей.

Сравнение с x86-64 SSE

[ редактировать ]

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

Они также демонстрируют важные различия. В отличие от SSE2 , VMX/AltiVec поддерживает специальный тип данных RGB « пиксель », но он не работает с 64-битными числами с плавающей запятой двойной точности, и нет возможности перемещать данные напрямую между скалярными и векторными регистрами. В соответствии с моделью «загрузка/сохранение» конструкции RISC PowerPC векторные регистры, как и скалярные регистры, могут только загружаться из памяти и сохраняться в ней. Однако VMX/AltiVec предоставляет гораздо более полный набор «горизонтальных» операций, которые работают со всеми элементами вектора; допустимые комбинации типов данных и операций гораздо более полны. Предусмотрено тридцать два 128-битных векторных регистра по сравнению с восемью для SSE и SSE2 (расширено до 16 в x86-64 ), и большинство инструкций VMX/AltiVec используют три регистровых операнда по сравнению с двумя операндами регистр/регистр или регистр/память. на ИА-32 .

VMX/AltiVec также уникален своей поддержкой гибкой инструкции векторной перестановки , в которой каждый байт результирующего значения вектора может быть взят из любого байта любого из двух других векторов, параметризованных еще одним вектором. Это позволяет выполнять сложные манипуляции в одной инструкции.

Последние версии [ когда? ] из коллекции компиляторов GNU (GCC), компилятор IBM VisualAge и другие компиляторы предоставляют встроенные функции для доступа к инструкциям VMX/AltiVec непосредственно из программ C и C++ . Начиная с версии 4, GCC также включает возможности автоматической векторизации , которые позволяют интеллектуально создавать ускоренные двоичные файлы VMX/Altivec без необходимости для программиста напрямую использовать встроенные функции. Ключевое слово типа «вектор» введено для разрешения объявления собственных векторных типов, например: « vector unsigned char foo;" объявляет 128-битную векторную переменную с именем "foo", содержащую шестнадцать 8-битных беззнаковых символов. Полный набор арифметических и бинарных операторов определен для векторных типов, поэтому для управления векторными переменными можно использовать обычный язык выражений C. Существуют также перегруженные внутренние функции, такие как " vec_add", которые выдают соответствующий код операции в зависимости от типа элементов внутри вектора, и применяется очень строгая проверка типов. Напротив, определенные Intel типы данных для регистров SIMD IA-32 объявляют только размер векторного регистра (128 или 64 бита), а в случае 128-битного регистра, содержит ли он целые числа или значения с плавающей запятой, программист должен выбрать соответствующую внутреннюю функцию для используемых типов данных, например: ". _mm_add_epi16(x,y)" для сложения двух векторов, содержащих восемь 16-битных целых чисел.

История развития

[ редактировать ]

Расширение Power Vector Media Extension (VMX) было разработано в период с 1996 по 1998 год в рамках совместного проекта Apple, IBM и Motorola. Apple была основным заказчиком Power Vector Media Extension (VMX) до тех пор, пока 6 июня 2005 года Apple не перешла на процессоры Intel на базе x86. Они использовали его для ускорения мультимедийных приложений, таких как QuickTime , iTunes и ключевых частей Apple Mac OS. X, включая графический редактор Quartz . Другие компании, такие как Adobe, использовали AltiVec для оптимизации своих программ обработки изображений, таких как Adobe Photoshop . Motorola была первой компанией, поставившей процессоры с поддержкой AltiVec, начиная с линейки G4. AltiVec также использовался в некоторых встроенных системах для высокопроизводительной цифровой обработки сигналов.

IBM последовательно исключала VMX из своих более ранних микропроцессоров POWER , которые предназначались для серверных приложений, где он был не очень полезен. Микропроцессор POWER6 , представленный в 2007 году, реализует AltiVec. Последний микропроцессор IBM для настольных ПК, PowerPC 970 (названный Apple «G5»), также реализовал AltiVec с аппаратным обеспечением, аналогичным аппаратному обеспечению PowerPC 7400 .

AltiVec — торговая марка, зарегистрированная Freescale (ранее Motorola) для стандартной категории:Векторная часть Power ISA v.2.03. [1] спецификация. Эта категория также известна как VMX (используется IBM) и «Velocity Engine» (торговая марка, ранее использовавшаяся Apple).

Механизм Cell Broadband Engine, используемый (помимо прочего) в PlayStation 3 , также поддерживает расширение Power Vector Media Extension (VMX) в своем PPU, при этом SPU ISA улучшен, но архитектурно аналогичен.

Freescale представляет улучшенную версию AltiVec для e6500 на базе QorIQ процессоров .

IBM усовершенствовала VMX для использования в Xenon (Xbox 360) и назвала это улучшение VMX128. Усовершенствования включают новые процедуры, предназначенные для игр (ускорение 3D-графики и игровой физики). [2] и всего 128 регистров. VMX128 не полностью совместим с VMX/Altivec, поскольку ряд целочисленных операций был удален, чтобы освободить место для большего файла регистров и дополнительных операций, специфичных для приложения. [3] [4]

VSX (векторное скалярное расширение)

[ редактировать ]

В Power ISA v2.06 представлены векторно-скалярные инструкции VSX. [5] которые расширяют обработку SIMD для Power ISA для поддержки до 64 регистров с поддержкой обычного выполнения с плавающей запятой, десятичной с плавающей запятой и векторного выполнения. POWER7 — первый процессор Power ISA, поддерживающий Power ISA v2.06.

Новые инструкции представлены IBM в категории Vector Media Extension для целочисленных операций как часть расширения VSX в Power ISA 2.07.

Новые целочисленные векторные инструкции были представлены IBM вслед за кодировками VMX как часть расширения VSX в Power ISA v3.0. Будет представлен вместе с процессорами POWER9 . [6]

Проблемы

[ редактировать ]

В C++ стандартный способ доступа к поддержке AltiVec является взаимоисключающим с использованием стандартной библиотеки шаблонов. vector<> шаблон класса из-за обработки слова «вектор» как зарезервированного слова, когда компилятор не реализует версию вектора с контекстно-зависимым ключевым словом. Однако их можно объединить, используя обходные пути, специфичные для компилятора; например, в GCC можно сделать #undef vector удалить vector ключевое слово, а затем используйте специфичное для GCC __vector ключевое слово на своем месте.

В AltiVec до Power ISA 2.06 с VSX отсутствует загрузка из памяти с использованием естественного выравнивания типов. Например, приведенный ниже код требует специальной обработки для Power6 и ниже, когда эффективный адрес не выровнен по 16 байтам. Специальная обработка добавляет 3 дополнительные инструкции к операции загрузки, когда VSX недоступен.

#include <altivec.h>
typedef __vector unsigned char uint8x16_p;
typedef __vector unsigned  int uint32x4_p;
...
int main(int argc, char* argv)
{
    /* Natural alignment of vals is 4; and not 16 as required */
    unsigned int vals[4] = { 1, 2, 3, 4 };
    uint32x4_p vec;

#if defined(__VSX__) || defined(_ARCH_PWR8)
    vec = vec_xl(0, vals);
#else
    const uint8x16_p perm = vec_lvsl(0, vals);
    const uint8x16_p low  = vec_ld(0, vals);
    const uint8x16_p high = vec_ld(15, vals);
    vec = (uint32x4_p)vec_perm(low, high, perm);
#endif

}

В AltiVec до Power ISA 2.06 с VMX отсутствует поддержка 64-битных целых чисел. Разработчики, желающие работать с 64-битными данными, будут разрабатывать процедуры из 32-битных компонентов. Например, ниже приведены примеры 64-битной версии. add и subtract в C с использованием вектора с четырьмя 32-битными словами на машине с прямым порядком байтов . Перестановки перемещают биты переноса и заимствования из столбцов 1 и 3 в столбцы 0 и 2, как в школьном учебнике по математике. Для машины с прямым порядком байтов потребуется другая маска.

#include <altivec.h>
typedef __vector unsigned char uint8x16_p;
typedef __vector unsigned  int uint32x4_p;
...

/* Performs a+b as if the vector held two 64-bit double words */
uint32x4_p add64(const uint32x4_p a, const uint32x4_p b)
{
    const uint8x16_p cmask = {4,5,6,7, 16,16,16,16, 12,13,14,15, 16,16,16,16};
    const uint32x4_p zero = {0, 0, 0, 0};

    uint32x4_p cy = vec_addc(vec1, vec2);
    cy = vec_perm(cy, zero, cmask);
    return vec_add(vec_add(vec1, vec2), cy);
}

/* Performs a-b as if the vector held two 64-bit double words */
uint32x4_p sub64(const uint32x4_p a, const uint32x4_p b)
{
    const uint8x16_p bmask = {4,5,6,7, 16,16,16,16, 12,13,14,15, 16,16,16,16};
    const uint32x4_p amask = {1, 1, 1, 1};
    const uint32x4_p zero = {0, 0, 0, 0};

    uint32x4_p bw = vec_subc(vec1, vec2);
    bw = vec_andc(amask, bw);
    bw = vec_perm(bw, zero, bmask);
    return vec_sub(vec_sub(vec1, vec2), bw);
}

Power ISA 2.07, использованная в Power8, наконец, предоставила 64-битные двойные слова. Разработчику, работающему с Power8, достаточно выполнить следующее.

#include <altivec.h>
typedef __vector unsigned long long uint64x2_p;
...

/* Performs a+b using native vector 64-bit double words */
uint64x2_p add64(const uint64x2_p a, const uint64x2_p b)
{
    return vec_add(a, b);
}

/* Performs a-b using native vector 64-bit double words */
uint64x2_p sub64(const uint64x2_p a, const uint64x2_p b)
{
    return vec_sub(a, b);
}

Реализации

[ редактировать ]

Следующие процессоры оснащены AltiVec, VMX или VMX128.

Моторола/Фрискейл

[ редактировать ]

Семена ПА

[ редактировать ]

Программные приложения

[ редактировать ]

Известно, что следующие программные приложения используют аппаратное ускорение AltiVec или VMX.

  • Helios имеет собственный порт POWER9/POWER10 с поддержкой VMX. [7]
  1. ^ Перейти обратно: а б «Power ISA v.2.03» (PDF) . Power.org. [ постоянная мертвая ссылка ]
  2. ^ «История процессора Microsoft Xbox 360» . ИБМ. Октябрь 2015 г. Архивировано из оригинала 20 января 2008 г. {{cite web}}: CS1 maint: bot: исходный статус URL неизвестен ( ссылка )
  3. ^ Использование архитектуры SIMD с параллельными данными в видеоиграх и суперкомпьютерах IBM Research
  4. ^ Реализация архитектуры набора команд с несмежными спецификаторами регистровых файлов. Патент США 7 421 566.
  5. ^ «Ускорение рабочих нагрузок с помощью векторно-скалярной архитектуры IBM POWER» . ИБМ. 01.03.2016. Архивировано из оригинала 25 января 2022 г. Проверено 2 мая 2017 г.
  6. ^ «Питер Бергнер — [ИСПРАВЛЕНИЕ, ВЫПОЛНЕНО] Добавлена ​​полная поддержка binutils Power ISA 3.0/POWER9» . Архивировано из оригинала 07 марта 2016 г. Проверено 24 декабря 2016 г.
  7. ^ «Часто задаваемые вопросы, Гелиос» . Гелиос . Проверено 9 июля 2021 г.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 091182cc1914b18ba6dbcf53f3fcc454__1717852380
URL1:https://arc.ask3.ru/arc/aa/09/54/091182cc1914b18ba6dbcf53f3fcc454.html
Заголовок, (Title) документа по адресу, URL1:
AltiVec - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)