Для измерения времени нам понадобится следующая функция:
clock_t clock (void).
Эта функция не имеет входных параметров. Она просто сообщает нам, сколько тактов прошло с начала работы программы. Тип возвращаемого значения определён как
clock_t.
Мы должны задать вспомогательные переменные именно такого типа.
Чтобы пересчитать количество тактов в секунды, нужно разделить количество тактов на значение следующей константы:
CLOCKS_PER_SEC.
Чтобы использовать функцию clock, в начале программы нужно подключить библиотеку, указав заголовочный файл:
time. h.
Пример программы приводится на рис. 4.2.
Исходные данные для расчёта времени — целые числа. После деления может получиться дробное число. Чтобы найти результат в виде дробного числа, придётся в формуле переопределить тип переменных.
Зададим формат вывода на экран для дробного числа так, чтобы получить десять знаков после запятой:
%5.10f.
Рис. 4.2. Измеряем время выполнения
Задание. Составьте программу суммирования с определением времени работы.
Задание. Измените программу так, чтобы вводить количество единиц в командной строке при запуске программы.
Задание. Запустите составленную программу с разным значением параметра Nsи укажите в отчёте время выполнения.
Задание. Подберите количество прямоугольников так, чтобы время выполнения программы составляло от 10 до 20 секунд.
В предыдущем разделе мы запускали программу вручную. И результаты работы тоже записывали вручную. При большом количестве прогонов программы ручная работа становится неэффективной.
Чтобы выполнять рутинные действия в автоматическом режиме, мы будем использовать пакетный файл. Это текстовый файл с расширением *.BAT. В таком файле записаны команды операционной системы.
В простейшем варианте это будет несколько одинаковых строк с одной и той же командой запуска нашей программы. При выполнении пакетного файла операционная система запустит нашу программу.
Задание. Составьте пакетный файл для нескольких запусков программы.
Следующая проблема — это запись результатов в отчёт. Мы сформируем файл в формате CSV, то есть значения с разделителем:
Comma Separated Values.
В английском варианте разделитель полей — запятая, а разделитель целой и дробной частей — точка. Команда вывода на экран в языке Си тоже использует точку как десятичный разделитель. Нам остаётся организовать вывод полученных чисел в одну строчку через запятую — при каждом прогоне программы. Далее мы переходим на следующую строку.
Вот пример вывода результатов в одну строку:
printf (»%d,», S)
printf (»%d\n», Ns)
Чтобы формат вывода легче читался на экране, мы выводим каждое число по отдельности.
После нескольких прогонов мы получим несколько строк. Если вставлять результаты в отчёт вручную, придётся копировать через буфер обмена. Это опять долго и сложно.
Для полной автоматизации работы мы просто перенаправим вывод текста и значений вместо экрана в файл. Для перенаправления стандартного вывода используется символ>. Пример перенаправления вывода в файл:
batch.bat> file. txt.
Кроме того, в начале файла нам нужно отключить вывод на экран каждой команды:
@echo off.
Далее идёт строка заголовков столбцов — тоже через запятую (рис. 4.3).
Рис. 4.3. Содержимое пакетного файла
После прогона и получения текстового файла мы можем загрузить его в пакет Excel. Мы вызываем пункт меню
File — Open.
Затем указываем, что формат файла — текстовый:
Text Files (*.prn, *.txt, *.csv).
Далее с помощью Мастера импортанастраиваем загрузку текстового файла с разделителями и заголовками. Указываем, что десятичный разделитель — точка.
Получаем готовую таблицу с результатами прогонов. И эти результаты уже можно обработать с помощью того же пакета Excel.
Задание. Настройте вывод программы в одну строку через запятую. Создайте пакетный файл по образцу рис. 5. Перенаправьте вывод в текстовый файл. Загрузите файл в Excel.
Задание. Проведите исследование эффективности распараллеливания, задавая разные значения для следующих параметров:
— количество единиц для суммирования;
— количество параллельных потоков;
— количество использованных виртуальных процессоров.
Читать дальше
Конец ознакомительного отрывка
Купить книгу