Анализ и оптимизация на софтуерни приложения

Подобни документи
Анализ и оптимизация на софтуерни приложения

Анализ и оптимизация на софтуерни приложения

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

Анализ и оптимизация на софтуерни приложения

Анализ и оптимизация на софтуерни приложения

Проф

МИНИСТЕРСТВО НА ОБРАЗОВАНИЕТО И НАУКАТА

4

Анализ и оптимизация на софтуерни приложения

Анализ и оптимизация на софтуерни приложения

Дефиниране на шаблон Шаблони (Templates) Любомир Чорбаджиев Технологическо училище Електронни системи Технически университет, София

Структура на програма в C - Част 2 - типове, функции

Динамична памет Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, спец. Софтуерно инженерство, 2016/17 г. 21 декември 2016 г. Тр

C++

Структура на програма в C - Част 7 - масиви, оператор за индексиране, sizeof оператор

Slide 1

Lush Green

Предефиниране на оператори. Копиращ конструктор. Оператор за присвояване Любомир Чорбаджиев Технологическо училище Електронни системи Технически униве

3. Синтактичен анализ. Граматика на учебен програмен език STUDENT. Извеждане на изречения от правилата на граматиката Цел на упражнението Упражнението

2. Лексически анализ. Основни понятия и алгоритъм на лексическия анализ. Програмна структура на лексическия анализатор Цел на упражнението Упражнениет

Компютърна Графика и Презентации - Графично моделиране

