Студенческий сайт КФУ - ex ТНУ » Учебный раздел » Учебные файлы »ПРОГРАММИРОВАНИЕ

Исследование оптимизаций, выполняемых компилятором

Тип: лабораторная работа
Категория: ПРОГРАММИРОВАНИЕ
Скачать
Купить
Исследование методов оптимизации программного кода на языке Си с помощью компилятора. Тестирование результатов утилитой optbench.c. Определение особенностей оптимизации компилятора на собственной программе. Удачные примеры быстроты и компактности кода.
Краткое сожержание материала:

Размещено на

3

Министерство образования и науки Российской Федерации

Санкт-Петербургский государственный политехнический университет

Факультет технической кибернетики

Кафедра «Информационная безопасность компьютерных систем»

ЛАБОРАТОРНАЯ РАБОТА № 1

Исследование оптимизаций, выполняемых компилятором

по дисциплине «Языки программирования»

Выполнил

студент гр. 2088/1

А.В. Лашевский

Старший

Преподаватель

П.В. Семьянов

Санкт-Петербург 2012

Содержание

1. Формулировка задания

2. Постановка задачи

3. Результаты выполненной работы

3.1. Компилятор

3.2 Ассемблерный листинг:

3.3 Примеры наиболее удачных и неудачных оптимизаций

3.4 Подбор опций компилятора

4. Выводы по проделанной работе

1. Формулировка задания

Исследовать методы оптимизации кода на языке Си с помощью одного из компиляторов. Использовать для тестирования утилиту optbench.c

Исследовать особенности оптимизации компилятора на собственной программе.

компилятор программный код утилита

2. Постановка задачи

Выбрать один из предлагаемых компиляторов:

Microsoft Visual Studio 2010

GCC

Intel C++ Compiler

Исследовать различные варианты оптимизаций для выбранного компилятора с помощью optbench.c, составить таблицу о проведенных улучшениях.

Привести примеры наиболее удачных и неудачных оптимизаций.

Подобрать опции компилятора для получения:

наиболее быстрого кода

наиболее компактного кода

3. Результаты выполненной работы

3.1 Компилятор

Для изучения оптимизации кода, написанного на языке С (optbench.c), был выбран компилятор GCC-4.4.3, работающий под операционной системой Linux Ubuntu v10.04.

3.2 Ассемблерный листинг

Чтобы получить ассемблерный код программы optbench.c, который находится в домашней директории, используем команду: gcc -S optbench.c

В результате в домашней папке был создан файл optbench.s, содержащий ассемблерный листинг неоптимизированной программы.

Для получения ассемблерного кода с оптимизациями использовалась команда: gcc -S -O2 optbench.c

Таблица 1. Оптимизации компилятора

Исходный текст на Си

Неоптимизированный код на ассемблере

Оптимизированный код на ассемблере

Результаты

Размножение констант и копий

j4 = 2;

if( i2 < j4 && i4 < j4 )

i2 = 2;

j4 = k5;

if( i2 < j4 && i4 < j4 )

i5 = 3;


pushl %ebp

movl %esp, %ebp

andl $-16, %esp

subl $48, %esp

movl $2, j4

movl i2, %edx

movl j4, %eax

cmpl %eax, %edx

jge .L2

movl i4, %edx

movl j4, %eax

cmpl %eax, %edx

jge .L2

movl $2, i2

.L2:

movl k5, %eax

movl %eax, j4

movl i2, %edx

movl j4, %eax

cmpl %eax, %edx

jge .L3

movl i4, %edx

movl j4, %eax

cmpl %eax, %edx

jge .L3

movl $3, i5

pushl %ebp

movl %esp, %ebp

andl $-16, %esp

subl $28, %esp

movl i2, %eax

cmpl $1, %eax

movl k5, %edx

movl %edx, j4

Переменные заменяются константными значениями.

Свертка констант

i3 = 1 + 2;

