39
1 ОПТИМИЗУЈУЋИ КОМПАЈЛЕР Структура компајлера Предњи део, до међукода

P9.2 Optimizujuci kompajler, prednji deo · 2020. 6. 28. · 4 masx фамилија ДСП-ова (у примерима masc) Намењен за извршавање програма

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

  • 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 је целобројна константа