Відкрити головне меню

MMX (Multimedia Extensions — мультимедійні розширення) — комерційна назва додаткового набору інструкцій, що виконують характерні для процесів кодування / декодування потокових аудіо / відео даних дії за одну машинну інструкцію. Вперше з'явився в процесорах Pentium MMX. Розроблений у першій половині 1990-х.

Зміст

ПередумовиРедагувати

Фактично вся історія розвитку комп'ютерів являє собою безперервну гонку між швидкодією центрального процесора і інших систем — пам'яті і зовнішніх пристроїв. Особливо це помітно в системах мультимедіа, де йде обробка звуку та зображення, цифрове подання яких займає великі обсяги пам'яті. Для ефективної обробки звуку і відео при відносно низькій пропускній здатності системної магістралі (шини) все більшу кількість функцій переноситься в апаратуру — модеми, відео-та звукові адаптери. Це викликає їх помітне подорожчання у порівнянні з загальною вартістю комп'ютера, що особливо неприємно за умов швидкого морального старіння всієї комп'ютерної апаратури.

Особливо дана проблема стала актуальною на початку 1990-х років, коли ПК став доступний широким масам користувачів і все активніше став перетворюватися на розважальний засіб . Першим процесором, що відчув нестачу ресурсів для мультимедійних застосунків став Pentium.

Насправді, нездатність ПК з процесором Pentium ефективно обробляти в реальному часі звук і відео без спеціальних карт відбувається вже не стільки від загальної швидкодії процесора або шини, які в більшості випадків цілком достатні, а від характеру його набору команд обробки даних, відомого під назвою CISC. Цей набір, що складається з відносно складних арифметико-логічних команд, орієнтований на типові завдання обробки даних, без спеціальної «заточення» під особливі програми. Ця, вигідна для більшості застосунків, архітектура виявляється абсолютно неефективною при швидкісний і специфічній обробці великих масивів даних, оскільки складна система команд використовується на лічені відсотки, а накладні витрати складають десятки і сотні відсотків.

Технологія MMX являє собою компромісне рішення, що поєднує шляхи, застосовані в комп'ютерах SPARC і Silicon Graphics (технологія RISC- Reduced Instruction Set Computer, комп'ютер з спрощеним набором команд), а також в комп'ютерах з паралельною архітектурою (технологія SIMD: Single Instruction, Multiple Data — одна команда, багато даних): класичний процесор Pentium (CISC) з додаванням ряду простих (RISC) команд паралельної обробки даних (SIMD).

Технологія MMXРедагувати

MMX розширення реалізоване фірмою Intel у своїй новій серії процесорів MMX з тактовою частотою 166 і більше МГц.

Процесор Pentium MMX відрізняється від «звичайного» Pentium за шістьма основними пунктами:

  1. додано 57 нових команд обробки даних;
  2. збільшено в два рази обсяг внутрішнього кешу (16 кб для команд і стільки ж — для даних);
  3. збільшено обсяг буфера адрес переходу (Branch Target Buffer — BTB), використовуваного в системі передбачення переходів (Branch Prediction);
  4. оптимізована робота конвеєра (Pipeline);
  5. збільшено кількість буферів запису (Write Buffers);
  6. введено так зване подвійне електроживлення процесора.

Набір з 57 нових команд і є основною відмінністю; інші два — не більше, ніж супутні зміни. Хоча збільшений об'єм кеш і внутрішніх буферів і оптимізований конвеєр дещо прискорюють роботу будь-яких застосунків, однак основне збільшення продуктивності — до 60% — можливо тільки при використанні програм, що правильно застосовують технологію MMX в обробці даних.

Обробка даних у MMXРедагувати

Як вже говорилося, в Pentium MMX додано 57 нових команд обробки даних і, відповідно — чотири нові типи даних. За одну операцію команда MMX обробляє 64-розрядне двійкове слово (так зване квадрослово, або QWord). Нові типи даних утворюються від упаковки в квадраслово звичайних типів — байтів (по 8), слів (по 4) або подвійних слів (по 2). Четвертий тип являє собою саме квадраслово.

