fbpx
16.8 C
София

Процесорните инструкции MMX, SSE и AVX

Най-четени

Даниел Десподов
Даниел Десподовhttps://www.kaldata.com/
Новинар. Увличам се от съвременни технологии, информационна безопасност, спорт, наука и изкуствен интелект.

В средата на 80-те години на миналото столетие процесорният пазар по нещо прилича на днешния. Intel доминира, но се сблъсква с жестоката конкуренция от страна на AMD. Домашните компютри, като например Commodore 64 използват съвсем базови 8-битови процесори, а големите десктоп компютри започват прехода от 16-битови към 32-битови чипове.

Тези числа показват размера на данните, които могат да бъдат обработени от процесора по математически път. При това, колкото са по-големи тези значения, толкова по-големи са точността и възможностите. Именно това определя размера на основните процесорни регистри.

Процесорите от този тип се наричат скаларни (целочислени). Какво означава това? Скаларът е величина, чиято стойност може да се изрази с едно цяло число. Скаларен процесор означава, че върху един елемент от данните може да се извършва само една математическа операция. Този тип процесорни инструкции е познат като SISD (single instruction, single data) или единична инструкция, единични данни.

По този начин инструкцията за изчисляване сумата на примерно два байта с данни се свежда просто до обработката на тези две числа. А ако ви се наложи да прибавите едно и също значение към група от 16 числа, то ще трябва да бъдат извършени 16 инструкции – по една за всяко число от тази група. Процесорите от това време все още не могат да извършват събиране на числа по някакъв друг начин.

Intel 80386DX с честота 16 MHz

Цялото (Integer) в математиката е число, което няма дробна част. Например 8 или -12. Процесорите от типа на 80386SX нямат вградена възможност за събиране на числата да кажем, 3,80 и 7,26 – това са дробни числа с плаваща запетая – FP (floating point) или просто floats. За работа с тях е необходим допълнителен процесор, какъвто е копроцесорът 80387SX, който си има собствен набор от процесорни инструкции.

По това време за х86 инструкции се разбира набор от команди за целочислени (integer) операции, а за х87 инструкции – за числата с плаваща запетая (floats). В наши дни всички видове математически операции се изпълняват от съответния само един процесор и сега терминът х86 се използва за обозначаването на инструкциите и за двата типа данни.

Но тогава използването на отделни копроцесори за обработването на различни данни е стандарт, докато Intel не представя 80486. Това е първият CPU за персонални компютри с интегриран в чипа копроцесор за обработването на веществени числа (FPU, Floating Point Unit).

Intel 80486. С жълта рамка е показан FPU модула за работа с числа с плаваща запетая

Самият блок за FPU изчисленията заема сравнително малко място в чипа на процесора, но ускорението на производителността с помощта на това решение, е огромно.

Но като цяло принципът на работа на чиповете си остава скаларен. Това продължава до появата на наследника на 486 – процесорът Intel Pentium. Но са необходими още 3 години преди Intel да представи на света Pentium MMX, което става през месец октомври 1996 година.

V означава векторен, а какво означава MMX

В света на математиката числата могат да бъдат групирани в комплекти с най-различни размери и видове, като една от най-опростените конструкции от подобен род е аритметичният вектор. Най-лесно е да си го представим като списък от числа, които са разположени хоризонтално или вертикално. MMX технологията донесе в света на процесорите възможността да се извършват векторни математически изчисления.

Първоначално това е една доста ограничена система, понеже може да работи само с цели числа и използва за тази цел FPU регистрите. Ето защо програмистите, които искат да използват каквито и да било MMX инструкции, няма как едновременно с това да извършват математически операции с дробни числа с плаваща запетая.

Станалата знаменита реклама на технологията Intel MMX (1997)

Интегрираният FPU в Pentium вече има 64-битови регистри, като при MMX операциите всеки от тях може да побере две 32-битови, четири 16-битови или осем 8-битови цели числа. Именно тези групи от числа са векторите и всяка MMX инструкция, предназначена за тях, едновременно се извършва върху всички значения от цялата група.

Този принцип на работа получи името SIMD (single instruction, multiple data) – единична инструкция, множество данни и това е една голяма стъпка напред във възможностите на процесорите за персонални компютри.

Кои приложения имат най-голяма полза от MMX? На практика всички, на които се налага да извършват еднакви изчисления върху група от еднородни данни. На първо място това са някои функции в 3D моделирането и при мултимедийните технологии, както и в системите за обработка на различните цифрови сигнали.

