Паралелизам на ниво на инструкции и негова употреба

Preview:

Citation preview

Паралелизам на ниво на инструкции и

негова употреба

Ана Стефановска

Дамјан Николовски

Содржина

ILP – концепти и предизвици

Основни компајлерски техники за употреба на ILP

Намалување на цената на разгранувањето со предвидување

Надминување на податочните ризици со динамичко распоредување

Шпекулации базирани на хардверот

Употреба на ILP со различни методи

Напредни техники за достава на инструкции и шпекулација

Intel Pentium 4

Паралелизам на ниво на инструкции ...

(анг. instruction level parallelism - ILP)

… е потенцијално преклопување при извршувањето на инструкциите, со цел да

се подобрат перформансите на процесорот

паралелни инструкции

Пристапи за примена на ILP

хардверски базиран – паралелизмот се пронаоѓа и применува динамички, пр. кај серијата Intel Pentium

софтверски базиран – паралелизмот се пронаоѓа статички, за време на компајлирање, пр. кај Intel Itanium

Концепт на цевки (анг. pipelining)

Во идеален случај

длабочина на цевката________________________идеален CPI + CPI со застој

забрзување со концептот

на цевки=

– CPI - cycles per instruction

Едноставен pipeline кај RISC

CPI кај процесор со концептот на цевки

CPI - cycles per instruction

Ideal pipeline CPI – мерка за максималните перформанси кои може да се постигнат со имплементацијата

Ризици кај концептот на цевки

Структурни ризици – хардверот не може да ја подржи дадената комбинација од инструкции

Податочни ризици – инструкцијата зависи од резултатите од претходна инструкција која што сеуште е во цевката

Контролни ризици – предизвикани од доцнењето помеѓу земањето на инструкцијата и одлуките за промена на текот на програмата (разгранувања, скокови, враќања назад)

предизвикуваат застој во цевката

Податочна зависност

(Вистинска) податочна зависност

(анг. true data dependence)

Називна зависност

(анг. name dependence)

Контролна зависност

(анг. control dependence)

Податочна зависност

i1: r3 ← (r1) op (r2)

i2: r5 ← (r3) op (r4) //директно зависи од i1

i3: r6 ← (r5) op (r4) //индиректно зависи од i1

Резултира во RAW (Read After Write)

ризик при употреба на концептот на цевки

Називна зависност

Антизависност

i1: r3 ← (r1) op (r2)

i2: r1 ← (r4) op (r5)

резултира во WAR (Write After Read) ризик

Излезна зависност

i1: r3 ← (r1) op (r2)

i2: r3 ← (r6) op (r7)

резултира во WAW (Write After Write) ризик

Контролна зависност

if p1 {

S1; // S1 e контролно зависна од p1, но не и од p2

};

if p2 {

S2; // S2 e контролно зависна од p2, но не и од p1

};

Контролната зависност се зачувува со имплементирање на детекција за контролни ризици – предизвикува контролни застои

Содржина

ILP – концепти и предизвици

Основни компајлерски техники за употреба на ILP

Намалување на цената на разгранувањето со предвидување

Надминување на податочните ризици со динамичко распоредување

Шпекулации базирани на хардверот

Употреба на ILP со различни методи

Напредни техники за достава на инструкции и шпекулација

Intel Pentium 4

Основни распоредувања кај концептот на цевки

Наоѓање секвенци на заемно независни инструкции кои паралелно ќе се извршуваат

Зависната е оддалечена од изворната инструкција за онолку колкава што е латентноста на цевководот за изворната инструкција

Основни распоредувања кај концептот на цевки

for (i=1000; i>0; i=i–1)x[i] = x[i] + s; //секоја итерација е независна

Преведено во асемблер:

Основни распоредувања кај концептот на цевки

Потребни циклуси за извршување на една итерација

Со прераспоредување на кодот добиваме

Одмотување на јамки

Зголемување на бројот на извршени операции во однос на инструкциите за гранење и overhead-от

o Од 7 циклуси, 3 операции и 4 overhead