Таким чином, одна елементарна MMX-операція має справу або з одним квадрасловом, що схоже на звичайну операцію великої розрядності, або з двома подвійними словами, чотирма словами або вісьмома байтами, причому виконання відбувається одночасно і кожен елемент даних обробляється незалежно від інших. Подібні групові операції переважають під час обробки зображення (групи точок) і звуку (групи значень амплітуди).

Набір MMX-командРедагувати

Набір MMX-команд складається з команд пересилки даних, упаковки / розпаковування, додавання / віднімання, множення, зсуву, порівняння та порозрядних логічних. Команди упаковки і додавання / віднімання можуть працювати в двох режимах: звичайному, коли переповнення розрядної сітки викликає «загортання» (wraparound) значення результату, і спеціальному, коли воно призводить до обмеження (clipping) результату до мінімально або максимально допустимого значення. Режим обмеження, в термінології Intel, називається Saturation (змішування) — в ньому особливо зручно виконувати змішування кольорів зображення або амплітуд звукових сигналів, оскільки при звичайному переповненні результат не має ніякого сенсу.

Команда множення представлена трьома видами: перші два виконують попарне множення чотирьох слів з вибором або старшої, або молодшої частини результату, а третій виконує операцію виду ab + cd для кожної пари з чотирьох слів операндів, що дуже зручно при обчисленні математичних рядів.

Команди зсуву реалізують логічний та арифметичний зсув своїх операндів (арифметичний зсув відрізняється від логічного тим, що при зсуві вправо звільнилися розряди заповнюються копією знакового розряду, а не нулями, від чого він придатний для множення / ділення знакових операндів на ступені двійки). Логічні порозрядні команди виконують операції І (AND), АБО (OR), виключаюче АБО (XOR), а також комбіновану команду І з інверсією одного з операндів (AND NOT), зручну для реалізації «зворотного вибору» по бітовій масці.

Команди порівняння працюють дещо незвично в порівнянні із загальноприйнятою логікою: замість установки ознак для наступних команд переходу вони генерують одиничні бітові маски для тих операндів, які задовольняють умові, і нульові — для решти операндів. Наступні логічні порозрядні операції можуть виділити, погасити або якось інакше обробити відзначені таким чином операнди, які в цьому випадку можуть являти собою точки зображення або відліки звукового сигналу.

Особливості реалізації MMXРедагувати

Для обробки даних і зберігання проміжних результатів у Pentium MMX використовуються вісім 64-розрядних регістрів MM0 .. MM7, які фізично поєднані зі стеком регістрів математичного співпроцесора. При виконанні будь-якої з MMX-команд відбувається установка «режиму MMX» з відміткою цього в слові стану співпроцесора (FPU Tag Word). З цього моменту стек регістрів співпроцесора розглядається як набір MMX-регістрів; завершує роботу в режимі MMX команда EMMS (End MultiMedia State). З одного боку, така реалізація дозволила забезпечити нормальну роботу застосунків, що використовують MMX, в багатозадачних системах, що не підтримують цю технологію, оскільки всі подібні системи створюють власну копію вмісту стека співпроцесора і слова його стану для кожного процесу. З іншого боку, перехід між режимами займає значний час, і суміщення, наприклад, в одному циклі команд співпроцесора з командами MMX може не тільки не прискорити, а навіть істотно уповільнити виконання програми. Тому для досягнення найкращих результатів рекомендується групувати ці команди окремо одне від одного, що насправді не представляє ніякої складності.

Продуктивність MMXРедагувати

Так як MMX — досить вузькоспеціалізоване розширення системи команд процесора, не можна очікувати кардинального прискорення роботи тільки від самого факту переходу на процесор MMX. Як вже було сказано, на застосунках загального характеру, незнайомих з MMX, реальна продуктивність зростає лише на одиниці відсотків, хоча тести можуть показувати її зростання на 20-30% — це відбувається через циклічність більшості тестів, коли більша частина циклу потрапляє в збільшений внутрішній кеш. При використанні «чистого» MMX-коду, відповідного до специфіки розв'язуваної задачі, швидкодія переписаної ділянки може зрости в 5-6 разів, проте це прискорення буде локальним і неминуче компенсується «типовими» ділянками програми, тому не слід відразу ж очікувати від програм, що використовують MMX, прискорення роботи в рази. За максимальними результатами тестів Intel Media Benchmark і Norton Media Benchmark для Windows 95, обробка зображень з використанням технології MMX відбувається швидше майже в п'ять разів, проте в середньому виходить приблизно 1.5 .. 3-кратне прискорення.

