Система Turbo Profiler фирмы Borland | страница 23
В том случае, если для какой-то подпрограммы отношение общего времени ее выполнения к количеству ее вызовов велико, то самое лучшее из того, что можно предпринять — это попытаться заменить ее на другую подпрограмму.
Рассматривая оператор return в подпрограмме root (строка 7), мы попадаем в другую ситуацию. Этот оператор характеризуется самым большим числом обращений и самым большим общим временем выполнения. К двум другим строкам (строке 5 и строке 8) обращение происходит 5456 раз, но гистограммы для каждой из этих строк показывают маленькие затраты времени на их выполнение. Такое сочетание нас вполне устраивает, оно означает, что данные операторы работают быстро. Итак, самой большой проблемой на настоящий момент является количество вызовов подпрограммы root.
Сокращение количества вызовов подпрограммы (PRIME3).
Теперь наша основная задача — это сокращение количества вызовов подпрограммы root. Загрузите PRIME3 в окно Module (Модуль), затем распахните это окно и посмотрите на исходный текст нашего примера.
Информация для пользователей Паскаля: Вам следует загрузить в окно Module (Модуль) пример PRIME3PA.
Единственная модификация, имеющаяся в PRIME3, содержится в подпрограмме prime. Мы добавили новую целочисленную переменную limit и, перед началом работы цикла for, присвоили ей значение, равное root(n). Переменная limit — это верхняя граница для параметра цикла for.
Информация для пользователей Паскаля: В PRIME3PA мы добавили целочисленную переменную Limit и положили ее равной корню квадратному из n перед началом выполнения цикла for. Переменная Limit — это верхняя граница для параметра цикла for.
При помощи локального меню окна Module (Модуль), пометьте «области» на каждой строке программы. Во время данного сеанса профилирования (для того, чтобы запустить программу выберите Run| Run (Выполнение| Выполнение) или нажмите клавишу F9), программа работает немного быстрее. Общее время выполнения программы PRIME3 сократилось почти на 50 %.
Теперь в качестве основного потребителя времени выполнения выступает функция printf. За счет сокращения числа обращений к подпрограмме вычисления квадратного корня (с 5456 до 999) мы значительно уменьшили общее время выполнения программы.
Добавим еще немного эффективности.
У нас осталось еще несколько возможностей для увеличения эффективности подпрограммы prime. Загрузите PRIME4 в окно Module (Модуль), затем просмотрите строки исходного текста с 8 по 17.