Топ питань
Часова шкала
Чат
Перспективи

XOP

З Вікіпедії, вільної енциклопедії

Remove ads

XOP (від англ. eXtended Operations – розширені операції [1]) – розширення набору інструкцій x86/AMD64, анонсоване корпорацією AMD 1 травня 2009 року.

Є розширенням та розвитком ідей, реалізованих у 128-бітих інструкціях SSE в архітектурах x86/x86-64. Реалізовано з мікроархітектури мікропроцесорів AMD Bulldozer(інші мови) (12 жовтня 2011).[2] Не підтримується процесорами AMD, починаючи з мікроархітектури Zen (Ryzen, EPIC; 2017 рік)[3].

У набір інструкцій XOP входить кілька різних типів векторних інструкцій, оскільки він був спочатку задуманий як велике оновлення SSE. Більшість інструкцій є цілими, але в набір також входять інструкції для перестановки чисел з рухомої комою та інструкції екстракції дробової частини.

Remove ads

Історія

Узагальнити
Перспектива
Докладніше: SSE5

XOP є переробкою частини ідей, призначених для SSE5. Набір було змінено, щоб зробити його більш схожим на AVX, але не дублювати інструкції. Інструкції, що збігаються з AVX, були видалені або переміщені в окремі розширення, наприклад FMA4 (векторне множення-додавання для рухомої коми) і CVT16 (перетворення чисел половинної-точності, реалізовано корпорацією Intel як F16C).[1]

Усі інструкції SSE5, для яких був аналог або еквівалент у наборах AVX та FMA3, використовують кодування, запропоновані корпорацією Intel. Цілочисленні інструкції без еквівалентів AVX були класифіковані як розширення XOP.[1] Інструкції XOP кодуються кодами операцій, що починаються з байта 0x8F (шістнадцяткове значення), але в іншому використовують схему кодування, майже ідентичну AVX з 3-байтовим префіксом VEX.

Окремі експерти (Agner Fog)[4] розцінили це як ознака того, що корпорація Intel не дозволила AMD використовувати будь-яку частину великого кодового простору VEX. Компанія AMD, ймовірно, була змушена використовувати відмінні коди для того, щоб уникнути будь-якої комбінації, яку міг би в майбутньому використовувати Intel. Схема кодування XOP максимально наближена до VEX, але усуває ризик перетину майбутніх опкодів Intel.

Використання байта 8F вимагає, щоб m-біт (див. схема кодування VEX) мав значення більше або дорівнює 8, щоб уникнути перетину з інструкціями, визначеними на даний момент. Байт 0xC4, який використовується у схемі VEX не має такого обмеження. Через це використання m-бітів для інших цілей у майбутньому в XOP схемі може бути утруднено (VEX не має обмежень на m-біти). Інша можлива проблема полягає в тому, що біти pp в XOP завжди мають значення 00, у той час як у VEX вони встановлюються значення 01 для вказівки, що в інструкції немає застарілих еквівалентів. Це може ускладнити використання pp бітів для інших цілей у майбутньому.

Аналогічна проблема сумісності - відмінності реалізацій розширень FMA3 та FMA4. Intel спочатку запропонував розширення FMA4 в рамках специфікації AVX/FMA версії 3, щоб замінити 3-операнди варіант FMA, запропонований AMD в SSE5. Після того як AMD реалізувала FMA4, Intel відмовився від FMA4 і повернувся до FMA3 у 5 версії специфікації AVX/FMA.[1][5][6]

У березні 2015 року компанія AMD розкрила в описі патча для пакету GNU Binutils що Zen, третє покоління архітектури x86-64, у першій редакції (znver1 — Zen, версія 1), не підтримуватиме TBM, FMA4, XOP and LWP інструкції, розроблені спеціально для сімейства мікроархітектури «Bulldozer».[7][8]

Remove ads

Цілочисленне векторне множення-додавання

Узагальнити
Перспектива

Ці інструкції є цілим аналогом наборів інструкцій FMA. Всі вони — чотириоперадні інструкції, схожі на FMA4, і всі вони працюють над знаковими цілими числами.

Більше інформації Інструкція, Опис ...
Remove ads

Цілочисленне векторне горизонтальне додавання

Узагальнити
Перспектива

Інструкції горизонтального додавання додають суміжні значення у вхідному векторі одне до одного. Вихідний розмір у наведених нижче інструкціях описує ширину виконаного горизонтального додавання. Наприклад, горизонтальний «байт у слова» додає по два байти за раз і повертає результат у вигляді вектора слів, але «байт у четверне слово» додає вісім байтів разом і повертає результат у вигляді вектора чотирьох слів. Шість додаткових горизонтальних інструкцій додавання та віднімання можна знайти в SSSE3, але вони працюють з двома вхідними векторами і виконують лише дві операції.

Більше інформації Інструкція, Опис ...

Цілочисленне векторне порівняння

Цей набір векторних інструкцій використовує поле immediate кодування як додатковий аргумент, який визначає яке саме порівняння виконувати. Існує вісім можливих варіантів порівняння для кожної інструкції. Вектори порівнюються і всі порівняння, що виявилися істинними, встановлюють всі біти у відповідному регістрі призначення в 1, а помилкові порівняння - встановлюють біти в 0. Цей результат може бути безпосередньо використаний в інструкції VPCMOV - векторизованого умовного пересилання.

Більше інформації Інструкція, Опис ...
Remove ads

Векторне умовне пересилання

VPCMOV працює як побітовий варіант інструкцій blend із SSE4. Для кожного біта операнда-селектора, рівного 1, виділяє підсумковий біт з першого джерела, якщо біт у селекторі дорівнює 0, вибирає підсумковий біт з другого джерела. При використанні спільно з векторними операціями порівняння XOP дозволяє реалізувати векторний тернарний оператор, або якщо в ролі другого аргументу виступає регістр призначення, умовне умовне пересилання (CMOV).

Більше інформації Інструкція, Опис ...
Remove ads

Цілочисленний векторний зсув та поворот

Інструкції зсуву відрізняються від подібних до набору інструкцій SSE2 в тому, що вони можуть зрушувати кожен елемент на різну кількість біт, використовуючи знакові цілі числа, що упаковані, з векторного регістра. Знак вказує напрямок зсуву або повороту, позитивні значення для зсуву вліво і негативні - для зсуву вправо [10] Корпорація Intel реалізувала інший, несумісний набір змінних векторних зсувів та поворотів а AVX2.[11]

Більше інформації Інструкція, Опис ...
Remove ads

Векторна перестановка

VPPERM — єдина інструкція, яка поєднує інструкції PALIGNR і PSHUFB з SSSE3 і розширює їх. Деякі порівнюють її з AltiVec інструкцією VPERM.[12] Вона приймає три регістри на вхід: два джерела та селектор (третій). Кожен байт у селекторі вибирає один із байтів в одному з двох джерел для запису у вихідний регістр. Селектор може вибирати нульовий байт, змінювати порядок біт на зворотний, повторювати значний біт. Всі ефекти або входи можуть бути інвертовані.

Інструкції VPPERMIL2PD та VPPERMIL2PS – двооперандні варіанти інструкцій VPERMILPD та VPERMILPS з набору AVX. Вони, як і VPPERM, можуть вибрати вихідне значення з будь-яких полів двох вхідних регістрів.

Більше інформації Інструкція, Опис ...
Remove ads

Виділення дробової частини чисел із рухомою комою

Ці інструкції виділяють дрібну частину з упакованих чисел із рухомою комою. Така частина числа може бути втрачена при перетворенні їх на ціле.

Більше інформації Інструкція, Опис ...

Див. також

Джерела

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads