Паралелизам на ниво на инструкции и негова употреба
TRANSCRIPT
Паралелизам на ниво на инструкции и
негова употреба
Ана Стефановска
Дамјан Николовски
Содржина
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
Развој на паралелизмот на ниво на инструкции