Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lr3.pdf
Скачиваний:
22
Добавлен:
01.04.2022
Размер:
1.55 Mб
Скачать

Часть 3

Создадим новую директорию, дадим ей название optimization.

Скомпилируем программу компилятором GCC с уровнями оптимизации - O0, -

O1, -O2, -O3, -Os, -Ofast, -Og под архитектуру процессора x86. Дадим файлу с

кодом имя main.c (рисунок 14). Для каждого из семи вариантов компиляции

измерим время работы программы при нескольких значениях N (N = 7500000000,

N = 6500000000 и N = 5500000000, при таких значениях время выполнения

программ достигает 179 секунд). Реализуем алгоритм вычисления числа π с

помощью разложения в ряд (ряд ГрегориЛейбница) по формуле Лейбница N

первых членов ряда:

Листинг реализации алгоритма (рисунок 15):

#include <stdio.h> #include <stdlib.h> #include <sys/times.h> #include <unistd.h>

int getSign(long long pow) { return pow % 2 == 0 ? 1 : - 1;

}

long double findPi(long long N) { long double result = 0.0;

while (N >= 0) {

result += (long double) (getSign(N) / (2.0 * N + 1.0)); N--;

}

return result * 4.0;

}

int main(int argc, char *argv[]) {

21

struct tms start, end;

long clocks_per_sec = sysconf(_SC_CLK_TCK); long clocks;

long long N = argc > 1 ? atoll(argv[1]) : 7500000000L; times(&start);

long double PI = findPi(N); times(&end);

clocks = end.tms_utime - start.tms_utime;

printf("Result: %Lf, N = %lld, time = %lf sec\n", PI, N, (double) clocks / clocks_per_sec);

return 0;

}

Список команд для компиляции: gcc -o lab2-O0.bin -O0 main.c

gcc -o lab2-O1.bin -O1 main.c gcc -o lab2-O2.bin -O2 main.c gcc -o lab2-O3.bin -O3 main.c gcc -o lab2-Os.bin -Os main.c

gcc -o lab2-Ofast.bin -Ofast main.c gcc -o lab2-Og.bin -Og main.c

Рисунок 14 – Создание директории и файла с кодом

22

Рисунок 15 – Содержание файла main.c

Скомпилируем разными уровнями оптимизации программу (рисунок 16).

Рисунок 16 – Компиляция с разными уровнями оптимизации

23

Рисунок 17 – Работа программы при N=7500000000

Рисунок 18 – Работа программы при N=6500000000

Рисунок 19 – Работа программы при N=5500000000

После чего составим диаграмму в Exсel по результатам работы программы с разными значениями и разными видами компиляции (Рисунок 20):

24

Соседние файлы в предмете Системное программирование