Се прави копија на телото од јамката неколку пати, со што се елиминираат гранењата

Подобрено распоредување

Операциите од различни итерации се извршуваат паралелно

for (i=1000; i>0; i=i–1) for (i=1000; i>0; i=i–4)x[i] = x[i] + s; { x[i] = x[i] + s;

x[i-1] = x[i-1] + s;x[i-2] = x[i-2] + s;x[i-3] = x[i-3] + s; }

Одмотување на јамки

На конкретниот пример:

• Елиминирани 3 гранења и декременти• Без оптимизации, секоја последователна операција е зависна• Потребни се 27 циклуси

•Со оптимално распоредување потребни се 14 циклуси (3,5 циклуси по итерација)

Одмотување на јамки и оптимално распоредување

Определување на зависностите во кодот

Наоѓање секвенци на независни инструкции

Користење на различни регистри за избегнување на неправилности при користење на исти регистри за различни пресметки

Избегнување/елиминација на што е можно повеќе гранења и тестови поврзани со нив

Оптимална прераспределба на кодот

Ограничувања при одмотување на јамки

Три фактори кои влијаат на придобивките од одмотувањето на јамки и прераспоредувањето:

Намалување на overhead со секое одмотување на јамка

Значителното растење на кодот (зголемена рата на промашувања во кеш)

Недостаток на регистри при агресивно распоредување и одмотување на јамки

o Појава на т.н. „регистерски притисок“

Содржина

ILP – концепти и предизвици

Основни компајлерски техники за употреба на ILP

Намалување на цената на разгранувањето со предвидување

Надминување на податочните ризици со динамичко распоредување

Шпекулации базирани на хардверот

Употреба на ILP со различни методи

Напредни техники за достава на инструкции и шпекулација

Intel Pentium 4

Предвидување на гранењето

Гранењето значително ги намалува перформансите на „цевководот“

Решение за намалување на загубите е предвидување на нивното однесување

Два типа на предвидување:

o Статичко, при компајлирање

o Динамичко, при извршување

Статичко предвидување

Погодно за избегнување на податочни ризици

Наједноставна техника: претпоставка дека гранката е земена

o Ратата на погрешни предвидувања за SPEC програми изнесува 34%

Попрецизна техника е предвидување на гранењето врз основа на т.н. “profile information” добиени од претходни претходни извршувања на кодот

Статичко предвидување

Ефикасноста на шемите за предвидување зависи од:

Прецизноста на самата шема

Фрекфентноста на појава на условни гранења (кај SPEC се движи од 3% до 24%)

Динамичко предвидување

Branch- prediction buffer

o Мал мемориски простор индексиран од помалку значајните битови од адресата на инструкцијата за гранење

o Содржи бит кој покажува дали гранката била извршена

o Во случај на промашување битот се инвертира

o Конфликт при различни адреси со исти помалку значајни битови

Динамичко предвидување

N-битна шема за предвидување

Бројач со вредности од 0 до 2n-1

При надминување на половина од максималната вредност се менува предвидувањето

11 10

0001

Корелирани предвидувачи

Дво- нивовски предвидувачи

При предвидувањата, в предвид се зема и однесувањето на останатите гранки

Корелирани предвидувачи

(m,n) предвидувач

Се следи однесувањето на последните mгранки

Се избира од 2m предвидувачи

Секој предвидувач е n-битен и се однесува на само една гранка

Турнирски предвидувачи

Користење на повеќе предвидувачи

Еден базиран на глобални информации

Еден базиран на локални информации само за тековната гранка

Комбинирање со селектор

Во пракса се користи 2- битен бројач за секоја гранка

Избор на поефикасниот од двата предвидувачи по гранка

Потребни се две промашувања за промена на предвидувачот

Споредба на перформанси кај различни предвидувачи

Содржина

ILP – концепти и предизвици

Основни компајлерски техники за употреба на ILP

Намалување на цената на разгранувањето со предвидување

Надминување на податочните ризици со динамичко распоредување

Шпекулации базирани на хардверот

