Difference between revisions 11301005 and 11554640 on ukwiki

'''MMX''' ('''M'''ulti'''m'''edia E'''x'''tensions - [[Мультимедіа|мультимедійні]] розширення) - комерційна назва додаткового [[Набір інструкцій|набору інструкцій]], що виконують характерні для процесів кодування / декодування потокових аудіо / відео даних дії за одну [[Машинна інструкція|машинну інструкцію]]. Вперше з'явився в процесорах [[Pentium MMX]]. Розроблений   у першій половині [[1990-ті|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 за шістьма основними пунктами: 
# додано 57 нових команд обробки даних; 
# збільшено в два рази обсяг внутрішнього кешу (16 кб для команд і стільки ж - для даних); 
# збільшено обсяг буфера адрес переходу (Branch Target Buffer - BTB), використовуваного в [[Модуль передбачення переходів|системі передбачення переходів]] (Branch Prediction); 
# оптимізована робота конвеєра (Pipeline); 
# збільшено кількість буферів запису (Write Buffers); 
# введено так зване подвійне електроживлення процесора. 

Набір з 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% - це відбувається через циклічність більшості тестів, коли більша частина циклу потрапляє в збільшений внутрішній кеш. 
(contracted; show full)ним з класів програм, яким використання MMX сильно допомагає, є ігри, а проте вже давно не секрет, що зараз комп'ютер, "достатній для ігор", в багатьох випадках істотно перевершує за складністю і вартісттю "достатній для роботи", бо сучасні ігри близькі за структурою до складних операційних систем реального часу. Тому в найближчому майбутньому всі без винятку ігри, які застосовують анімацію і звук, будуть підтримувати (а багато хто - і вимагати) технологію MMX. 

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

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

Команди технології MMX працюють з такими типами даних: 
* Упаковані [[байт]]и (вісім байтів в одному 64-розрядному регістрі) ( {{lang-en|packed byte}} );
* упаковані [[машинне слово|слова]] (чотири 16-розрядних слова в 64-розрядному регістрі) ('' packed word '');
* Упаковані подвійні слова (два 32-розрядних слова в 64-розрядному регістрі) ('' packed doubleword '');
* 64-розрядні слова ('' quadword '').

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

У систему команд введено 57 додаткових інструкцій для одночасної обробки декількох одиниць даних. 
(contracted; show full)
* Зсувні операції (Shift Instructions) логічні і арифметичні;
* Команди управління станом (Empty MMX State) очищення MMX - установка ознак порожніх регістрів в слові тегів.
Інструкції MMX не впливають на флаги умов. 
Регістри MMX, на відміну від регістрів FPU, адресуються фізично, а не відносно [[TOS]]. Будь-яка інструкція MMX обнуляє поле TOS регістра стану FPU. 
Інструкції MMX доступні з будь-якого режиму процесора. 

== Примітки ==
  
{{примітки}}

== Див. також ==  

* [[Streaming SIMD Extensions|SSE]]
* [[SSE2]]
* [[SSE3]]
 

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

== Посилання ==  
* [ftp://download.intel.com/design/PentiumII/manuals/24319002.PDF IA Software Developer's Manual, Vol 1] {{ref-en}} , Див. розділ 8 про програмування MMX
* [http://www.codenet.ru/progr/optimize/mmx.php Codenet.ru] {{ref-ru}} , Стаття про програмування ММХ

[[Категорія:Процесори]]

[[ar:إم إم إكس (مجموعة تعليمات)]]
[[bg:MMX]]
[[ca:MMX]]
[[cs:MMX]]
[[de:Multi Media Extension]]
[[en:MMX (instruction set)]]
[[es:MMX]]
[[fr:MMX (jeu d'instructions)]]
[[gl:MMX]]
[[id:Intel MMX]]
[[it:MMX]]
[[ja:MMX]]
[[ko:MMX]]
[[nl:MMX (Intel)]]
[[no:MMX]]
[[pl:MMX (zestaw instrukcji)]]
[[pt:MMX]]
[[ru:MMX]]
[[sv:MMX]]
[[zh:MMX]]