flt_1 = 2.4 + 6.3;

i2 = 5;

L3:

movl $3, i3

fldl .LC0

fstpl flt_1

movl $5, i2

fldl .LC0

fstpl flt_1

movl $3, i3

movl $5, i2

Производится свертка констант

(независимо от выбора оптимизации).

Алгебраические тождества и излишние операции загрузки/сохранения

j2 = i + 0;

k2 = i / 1;

i4 = i * 1;

i5 = i * 0;
<…>

flt_3 = 2.4 / 1.0;

flt_4 = 1.0 + 0.0000001;

flt_5 = flt_6 * 0.0;

flt_6 = flt_2 * flt_3;



movl i, %eax

movl %eax, j2

movl i, %eax

movl %eax, k2

movl i, %eax

movl %eax, i4

movl $0, i5

fldl .LC1

fstpl flt_3

fldl .LC2

fstpl flt_4

fldl flt_6

fldz

fmulp %st, %st(1)

fstpl flt_5

fldl flt_2

fldl flt_3

fmulp %st, %st(1)

fstpl flt_6

movl i, %eax

fldl .LC1

fstl flt_3

fldl .LC2

fstpl flt_4

fldz

fmull flt_6

movl %eax, j2

movl %eax, i4

fstpl flt_5

fmull flt_2

movl %eax, k2

fstpl flt_6

Исключено многократное помещение переменной i в регистр eax

(исключены излишние операции загрузки). Вместо арифметических операций выполняется простое присваивание.

Деление на ноль

i2 = i / 0;

flt_2 = flt_1 / 0.0;

-

-

Компилятор gcc версии 4.4.3 выдает ошибку деления на ноль и не генерирует объектный код.

Лишнее присваивание

k3 = 1;

k3 = 1;

movl $1, k3

movl $1, k3

movl $1, k3

Исключается повторное присваивание значения переменной k3.

Снижение мощности

k2 = 4 * j5;

for( i = 0; i <= 5; i++ )

ivector4[ i ] = i * 2;

movl j5, %eax

sall $2, %eax

movl %eax, k2

movl $0, i

jmp .L4

.L5:

movl i, %eax

movl i, %edx

addl %edx, %edx

movw %dx, ivector4(%eax,%eax)

movl i, %eax

addl $1, %eax

movl %eax, i

.L4:

movl i, %eax

cmpl $5, %eax

jle .L5

movl j5, %eax

movl $ivector4, %edx

sall $2, %eax

movl %eax, k2

xorl %eax, %eax

L24:

movw %ax, (%edx)

addl $2, %eax

addl $2, %edx

cmpw $12, %ax

jne .L24

Операция умножения заменяется...

Другие файлы:

Исследование системы контроля в компании "Яр"
Контроль как функция менеджмента. Исследования организации "Яр", задачи деятельности, характеристика оказываемых услуг и выполняемых функций. Предложе...

Автоматизация научных исследований в машиностроении и приборостроении
Сборник посвящен актуальным вопросам разработки новых методов автоматической , оптимизаций динамических систем на АВМ, анализу работы отдельных устрой...

Разработка резидентной программы для сохранения в файле копии текстового экрана дисплея
Исследование арифметических, логических и вспомогательных операций, выполняемых микропроцессором. Построение блок-схемы инициализации резидентной прог...

Разработка и исследование технологии геодезического обеспечения строительства и установки технологического оборудования ускорительно-накопительного комплекса (УНК)
Проведение исследований и разработка технологии, позволяющей качественно дополнить теоретическую основу производства и обработки высокоточных геодезич...

Airbus A320 Flight Crew Check List. Буклет справочно - технического материала о работах выполняемых в транзитных аэропортах. Ground Handling A319/320
Летным экипажам ВС AIRBUS A319/320 для информации о работах, выполняемых при наземном обслуживании( Ground Handling ) в транзитных аэропортах....