Така например, MMX инструкциите са изключително популярни за ускоряване умноженията на матрици, при обработката на върховете на триизмерните фигури, за редактирането на видео и други подобни.

Процесорът AMD K6-2 с поддръжката на инструкциите 3DNow!

За съжаление, внедряването на MMX ставаше с твърде бавни темпове поради негативното влияние на тази технология върху производителността на операциите с плаваща запетая. AMD частично реши този проблем като създаде своя собствена версия на тези процесорни инструкции, която получи името 3DNow!, което стана две години след появата на MMX. Технологията на AMD предложи повече SIMD инструкции и което е по-важното, едновременно с тях, без каквото и да било забавяне могат да се извършват операциите с плаваща запетая. Но в началото програмистите не обръщаха особено внимание на 3DNow!.

И да, MMX не е абревиатура и според Intel тези букви нищо не означават, а просто звучат добре и се запомнят.

По-лесно от SSE

Ситуацията изведнъж се промени през 1999 година с излизането на процесора Intel Pentium III. Той донесе със себе си една блестяща реализация на основните векторни функции, която се нарича SSE (Streaming SIMD Extensions) – специални SIMD инструкции, които дават възможност за едновременна обработка на четири 32-битови числа с плаваща запетая. Добавен е комплект от осем 128-битови регистри, които вече не зависят от регистрите за работа с плаваща запетая плюс стек от допълнителни инструкции за обработка на числата с плаваща запетая.

Използването на отделни и независими регистри означава, че вече няма толкова силна зависимост от FPU, въпреки, че Pentium III все още не може да извършва SSE инструкциите едновременно с FP инструкциите. Новите SSE инструкции поддържат само един тип данни в регистрите: четири 32-битови числа с плаваща запетая.

Но преходът към SIMD инструкции с плаваща запетая значително увеличи производителността на приложенията за кодиране и декодиране на видео, на обработката на изображения и звук, на програмите за компресиране и декомпресиране на файловете и още много други.

Pentium IV: с жълт цвят е обозначен блокът с SSE2 регистрите

Усъвършенстваната версия SSE2 бе представена през 2001 година едновременно с излизането на процесора Pentium 4, като този път работата с данните е значително подобрена. Налични са четири 32-битови или два 64-битови FP числа, както и шестнадесет 8-битови, четири 32-битови и две 64-битови цели числа. MMX регистрите са запазени, но всички MMX и SSE инструкции могат да се извършват с помощта на вече съвсем независимите от FP 128-битови SSE регистри.

Още по-новата модификация SSE3 се появи през 2003 година и предложи още повече инструкции и възможност за извършването някои основни математически изчисления в рамките на само един процесорен регистър.

След три години ни бе представена архитектурата Intel Core донесе модифицирана версия на SIMD технологията. Това е SSSE3 (Supplemental SSE), а малко по-късно същата година – финалната версия SSE4.

През 2007 година AMD започна да използва собствена версия на SSE4 инструкциите в своята процесорна архитектура Barcelona. Компанията реши да не измисля ново име на тази технология и я нарече просто SSE4a.

С излизането на Nehalem Core през 2008 година бе представено значително обновяване на тази версия, наречено от Intel SSE4.2, което не засегна регистрите, а само добави нови инструкции, които значително разшириха диапазона на възможните математически и логически операции.

AMD от своя страна, в началото предложи новата версия SSE5, но след това реши да я раздели на три отделни разширения, едното от които се оказа твърде проблемно.

В края на 2008 година Intel и AMD започнаха да предлагат на пазара процесори, които вече поддържат всичките версии на наборите от инструкции – от MMX до SSE4.2. Веднага след това редица приложения и най-вече игрите започнаха да изискват поддръжката на тези процесорни инструкции.

Време е за нови букви

2008-ма година се запомни и с това, че Intel обяви, че усилено работи върху значителен ъпгрейд на своята SIMD система. Още през 2011 процесорният гигант представи процесорите от фамилията Sandy Bridge с поддръжката на инструкциите AVX (Advanced Vector Extensions). При тях всичко е удвоено – двойно повече векторни регистри, които са с двойно по-голям размер.

Това са шестнадесет 256-битови регистри, които побират в себе си само осем 32-битови или четири 64-битови веществени числа и на пръв поглед това е по-малко от SSE. Само че SSE си остана и комбинацията от AVX плюс SSE показа много добри резултати. По това време програмите с поддръжката на векторните инструкции вече бяха много по-съвършени. Появиха се мощни компилатори, които даваха възможност за създаването на сложни приложения.

