P9.2 Optimizujuci kompajler, prednji deo · 2020. 6. 28. · 4 masx фамилија ДСП-ова...
Transcript of P9.2 Optimizujuci kompajler, prednji deo · 2020. 6. 28. · 4 masx фамилија ДСП-ова...
-
1
ОПТИМИЗУЈУЋИ КОМПАЈЛЕР
Структура компајлера
Предњи део, до међукода
-
Важна својства одредишне архитектуре
Подржане операције
Регистри и меморија (Ресурси - операнди)
Проточна структура
Организација меморије
Харвард архитектура
Хардверске петље
2
-
3
МОДУЛИ КОМПАЈЛЕРА:
Prevođenje u kanonički
oblik
Preprocesor Leksička
analiza Sintaksna
analiza
Prevođenje u međukod
Izbor instrukcija
Mašinski zavisna
optimizacija
Izvo
rni
pro
gra
m
Pre
pro
cesi
ran
p
rog
ram
Niz
to
ken
a
Ab
stra
ktna
si
nta
ksa
Sta
blo
m
eđu
koda
Sta
blo
m
eđu
koda
Pse
ud
oa
sem
ble
r
Pse
ud
oa
sem
ble
r
Analiza toka
upravljanja
Gra
f t
oka
Analiza toka
podataka
Gra
f s
met
nji
Okvir
Dodela resursa
Do
del
jen
i r
esu
rsi
Prilagođavanje koda protočnoj
strukturi
Pri
lagođ
en
kod
Generisanje koda
Pre
no
sivi
o
bje
ktn
i k
od
Povezivanje
Ma
šin
ski
jez
ik
Postavljanje okvira
-
4
MASx фамилија ДСП-ова(у примерима MASC)
Намењен за извршавање програма за обраду сигнала говора и музике (аудио).
На пример, коришћен је у првом комерцијално успешном MP3 плејеру 1998.
-
5
Основне техничке карактеристике (1/2)
Дужина бајта овог процесора је 20 бита.
У бајтове се смештају подаци у облику непокретног зареза.
4 регистра опште намене, 2 акумулатора
Процесор поседује један програмски адресни простор и два адресна простора података.
MASC је процесор са проточном обрадом са девет фаза.
4K RAM и 6K ROM интегрисаних са процесором у једном интегрисаном колу,
-
6
Основне техничке карактеристике (2/2)
три магистрале података: програмска (PD) и две за податке (D0 и D1),
маскирање и померање података приликом преноса из меморије у ALU и обрнуто,
учестаност процесорског такта од 40MHz при напајању од 4,75V-5,5V
учестаност процесорског такта је под програмском контролом.
-
Аритметика у непокретном зарезу
7
1.000 (-1)
0.011 (3/8)
11.101000
-
8
Фазе проточне обраде
Faza X
Faza Y
Faza Z
Faza A
Faza B
Faza C
Faza D
Faza E
Faza F
-
9
Пример инструкције:
fc0 = dc0 + ac1 * z10
Из инструкције се види да се податак из меморије узима у фази Z(ознака z10), податак из акумулатора 1 у наредној фази A (ознака ac1), податак из акумулатора 0 у фази D (ознака dc0), а резултат се уписује у акумулатор 0 у задњој фази F (ознака fc0).
-
10
Фазе обраде инструкција које следе инструкцију скока у тренутку скока:
Instrukcija Faza protočne obrade
Skok D
Prva iza skoka C
Druga iza skoka B
Treća iza skoka A
Četvrta iza skoka Z
Peta iza skoka Y
Šesta iza skoka X
-
11
Пример уметања NOP инструкција између инструкција постављања и коришћења (очитавања) акумулатора. Посматра се тренутак кад је инструкција очитавања акумулатора у фази Y:
Instrukcija Faza protočne obrade
CC1 = AC1 XOR AC1 C
NOP B
NOP A
NOP Z
ZR0(15) = YC1 Y
-
Харвард архитектура
12
Захвати
Декодирај
Изврши
Меморија
-
Харвард архитектура
13
Захвати
Декодирај
Изврши
Меморија
Захвати
Декодирај
Изврши
Захвати
Декодирај
Изврши
-
Харвард архитектура
14
Захвати
Декодирај
Изврши
Меморија
Захвати
Декодирај
Изврши
Захвати
Декодирај
Изврши
Меморијаза податке
c = a * b
-
Харвард архитектура
15
Захвати
Декодирај
Изврши
Меморија
Захвати
Декодирај
Изврши
Захвати
Декодирај
Изврши
Меморијаза податке1
Меморијаза податке 2
c = a * b
-
Физички подржане петље
16
Тело петље
Провера услова
Тело петље
Извши се n пута
Тело петље
Тело петље
Тело петље
n пута
Петље код којих је број итерација познат већ током превођења
Петље код којих је број итерација познат пре него што петља почне
-
17
КОМПАЈЛЕР ЗА ДИЈАЛЕКТ ЦЕА
Преводи изворни програмски код у тзв. „MAS-like C“ језику на машински језик.
„MAS-like C“ је подскуп стандардног ANSI Це језика, проширен аспектима који одражавају особине физичких компонената процесора MASx.
То су пре свега два нова уграђена типа променљивих, означених са dsp20 и dsp32.
-
18
Лексичка анализа (Скенер)
Писање лексичког анализатора (енгл. scanner) представља сложен и грешкама подложан задатак
па се из тог разлога користе алати за генерисање лексичког анализатора.
Један од најчешће коришћених генератора је flex (енгл. fast lexical analyzer) развијен на Беркли универзитету.
-
19
Синтаксни анализатор (Парсер)
Задужен за проверу редоследа терминалних симбола (тзв.. лексема) у изворном коду програма.
Формира стабло синтаксне анализе.
За добијање синтаксног анализатора се такође користи одговарајући генератор
нпр. byacc (енгл. yet another compiler compiler - yacc), који је такође развијен на Беркли универзитету.
Или новији Bison
-
20
Табела симбола
Са директним приступом појединим врстама (енгл. hash).
Реализована као Це++ класа CSymbolTable
Садржи информацију о свим симболима (променљиве, константе, функције, лабеле, типови података и структуре) из полазног програма.
-
21
Објекти у табели симбола
CSymTabEntry, то је основна класа из које се изводе све класе објеката табеле симбола,
CVarEntry, представља променљиву,
CArrayEntry, представља вектор,
CFuncEntry, преставља функцију,
CTypeEntry, представља тип података,
CLabelEntry, представља лабелу,
CConstEntry, представља константу,
CTypeDefEntry, представља дефиницију корисничког типа, и
CTypeEnumEntry, представља једну могућу вредност пребројивог типа (enum).
-
22
Стабло синтаксне анализе
Представља све исказе и изразеполазног програма.
Чворови су инстанце синтаксних класа, које се још називају и класама апстрактне синтаксе.
Постоје две главне групе класа апстрактне синтаксе, прва представља исказе, а друга изразе.
-
23
Класе апстрактне синтаксе које одговарају исказима Це језика
CStatement
CSwitch CCase CDefault CContinue CBreak CCompound CStatementList
CWhile CDoWhile CFor
CEmpty CLabel ClfElse CExprStatement CLoop CGoto CReturn
-
24
Класе апстрактне синтаксе које одговарају изразима Це језика
CBinary (from Binary)
Unary Binary Ternary
COperator
CUnary (from Unary)
CTernary (from Ternary)
CExpression
CVarExpr
CArrayAccess CFuncCall VarAccess
CLmul
CExprList
CEmptyExpr
CListExpr
CExprList
CFieldDotAccess CFieldPtrAccess
-
25
Класе апстрактне синтаксе које одговарају унарним изразима Це језика
CUnary
CDereference
CCast
CUnPlus
CPostDec
CComplement CExp CReference CUnMinus CNot
CPreDec CPostInc CPreInc COffset CAbs
CsizeOf_II
CsizeOf_I
-
26
бинарни изрази
CPlus
CTimes
CMul
CEq CAnd CEor COr CLogicAnd CLogicOr
CComutative
CEqual CNotEqual
CBinary
CNotComutative
CLsh CAsh CShiftRight CShiftLeft
CShif CAssignment
CAssign CTimeAssign
CDivAssign
CModAssign
CAddAssign
CSubAssign
CLShiftAssign
CRShiftAssign
CAndAssign
CEorAssign
COrAssign
CDiv CMod CMinus CRelation
CGreaterOrEqual
CLessOrEqual
CLessThen CGreaterThen
CComma
-
27
Одређивање типова
Примарни задатак овог модула је да одреди типове свих израза из полазног програма.
Секундарни задатак ове фазе компајлера је да у случају израза са константама, након што одреди тип израза, одреди и његову вредност.
-
28
Статичка провера семантике
Провера типова свих операнада у изразима,
провера броја параметара код позива функције (који мора бити једнак броју параметара у дефиницији функције).
и слично.
-
29
Анализа показивача (1/7)Два опречна захтева
Да би се избегла потреба за динамичким дереференцирањем показивача потребно је све променљиве на које показивач може показати сместити у исту меморијску зону података (било D0 или D1).
У циљу добијања оптималног кода за бинарне операције потребно је податке (операнде) смештати у различите меморијске зоне.
-
30
Анализа показивача (2/7)Ограничења смештања
Анализа показивача се обавља над стаблом синтаксне анализе.
Излаз је низ ограничења за смештање променљивих.
Смештање у исту (ознака =) или различите зоне (!=).
Ова ограничења се користе касније у фази доделе ресурса променљивама.
-
31
Анализа показивача (3/7)Анализа исказа доделе вредности
Анализирају се операције доделе вредности и бинарне операције.
За показивач са леве стране оператора доделе вредности утврђује се његов назив и ниво индирекције:
0 нема индирекције - у показивач се уписује адреса
1 један ниво индирекције - вредност с десне стране оператора доделе вредности се уписује на адресу на коју показује показивач, итд.
-
32
Анализа показивача (4/7)Анализа исказа доделе вредности
Затим се анализира десна страна операције доделе вредности ради одређивања назива променљиве чија адреса или вредност се додељује, као и нивоа индирекције.
За сваки овакав пар се генерише по једна релација „показује на”. Нпр. анализа исказа (у ком су p и q тзв. доминатори):
*p = *(q + 4 * i);
резултује релацијом (p,1)-(q,1)
-
33
Анализа показивача (5/7)Анализа исказа доделе вредности
За исказ p=q добија се релација (p,0)-(q,0)
и означава да показивач p може показивати на све променљиве на којеможе показивати q (p и q су тзв. алијаси)
За исказ p = &q добија се релација(p,0)-(q,-1)
где ниво индирекције -1 одговара операцији узимање адресе.
-
34
Анализа показивача (6/7)Анализа скупова променљивих
Након што се скупе све релације, утврђују се скупови променљивих на које показују поједини показивачи.
За сваки такав скуп се генеришу ограничења смештања у исту зону података.
Нпр. анализом релација: (p,0)-(a,-1) и(p,0)-(b,-1) закључује се да показивач p може да показује на променљиве a и b па се генерише ограничење a=b.
-
35
Анализа показивача (7/7)Анализа бинарних операција
Овај модул компајлера обавља и анализу бинарних операција и генерише ограничење смештања променљивих, које су операнди бинарних операција, у различите зоне података.
Нпр. као резултат анализе израза a + bгенерише се ограничење a!=b.
-
Физички подржане петље
Додатна ограничења које намеће архитектура:
Дужина тела петље (код MASC – 128)
Количина угњеждених петљи (код MASC – 1)
Минимални и максимални број итерација (код MASC-а мин. – 1, макс. – 1024)
Кашњење почетка петље
Преклапање краја угњеждених петљи36
-
37
Откривање петљи које могу бити физички подржане (1/3)
Задатак ове фазе је да открије петље из полазног програма које се могу подржати тзв. физичком петљом процесора (енгл. hardware loop).
Ради откривања петљи које се могу физички подржати анализирају се чворови исказа петљи (for, while, do_while) у стаблу синтаксне анализе.
-
38
Откривање петљи које могу бити физички подржане (2/3)
Услови:
познат је назив и почетна вредност индексне променљиве
познат је корак итерације
познат је број итерација
У коду нема skip и jump инструкција (breakи continue су дозвољене)
У коду нема инструкција физичке петље
У телу петље има мање од 128 инструкција
-
39
Откривање петљи које могу бити физички подржане (3/3)
Ради упрошћења анализе траже се само неки облици услова извршења итерације и корака итерације.
Услов извршења петље може имати облик:i < | = | > | != | [(-|+] j [)] [ + | - | * [(-|+] k [)] ]
i је индекс петље, j и k су целобројне променљиве или константе
Корак петље може имати облик:i[++ | --] ili [++ | --]i ili i [+= | -=] c ili i = i [+|-] c
i је индекс петље, а c је целобројна константа