- Промокоды
- Тир-лист персонажей
- Баннеры 1.2
- Тир-лист банбу
- Инспектор Мяучело
- Памятные монеты АИК
- Пропавшие мини-грузовики
- Все скрытые квесты
- Все достижения
- Все арты c6 персонажей
- Как повысить уровень доверия агентов?
- Клякса: как приручить?
- Видеопрокат и все видеокассеты
- Отдыхающая домохозяйка: фильм
- Ностальгирующая девушка: фильм
- Влюбленная девушка: фильм
- Квест Клуб загадочников 1 и 2
- Квест Отмотай назад, детектив
- Квест Заметание секретов
- Квест Пропавшая картина
- Квест Бескрайняя бездна
- Квест Пророчество
- Квест Лимб банбу
- Все гайды
- Испытания Мерлина
- Хранилища сокровищ
- Луны мистера Муна
- Хитроумные ключи
- Головоломки Иродианы
- Квест «Призрак нашей любви»
- Квест «Колодец, колодец»
- Квест «Сокровища из проклятой гробницы»
- Квест «Гиппогриф вам укажет путь»
- Квест «Словно по звонку»
- Непростительные заклинания
- Все легендарные сундуки
- Все животные и твари
- Все метлы
- Все концовки
- Все гайды
- Башня Рамазита и колдовской погреб
- Вызов Шар — все испытания и Копье Ночи
- Логово Ансура — все чертоги и дракон
- Литейная стальной стражи — как спасти гондийцев
- Обыскать подвал — как открыть Некромантию Тхая
- Разрушенная башня — как запустить лифт
- Адамантиновая кузня — все формы и мифриловая руда
- Завершить оружейный шедевр — кора суссура
- Тетушка Этель — как спасти Майрину
- Яйцо гитьянки — как украсть и можно ли вырастить
- Мистический Падальщик — где найти слугу
- Найти клоуна Каплю — все части тела
- Как победить Геррингот Торм?
- Где найти Кровь Латандера?
- Где найти Песню Ночи?
- Все гайды
- Промокоды Honkai Star Rail
- Все сундуки Золотого мига в Honkai Star Rail
- Похвала высокой морали в Honkai Star Rail
- Все сундуки в Лофу Сяньчжоу из Honkai Star Rail
- Первооткрыватель в Honkai Star Rail
- Все сундуки Сада безмятежности в Honkai Star Rail
- Беглецы в Доме кандалов
- Заказ прокси
- Дом кандалов: сундуки и робоптахи
- Гексанексус: Remake в ХСР
Работа с компилятором GCC в командной строке.Урок 1.
Цель
Приобрести практические навыки работы с компилятором GCC командной строки. Исследовать различные опции компилятора для оптимизации программы. Определить их влияние на скорость работы программы и точность вычислений.
Исходные данные
• Количество итераций: N=100000, 1000000, 10000000, 100000000
• Опции компилятора: -Е, -S, -c, -o, -shared, -O0, -O1, -O2, -O3, -ffast-math, -msse, -mfpmath=sse, -mfpmath=387
Используемые строки для компиляции
• Создание файла с исходным текстом на языке С, после прохождения стадии обработки препроцессором: GCC –E app.c –o app.i
• Создание файла с исходным текстом на языке ASSEMBLER: GCC –S app.c –o app.s
• Создание объектного файла: GCC –o app.c –o app.o
• Создание библиотеки: GCC -shared app.c –o app.dll –lm
• Cоздание исполнимого файла с различными опциями оптимищации:
GCC –s –O0 app.c –o app.exe –lm
GCC –s –O2 app.c –o app.exe –lm
GCC –s –O3 –mfpmath=387 app.c –o app.exe –lm
GCC –s –O3 –ffast-math app.c –o app.exe –lm
GCC –s –O3 –ffast-math –mfpmath=sse -msse app.c –o app.exe –lm
Фрагменты содержимого файлов app.i
Фрагменты содержимого файлов app.s
Измерение времени исполнения программы
Точность аппроксимации числа PI
Строка компиляции программы: GCC –s –O2 app.c –o app.exe –lm
Вывод:
В результате проведенных опытов можно понять, что программа с опцией O0 работает в разы медленнее, чем программа с опцией O3. А вот с точность при вычислении числа PI всё гораздо сложнее. Итерация равная 1000000 имеет более точный ответ при вычислении числа PI, так ещё самую малую разность в расчетах. В отличие от итерации с 100000000 , которая имеет самый долгий алгоритм работы, да ещё и погрешность в вычислениях не самая маленькая.
Исходный текст программы
Файл app.c
#include
#include
#include
#include
#define N 10000000
int main(int argc, char **argv)
{
const clock_t t0 = clock();
int n=0;
int i;
for(i=0; i
{
const float r=(float)rand() / (float) RAND_MAX;
const float x=(float)rand() / (float) RAND_MAX;
const float y=(float)rand() / (float) RAND_MAX;
if(sqrtf(powf(x*r, 2.0f) + powf(y*r, 2.0f)) <=r) n++;
}
const float pi = (float) n / (float) N*4.0f;
const float err = fabsf(pi - M_PI);
const clock_t t1 = clock();
const float t = (float)(t1 - t0) / (float)CLOCKS_PER_SEC;
printf("result: %f, delta: %f, iterations: %d, time: %f sec.\n", pi, err, N, t);
getchar(); // Для остановки приложение при запуске через проводник
return EXIT_SUCCESS;
}