Всичко това доведе до сериозен ръст на изчислителната мощност. Така например процесорът Core i7-2600K с тактова честота 3,8 GHz теоретично може да осигури 230 GFLOPS (милиарда операции с плаваща запетая в секунда) при използване на AVX инструкциите. Съвсем не е зле като се има предвид, че SIMD модулът заема малко място на кристала.

Всъщност би могло да е наистина много добре, ако се работеше с тактова честота 3,8 GHz. Един от проблемите на AVX бе в това, че натоварването на чипа бе толкова голямо, че Intel даде възможност на своите процесори автоматично да намаляват своята тактова честота с около 20%, за да се намали консумацията и да не се допусне прегряването на процесора.

Едно от най-добрите подобрения в AVX е възможността за едновременната работа с три числа. Във всички версии на SSE процесорните инструкции операциите се извършват между две числа, а резултатът заменя едното от тях. Но при изпълнението на SIMD AVX инструкциите входните значения на числата си остават непроменени, а резултатът се получава в отделен регистър.

Следващите AVX2 инструкции излязоха през 2013 година едновременно с архитектурата Haswell за процесорите Intel Core от 4-то поколение. Това е значително обновяване, понеже бе въведена инструкцията FMA (Fused Multiply-Add) – слято умножение и събиране. Тази независима функция в AVX2 бе изключително необходима за приложенията, работещи с векторна и матрична математика, понеже дава възможност за едновременното извършване на две операции с помощта на само една инструкция – умножение и събиране, но и с поддръжката на скаларни операции.

Оказа се, че FMA на Intel е много по-различен от FMA на AMD – дотолкова, че са съвсем несъвместими. Причината е, че Intel FMA работи с три операнда, които могат да бъдат два два операнда с отделен резултат или три операнда, като резултатът замества единия от тях.

Версията AMD FMA може да извършва изчисленията между три числа, а резултатът е отделен – четвърти, без да бъде засегнато нито едното от тях. Това навремето създаде голямо объркване.

AVX-512

AVX2 тъкмо започна да се налага, а Intel започна да гради маниакални планове за новия комплект инструкции AVX-512. Първите процесори с тези нови инструкции бяха Xeon Phi 7200 – тромави многоядрени чипове, предназначени преди всичко за изграждане на суперкомпютри.

72-ядреният 288-нишков Knights Landing Xeon Phi

Но тук Intel силно се оплете. Част от AVX-512 инструкциите с име IFMA (Integer Fused Multiply Add) се поддържа само от архитектурите Cannon, Ice и Tiger Lake. В същото време процесорите с архитектури Cooper и Cascade Lake не поддържат тези инструкции въпреки че също са от сегмента на процесорите за сървъри и работни станции.

AMD реши въпроса съвсем кардинално. Компанията заяви, че няма да предлага поддръжката на AVX-512 и не възнамерява да я предлага. Според AMD, обработването на масивните векторни изчисления е прерогатив на графичните процесор. Nvidia е напълно съгласна с тази позиция, като малко по-късно двете компании предложиха съвместни решения именно от тази сфера.

Какво следва?

Стремителното развитие на графичните процесори недвусмислено показва, че CPU нямат нужда от твърде големи векторни модули и всъщност именно затова AMD се отказа да разработва по-нова версия на AVX2 – комплекта разширени процесорни инструкции, които използва в своите чипове още от 2015 година. Но AMD има собствени видеокарти с фирмените графични процесори на компанията, в които AMD разгръща своя потенциал във векторните изчисления. Intel от своя страна се стреми да внедри AVX-512 инструкциите в колкото се може повече свои продукти. Да не забравяме, че Intel също започна да произвежда свои собствени GPU, но засега значително изостава от AMD и Nvidia.

Дали ще има AVX-1024? Едва ли. По-скоро Intel ще разшири AVX-512 с нови инструкции, а чистата SIMD производителност ще трябва да се поеме от новите графични процесори с архитектура Xe.


Коментирайте статията в нашите Форуми. За да научите първи най-важното, харесайте страницата ни във Facebook, и ни последвайте в Telegram и Viber или изтеглете приложението на Kaldata.com за Android, iOS и Huawei!

Абонирай се
Извести ме за
guest

2 Коментара
стари
нови оценка
Отзиви
Всички коментари

Нови ревюта

Подобни новини