Употреба на ILP со различни методи

Напредни техники за достава на инструкции и шпекулација

Intel Pentium 4

Поделба на инструкциското декодирање

Издавање на инструкција (анг. instruction issue) – декодирање, проверка за структурни ризици

Читање на операнди – чекај да нема податочни ризици, прочитај ги операндите

Статичко распоредување (in-order issue, in-order execution)

Не постои податочна зависност =>земената инструкција се извршува

Постои податочна зависност =>се прави застој почнувајќи од првата инструкција со податочна зависност

Што доколку го имаме овој код?

i1: DIV.D F0,F2,F4

i2: ADD.D F10,F0,F8

i3: SUB.D F12,F8,F14

Динамичко распоредување(in-order issue, out-of-order execution)

хардверот го прераспределуваинструкциите, при што се грижи за текот

на податоците и однесувањето на исклучоците

Проблеми кај динамичкото распоредување

Појава на WAR и WAW ризици

i1: DIV.D F0,F2,F4

i2: ADD.D F6,F0,F8

i3: SUB.D F8,F10,F14

i4: MUL.D F6,F10,F8

Решение: преименување на регистри

Справување со исклучоците

Решение: непрецизни исклучоци

Потреба од повеќе функционални единици

Непрецизни исклучоци

- се има извршено инструкција, која во програмскиот редослед се наоѓа после инструкцијата која предизвикува исклучок

- се немаат извршено инструкции кои во програмскиот редослед се пред инструкцијата која предизвикува исклучок

Пристап на Томасуло

Следење кога операндите потребни за инструкциите ќе бидат достапни

– минимизација на RAW ризиците

Воведување на преименување на регистрите

– минимизација на WAR и WAW ризиците

DIV.D F0,F2,F4 DIV.D F0,F2,F4

ADD.D F6,F0,F8 ADD.D S,F0,F8

S.D F6,0(R1) => S.D S,0(R1)

SUB.D F8,F10,F14 SUB.D T,F10,F14

MUL.D F6,F10,F8 MUL.D F6,F10,F8

Резервирачки станици

• F&D Unit = Fetch & Decode Unit

• EUs and RF = Execution Units and Register File

Основна структура на MIPS единица за броеви со подвижна запирка која го користи алгоритамот на Томасуло

Содржина

ILP – концепти и предизвици

Основни компајлерски техники за употреба на ILP

Намалување на цената на разгранувањето со предвидување

Надминување на податочните ризици со динамичко распоредување

Шпекулации базирани на хардверот

Употреба на ILP со различни методи

Напредни техники за достава на инструкции и шпекулација

Intel Pentium 4

Потребата за хардверски базирани шпекулации

Одржувањето на контролните зависности станува голем товар

Предвидувањето на гранењето не е доволно

Процесорите извршуваат и по неколку инструкции на такт

За максимални перформанси потребна е претпоставка (шпекулација) за исходот на гранењето

Извршување на програмата како претпоставката да е точна

Хардверски базирани шпекулации

Техника базирана на 3 клучни идеи:

Динамичко предвидување на гранење

Шпекулација за да се овозможи извршување на одбраните инструкции пред да бидат разрешени контролните зависности

Динамичко распоредување

Одделување на бајпасирањето на резултатите од комплетирањето на инструкцијата

Инструкциите се извршуваат без редослед, но комплетираат (commit) редоследно

Хардвер потребен за поддршка на шпекулации

Reorder buffer (ROB)

Дополнителни регистри за сместување на резултати од шпекулирани инструкции

Секој ред во баферот содржи 4 полиња:

Тип на инструкција

Дестинација

Вредност

Ready

Ги содржи функционалностите на store buffer- от

Хардверски базирани шпекулации

Извршување на инструкција кај концептот на хардверски

базирано шпекулирање1. Издавање - Се зема инструкција од редот на

инструкции и доколку има слободни резервацискистаници и ROB се издава.

2. Извршување - доколку сите операнди се достапниинструкцијата се извршува.