До речі, одним з класів програм, яким використання MMX сильно допомагає, є ігри, а проте вже давно не секрет, що зараз комп'ютер, «достатній для ігор», в багатьох випадках істотно перевершує за складністю і вартістю «достатній для роботи», бо сучасні ігри близькі за структурою до складних операційних систем реального часу. Тому в найближчому майбутньому всі без винятку ігри, які застосовують анімацію і звук, будуть підтримувати (а багато хто — і вимагати) технологію MMX.

Регістри MMXРедагувати

Розширення MMX включає в себе вісім 64-бітних регістрів загального користування MM0-MM7. Для сумісності зі способами збереження стану процесора в існуючих ОС Intel була змушена об'єднати в програмній моделі процесора вісім регістрів MMX з мантисами восьми регістрів FPU (Математичний співпроцесор). Апаратно це можуть бути різні пристрої, але з точки зору програміста — це одні й ті ж регістри. Таким чином, не можна одночасно користуватися командами Математичного співпроцесора і MMX.

Типи даних MMXРедагувати

Команди технології MMX працюють з 64-бітними цілочисельними даними, а також з даними, упакованими в групи (вектори) загальною довжиною 64 біта. Такі дані можуть перебувати в пам'яті або у восьми MMX-регістрах.

Команди технології MMX працюють з такими типами даних:

  • Упаковані байти (вісім байтів в одному 64-розрядному регістрі) (англ. packed byte);
  • упаковані слова (чотири 16-розрядних слова в 64-розрядному регістрі) ( packed word );
  • Упаковані подвійні слова (два 32-розрядних слова в 64-розрядному регістрі) ( packed doubleword );
  • 64-розрядні слова ( quadword ).

СинтаксисРедагувати

MMX - команди мають такий синтаксис: instruction [dest, src] Тут instruction  — ім'я команди, dest позначає вихідний операнд, src  — вхідний операнд.

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

  • US (unsigned saturation) — арифметика з насиченням[en], дані без знака.
  • S або SS (signed saturation) — арифметика з насиченням, дані зі знаком. Якщо у суфіксі немає ні S, ні SS, використовується циклічна арифметика (wraparound).
  • B, W, D, Q вказують тип даних. Якщо у суфіксі є дві з цих букв, перша відповідає вхідному операнду, а друга — вихідно.

Нові інструкції включають такі групи:

  • Команди пересилання даних (Data Transfer Instructions) між регістрами MMX і цілочисельними регістрами і пам'яттю;
  • Команди перетворення типів
  • Арифметичні операції (Arithmetic Instructions), що включають додавання і віднімання в різних режимах, множення і комбінацію множення і складання;
  • Команди порівняння (Comparison Instructions) елементів даних на рівність чи за величиною;
  • Логічні операції (Logical Instructions) — І, І-НЕ, АБО і виключаюче АБО, що виконуються над 64 бітними операндами;
  • Зсувні операції (Shift Instructions) логічні і арифметичні;
  • Команди управління станом (Empty MMX State) очищення MMX — установка ознак порожніх регістрів в слові тегів.

Інструкції MMX не впливають на флаги умов. Регістри MMX, на відміну від регістрів FPU, адресуються фізично, а не відносно TOS. Будь-яка інструкція MMX обнуляє поле TOS регістра стану FPU. Інструкції MMX доступні з будь-якого режиму процесора.

Див. такожРедагувати

ЛітератураРедагувати

  • Зубков С. В. Assembler для DOS, Windows, UNIX. 3-тє вид., Стер. — М.: ДМК Прес; СПб. : Питер, 2004. — 608 с.

ПосиланняРедагувати