Вишенитна обрада

Из Википедије, слободне енциклопедије

Рачунарски процесори са вишенитном обрадом имају хардверску подршку за ефикасно извршавање вишеструких нити. Они се разликују од вишепроцесорских система (као што су вишејезгарни процесори) у томе што нити морају да деле ресурсе једног језгра: рачунарске јединице, кеш и бафер асоцијативног превођења (TLB). Док вишепроцесорски системи укључују потпуно вишеструке процесне јединице, вишенитна обрада циља на повећање искоришћења једног језгра коришћењем паралелизма на нивоу нити и инструкција. Пошто се те технике међусобно допуњују, често се комбинују у системима са вишеструким вишенитним процесорима и код процесора са вишеструким вишенитним језгрима.

Преглед[уреди]

Парадигма вишенитне обраде је постала популарнија од како је напредак на пољу паралелизма на нивоу инструкције достигао врхунац крајем 1990их. Ово је омогућило да се концепт проточног рачунарства врати на сцену из специјализованог поља обраде транскација:

  • Иако је јако тешко додатно убрзати једну нит или један програм, већина рачунарских система у ствари обавља више ствари истовремено међу гомилом нити и програма.
  • Технике које би омогућиле убрзање пропусне моћи целог система са свим задацима би направиле значајно убрзање.

Две главне технике пропусног рачунарства су вишеструки процесори и вишенитна обрада.

Предности[уреди]

Неке од предности су:

  • Ако нит направи пуно промашаја кеша, друге нити могу наставити, користећи предност неискоришћених рачунарских ресурса, што може довести до бржег извршавања, с обзиром да би ти ресурси били неискоришћени да се само једна нит извршава.
  • Ако нит не може искористити све рачунарске ресурсе процесора (јер инструкције зависе од међусобних резултата), покретање друге нити их може искористити.
  • Ако неколико нити обрађује исти скуп података, оне могу делити кеш, што доводи то боље искоришћености кеша или синхронизације њихових вредности.

Мане[уреди]

Неке од критика вишенитне обраде су:

  • Вишеструке нити могу међусобно сметати једна другој при дељењу хардвера као што су кешеви или бафер асоцијативног превођења (TLBs).
  • Извршно време једне нити није побољшано већ може бити смањено, чак и када се само једна нит извршава. Ово је због ниже фреквенције и/или додатних фаза проточне обраде које су неопходне да се реализује хардвер смене нити.
  • Хардверска подршка за вишенитну обраду је видљивија софтверу, стога захтева захтева више промена на нивоу програма и оперативног система, за разлику од вишепроцесорских система.

Зато добитак доста варира; Intel тврди до 30 процената побољшања са својом Hyper-threading технологијом,[1] док синтетички програм који само извршава петљу неоптимизованих зависних операција са покретним зарезом добија чак 100 процената побољшања када се извршава паралелно. С друге стране, ручно оптимизовани асемблерски програми који користе MMX или Altivec проширења и изводе предохват података (као код видео енкодера), заобилазе промашаје у кешу и неискоришћеност ресурса. Такви програми стога немају корист од хардверске вишенитне обраде и могу добити и лошије перформансе услед дељења ресурса.

Хардверске технике за подршку вишенитне обраде често иду у пару са софтверским техникама за обраду више задатака истовремено код рачунарских програма.

  • Распоређивање нити је такође велики проблем код вишенитне обраде.

Типови вишенитне обраде[уреди]

Блоковска вишенитна обрада[уреди]

Концепт[уреди]

Најједноставнији тип вишенитне обраде се дешава када једна нит ради све док не буде блокирана од стране догађаја који би иначе створио дуготрајно одуговлачење. То одуговлачење би могао бити промашај у кешу који мора да приступи меморији ван чипа, што може потрошити стотине процесорских циклуса док се податак не врати. Уместо да чека да се одуговлачење разреши, вишенитни процесор би ставио другу нит на извршење која је спремна. Тек када подаци за претходну нит стигну, она ће бити враћена на листу спремних нити.

На пример:

  1. Циклус i : инструкција j из нити A је издата
  2. Циклус i+1: инструкција j+1 из нити A је издата
  3. Циклус i+2: инструкција j+2 из нити A је издата, load инструкција прави промашај у кешу
  4. Циклус i+3: позива се распоређивач нити, пребацује на нит B
  5. Циклус i+4: инструкција k из нити B је издата
  6. Циклус i+5: инструкција k+1 из нити B је издата

Концептуално, то је слично кооперативној обради вишеструких задатака код оперативних система у реалном времену код којих задаци сами одустају од извршења када морају да чекају на неки догађај.

Терминологија[уреди]

Овај тип вишенитне обраде је познат као блоковска или кооперативна или груба вишенитна обрада.

Цена хардвера[уреди]