Лекции по Програмиране първа част I. Въведение в компютрите и програмирането КОМПЮТЪР = АПАРАТУРА + ПРОГРАМНО ОСИГУРЯВАНЕ Апаратна част Hardware(Харду

ПРОГРАМНО ОСИГУРЯВАНЕ НА КОМПЮТЪРА

Homework 3

Лабораторно упражнение 6 Тема: Оператори за цикли в езика C++. Реализиране на циклични алгоритми I. Цел на лабораторното упражнение Да се затвърдят зн

УЧЕБНА ПРОГРАМА ПО ВИЗУАЛНО ПРОГРАМИРАНЕ ЗА IV КЛАС (ВЪВЕЖДАНЕ НА ДИСЦИПЛИНАТА ПО ПРОЕКТ ИНОВАТИВНО УЧИЛИЩЕ ) КРАТКО ПРЕДСТАВЯНЕ НА УЧЕБНАТА ПРОГРАМА

Mathematica CalcCenter

УЧЕБНА ПРОГРАМА ПО ВИЗУАЛНО ПРОГРАМИРАНЕ ЗА III КЛАС (ВЪВЕЖДАНЕ НА ДИСЦИПЛИНАТА ПО ПРОЕКТ ИНОВАТИВНО УЧИЛИЩЕ ) КРАТКО ПРЕДСТАВЯНЕ НА УЧЕБНАТА ПРОГРАМА

-

Microsoft Word - KZ_TSG.doc

Microsoft PowerPoint - Ppt ppt [Read-Only]

При изпълнението на програма се извършват определени действия над данните, дефинирани в програмата.тези данни могат да бъдат постоянни ( константи ) и

В тази част, ще разгледаме аритметичните и логически операции, както, и включването им в изрази. В следващата таблица са дадени всички възможни операц

Виртуални функции

Програмен език C Пламен Танов Ненко Табаков Мартин Вачовски Технологично училище Електронни системи Технически университет София версия 0.5

Уважаеми колеги, Тази учебна програма е разработена от екипа на Obrazovanieto.info. Тя е свързана с използването на Дигитална Математика/IT Математика

УЧЕБНА ПРОГРАМА ПО ВЪВЕДЕНИЕ ВЪВ ВИЗУАЛНОТО ПРОГРАМИРАНЕ ЗА I КЛАС (ВЪВЕЖДАНЕ НА ДИСЦИПЛИНАТА ПО ПРОЕКТ ИНОВАТИВНО УЧИЛИЩЕ ) КРАТКО ПРЕДСТАВЯНЕ НА УЧЕ

Динамична памет. Конструктори и деструктори Любомир Чорбаджиев Технологическо училище Електронни системи Технически университет, София

Microsoft Word - Primer3_1.doc

<4D F736F F D20D0E0E7FFF1EDE5EDE8E520EFEE20F7EB2E EEF220C7CECF20F120C8E7F52EB EEF E31312E3138E3>

ЦЕНТЪР ПО ИНФОРМАТИКА И ТЕХНИЧЕСКИ НАУКИ УЧЕБНА ПРОГРАМА Утвърждавам: Декан: CS 206 ИЗКУСТВЕН ИНТЕЛЕКТ Приета: прот. 8 от г.; Актуализирана

ОСНОВНО УЧИЛИЩЕ ПРОФ. ПЕНЧО НИКОЛОВ РАЙКОВ гр. ТРЯВНА УТВЪРДИЛ Директор:... (Виолета Иванова) ГОДИШНО ТЕМАТИЧНО РАЗПРЕДЕЛЕНИЕ по учебния предмет КОМПЮ

Масиви и низове Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, спец. Софтуерно инженерство, 2016/17 г. 9 ноември 2016 г. Триф

Канонична форма на клас или 4 (голямата четворка) Трифон Трифонов Обектно-ориентирано програмиране, спец. Компютърни науки, 1 поток, спец. Софтуерно и

Регистрация на профил в Google и работа с облака Google Drive (Google Диск) I. Създаване на Google акаунт Първо зареждате или

НАУЧНИ ТРУДОВЕ НА РУСЕНСКИЯ УНИВЕРСИТЕТ , том 54, серия 3.2 Реализация на вградения механизъм за извод в междинната форма на SPIDER/CNP програма

Споделяне на анонимни данни с Lenovo Съдържание Споделяне на анонимни данни с Lenovo... 1 Harmony... 1 Lenovo Companion Lenovo Customer Engag

Указатели. Маисиви, указатели, параметри на функции Калин Георгиев 21 декември 2016 г. Калин Георгиев Увод в програмирането 21 декември 2016 г. 1 / 23

Препис:

Анализ и оптимизация на софтуерни приложения Александър Пенев Васил Василев (от гледна точка на производителността)

Съдържание 1. Видове транслатори 2.Фази по време на компилация 3. Оптимизационна фаза 2/20

Къде сме в момента? Решаван проблем Дизайн, алгоритми, данни Високо ниво Входна програма (сорс код) Компилатори, библиотеки Архитектура на системата Средно ниво Архитектура на набора инстр. Микро-архитектура Ниско ниво Схеми Слоеве при транслация 3/20

Компилатор или интерпретатор Компилатор транслира до машинен код лексик. анализ синтакт. анализ... генерация на код линкер loader сорс код Интерпретатор изпълнява сорс кода директно машинен код лексик. анализ синтакт. анализ Операторите в цикъл се анализират отново и отново сорс код интерпретация Хибриден компилатор интерпретира междинен код сорс код...компилатор... междинен код (напр. Common Intermediate Language (CIL)) ВИМ Сорс кода се транслира до код за виртуално-изчислителна машина (ВИМ) ВИМ интерпретира кода, симулирайки реална машина 4/20

Кратка история В миналото загадка, сега една от най-добре познатите области в информатиката 1957 Fortran първи компилатори (аритм. изрази, изречения, процедури) 1960 Algol първата явна дефиниция на език (граматики във форма на Бакус-Наур, блокова структура, рекурсии) 1970 Pascal потребителски дефинирани типове, виртуални машини 1985 C++ обектно-ориентиран, изключения, шаблони (templates) 1995 Java just-in-time компилация *Разглеждат се само императивни езици 5/20

Какво представлява компилаторът Език от високо ниво Език от ниско ниво Компилатор (compiler) Един (няколко) от езиците: C/C++/Objective-C C#/Java Pascal/Delphi... Може да бъде: Машинен код (x86 и др.) LLVM bitcode CIL Java Bytecode... 6/20

Защо компилаторите са важни? Защо трябва да ни интересуват компилаторите? Компилаторът е само инструмент... Компилаторът не е само инструмент Той има отговорността да каже на компютъра какво Вие искате да му кажете/направите Познаването на процеса на компилация помага на програмиста да съставя по-ефективни програми. Важно е да се знае какво може да направи компилатора за вас и какво не 7/20

Динамична структура на компилатор Поток от символи v a l = 1 0 * P I + i Лексикален анализ (скарниране) Поток от лексеми идент. val присв. = число 10 умн. * идент. PI плюс + идент. i вид стойност Синтактичен анализ (разпознаване) Синтактично дърво = val + * i 10 PI 8/20

Динамична структура на компилатор Синтактично дърво = val + Синтактично дърво, символна таблица,... * 10 PI Семантичен анализ = val + i f * PI i i 1 val float... 2 PI float... 3 i float...... 10 9/20

Динамична структура на компилатор (пр.) Синтактично дърво = val + i f * PI i 10 Маш. независима оптимизация Генерация на междинен код Триадресен код: t0 = inttofloat(10); t1 = t0 * PI t0 = t1 + i val = t0 Static Single Assignment: t0 = inttofloat(10); t1 = t0 * PI t2 = t1 + i val = t2 10/20

Динамична структура на компилатор (пр.) Маш. независима оптимизация Триадресен код: t1 = 10 * 3.14... val = t1 + i Static Single Assignment: t1 = 10 * 3.14... val = t1 + i Генерация на код Асемблер fild 10 fld 3.14... fmul st0, st1 fld [i] fadd st0, st1 fst [val] Машинно зависима оптимизация Асемблер fld 31.4... fld [i] fadd st0, st1 fst [val] 11/20

Оптимизационни фази Оптимизационните фази са: Машинно независими Трансформации върху някое от междинните представяния на входната програма, поддържано от компилатора Машинно зависими Трансформации върху някое от междинните представяния на изходната програма (генерирания код, приложими за конкретни архитектури) 12/20

Стъпки в оптимизационната фаза Анализ Намират се проблемни места в програмата или междинното представяне Идентификация След като анализът е показал, че има проблемно място, се идентифицира мястото в програмата или представянето и се определя вида трансформация, която да се предприеме Трансформация Трансформацията преобразува кода в най-често в по-ефективен, еквивалентен на предишния, код 13/20

Типове оптимизации Peephole optimizations Обикновено се извършват късно (в процеса на компилация), след като се генерира машинен код. Този тип оптимизации изследва няколко съседни инструкции и преценява дали може да ги замени с една инструкция или с по-малка последователност от инструкции. Локални оптимизации Те използват информацията само достъпна в тялото на целевата функция. Това намалява времената за анализ, но ограничава оптимизацията. Междупроцедурни оптмизации Тези оптимизации анализират целия код на програмата. Повечето събрана информация означава, че оптимизациите могат да бъдат по-ефективни в сравнение с локалните Оптимизация на цикли Тези оптимизации действат върху оператори за цикъл в езиците за програмиране (като for и while). Този тип може да постигне значително подобрение, защото найчесто циклите изразходват много време при изпълнение 14/20

Типични оптимизации Развиване на константи Опростяват се константните изрази като се извършват изчисленията по време на компилация Разпространение на константи Заместват се стойностите на известните константи в изразите Елиминиране на мъртъв код Премахва се кодът в програмата, който не може да се изпълни при никакви обстоятелства. Мъртвия код е два вика: недостижим код и мъртви присвоявания (записи) Елиминиране на общи подизрази Премахва общите подизрази като ги изважда като променлива и след това ги замества с тази променлива Развиване на цикли Редуцират се броя на итерациите в цикъла като се използват различни техники. Например копиране на тялото на цикъла няколко пъти и увеличаване на стъпката на цикъла Заделяне на регистри Използва максимално добре наличните регистри 15/20

Фактори, указващи влияние на оптимизациите Целевата машина Много от решенията за прилагане на оптимизации се взимат като се има предвид целевата машина. Понякога е възможно тези фактори на целевата машина да се параметризират. Така компилаторът може да се използва да прилага оптимизации, специфични за различни целеви машини. Архитектурата на целевата машина Размер и тип на кеша (32KB 16MB). Микроархитектурата на целевия процесор Зависи до определена степен от броя регистри, дали архитектурата е RISC или CISC, архитектурата и дължината на конвейера, броя на ALU и FPU. Намеренията за използване Зависи за какво се използва компилираната програма. Например тя може да се използва за дебъгиране, за общо ползване (от разнородни потребители на различни машини), за специализирано ползване, или от вградени системи (микроконтролери и др.) 16/20

Как да влияем на компилатора? Флагове Проблем: те са много (http://gcc.gnu.org/onlinedocs/gcc-4.1.1/gcc/optimize-options.html). Препроцесор Използвайки директиви като #if, #elseif, #ifdef, #pragma Intrinsics Функции в компилаторът на даден език. Компилаторът познава много добре тези функции и може да генерира по-добър код. 17/20

Как реагира компилаторът? Език от високо ниво Език от ниско ниво Компилатор (compiler) #include <math.h> int main() { return sin(2.1); }.LFB0:.cfi_startproc pushq %rbp.cfi_def_cfa_offset 16.cfi_offset 6, -16 movq %rsp, %rbp.cfi_def_cfa_register 6 movabsq $4606202501814641464, %rax movq %rax, -8(%rbp) movl $0, %eax popq %rbp.cfi_def_cfa 7, 8 ret.cfi_endproc 18/20

Как да изберем/подменим компилатора? Качество/Лекота на използване Компилира ли ми кода лесно, без да се налага много допълнителни настройки? Коректност Получавам ли същите резултати? Как да съм сигурен? Производителност Получавам ли същата производителност? Как да съм сигурен? Има ли нови възможности за повишаване на производителността? 19/20

Вие срещу компилатора Очаквате той винаги да прави нещата правилно Той очаква вие да правите правилните неща Той трябва да е вашият най-добър съюзник Не му се доверявайте преди да сте го тествали Използвайте повече от един компилатор 20/20