3. Запишување – резултатот заедно со тагот по CDB сепраќа до соодветниот ROB и резервациски станицидоколку е потребно.

4. Комплетирање – три различни секвенци на акции возависност од исходот:

1. Нормално завршување: резултатот се запишува восоодветен регистер, а содржината во ROB се чисти

2. Комплетирање на store наредба: исто како при нормалнозавршување, но се запишува во меморија

3. Погрешно гранење: се чисти содржината на записот во ROBи се започнува со одново извршување, според вистинскотогранење

Содржина

ILP – концепти и предизвици

Основни компајлерски техники за употреба на ILP

Намалување на цената на разгранувањето со предвидување

Надминување на податочните ризици со динамичко распоредување

Шпекулации базирани на хардверот

Употреба на ILP со различни методи

Напредни техники за достава на инструкции и шпекулација

Intel Pentium 4

Процесори со повеќратно издавање на инструкции(анг. multiple-issue processors)

Процесори со многу долг инструкциски збор(анг. very long instruction word - VLIW)

Статички распореден суперскаларен процесор

Динамички распореден суперскаларен процесор

Основен пристап со многу долг инструкциски збор

Употребува повеќе независни функционални единици

Повеќе операции ги пакува во една долга инструкција

Еднонасочен код → техники за локално распоредување

Код со гранење → техники за глобално распоредување

Основен пристап со многу долг инструкциски збор

Технички проблеми

Пораст на големината на кодот

Ограничувања при lockstep операции

Логистички проблеми

Некомпатибилност на бинарниот код на различни имплементации

Динамичко распоредување, повеќекратно издавање,

шпекулација

Ратата на издавање е две инструкции за време на такт циклус

Проширување на алгоритамот на Томасуло

Одвоени единици цели броеви и броеви со подвижна запирка – секоја може да иницира операција при секој такт циклус

Код: R1[i]=R1[i]+1

Loop: LD R2,0(R1) ; do{ R2 = R1[i];DADDIU R2,R2,#1 ; R2++;SD R2,0(R1) ; R1[i] = R2;DADDIU R1,R1,#8 ; i++; }BNE R2,R3,LOOP ; while(R2<R3)

Без шпекулација

Со шпекулација

Содржина

ILP – концепти и предизвици

Основни компајлерски техники за употреба на ILP

Намалување на цената на разгранувањето со предвидување

Надминување на податочните ризици со динамичко распоредување

Шпекулации базирани на хардверот

Употреба на ILP со различни методи

Напредни техники за достава на инструкции и шпекулација

Intel Pentium 4

Потребата за напредните техники за достава на

инструкциите

Процесорите со повеќекратно издавање на инструкции можат да издаваат од 4 до 8 инструкции по такт циклус

Потребно е зголемување на протокот на достава на инструкции, за да се искористат перформансите

Ефикасно разрешување на гранењето е клучно за поставената цел

Branch- target buffers

Кеш кој го предвидува гранењето и ја чува адресата на која се наоѓа следната предвидена инструкција

Branch- target buffers

Return address predictors

Мал бафер кој ги чува адресите каде што треба да се врати текот на програмата

Функционира како пласт

Поголема длабочина на пласт- попрецизно предвидување

Интегрирана единица за достава на инструкции

Автономна единица чија задача е да го храни цевководот со инструкции

Последен тренд, со цел да се задоволат потребите на процесорите со повеќекратно издавање

Интегрира повеќе функции:

Предвидување на гранење

Prefetch на инструкции

Пристап до мемориски адреси на инструкциите

Баферирање

Со зголемените перформанси на процесорите оваа единица станува тесно грло

Содржина

ILP – концепти и предизвици

Основни компајлерски техники за употреба на ILP

Намалување на цената на разгранувањето со предвидување

Надминување на податочните ризици со динамичко распоредување

Шпекулации базирани на хардверот

Употреба на ILP со различни методи

Напредни техники за достава на инструкции и шпекулација

Intel Pentium 4

Pentium 4

Развој на паралелизмот на ниво на инструкции

Recommended