Циљ хардверске подршке вишенитне обраде је да омогући брзу смену између блокираних нити и оних које су спремне за извршење. Да би се ово постигло, хардверска цена је у дуплирању програмски видљивих регистара као и неких процесорских контролних регистара (као што је програмски бројач). Смена са једне нити на другу значи да хардвер прелази са коришћења једног скупа регистара на други.

Предности таквог додатног хардвера су:

  • Смена нити се може одрадити у једном процесорском циклусу.
  • Свакој нити се чини да се сама извршава на процесору и да не дели никакве хардверске ресурсе са било којом другом нити[dubious ]. Ово минимизира количину софтверских промена неопходних на нивоу апликације и оперативног система у сврху подршке вишенитне обраде.

Ради ефикасне смене између активних нити, свака активна нит мора имати свој сопствени скуп регистара. На пример, за брзу смену између две нити, регистарски хардвер мора бити инстанциран двапут.

Примери[уреди]

  • Пуно породица микроконтролера и уграђених процесора имају вишеструке групе регистара у циљу брзе смене контекста у случају прекида. Такве шеме се могу сматрати типом блоковске вишенитне обраде између корисничке програмске нити и нити прекида.[тражи се извор од 01. 2014.]

Испреплетана вишенитна обрада[уреди]

  1. Циклус i+1: инструкција из нити B је издата
  2. Циклус i+2: инструкција из нити C је издата

Сврха испреплетане вишенитне обраде је уклањање свих застоја унутар проточне обраде услед зависности података. С обзиром да је једна нит релативно независна од других, мања је вероватноћа да ће инструкцији из једне фазе проточне обраде требати резултат старије инструкције у проточној обради.

Концептуално, то је слично обради више истовремених задатака са сменом контекста код оперативних система. Може се направити аналогија да је делић времена дат свакој активној нити један процесорски циклус.

Терминологија[уреди]

Овај тип вишенитне обраде је прво зван цилиндрична обрада, код које коморе цилиндра представљају фазе проточне обраде и њене извршне нити. Испреплетана или прекидна или фина' или временска вишенитна обрада је модернија терминологија.

Цена хардвера[уреди]

Као додатак цени хардвера дискутованој код блоковске вишенитне обраде, испреплетана обрада носи и цену тога што свака фаза проточне обраде прати ID нити инструкције коју извршава. Такође, с обзиром да се више нити извршава истовремено, дељени ресурци као што су кешеви и TLBови морају бити већи да би се избегао конфлит између нити.

Истовремена вишенитна обрада[уреди]

Концепт[уреди]

Најнапреднији тип вишенитне обраде се односи на суперскаларне процесоре. Обичан суперскаларни процесор издаје вишеструке инструкције из једне нити у сваком циклусу процесора. Код истовремене вишенитне обраде (SMT), суперскаларни процесор може издати инструкције из вишеструких нити у сваком циклусу процесора. Препознајући да свака појединачна нит има ограничен ниво паралелизма на нивоу инструкције, овај тип вишенитне обраде покушава да искористи паралелизам на нивоу различитих нити ради смањења неискоришћених процесорских ресурса.

На пример:

  1. Циклус i : инструкције j и j+1 из нити A; инструкција k из нити B су све истовремено издате
  2. Циклус i+1: инструкција j+2 из нити A; инструкција k+1 из нити B; инструкција m из нити C су све истовремено издате
  3. Циклус i+2: инструкција j+3 из нити A; инструкцијаs m+1 и m+2 из нити C су све истовремено издате

Терминологија[уреди]

Да би се разликовали други типови вишенитне обраде од SMT-а, израз временска вишенитна обрада се користи да назначи када се инструкција из само једне нити може извршавати у једном тренутку.

Цена хардвера[уреди]

Као додатак цени хардвера дискутованој код испреплетане вишенитне обраде, SMT носи додатну цену тога што свака фаза проточне обраде прати ID нити сваке инструкције која се обрађује. И овог пута, дељени ресурци као што су кешеви и TLBови морају бити довољно велики за велики број активних нити које се обрађују.

Примери[уреди]

Специфичности имплементације[уреди]

Главно поље истраживања је распоређивач нити који мора брзо изабрати за извршавање између листе спремних нити као и да одржава листе спремних и заустављених нити. Важна подтема су различите шеме приоритета нити које распоређивач може користити. Распоређивач може бити у потпуности имплементиран у софтверу, потпуно у хардверу, као и у комбинацији хардвера/софтвера.

Друго поље истраживања је који тип догађаја би требало да изазове смену нити - промашај у кешу, међу-нитна комуникација, DMA завршетак, итд.

Ако се вишенитна шема подудара са свим софтверски видљивим стањима, укључује привилеговане контролне регистре, TLBове, итд, то омогућује да се виртуелна машина прави за сваку нит. Ово омогућује свакој нити да извршава свој сопствени оперативни систем на истом процесору. С друге стране, ако је само стање корисничког режима сачувано, мање харвера је потребно што омогућује да више нити буде активно истовремено за исту површину чипа/цену.

Такође видети[уреди]

Референце[уреди]