Cтраница 3
Простейший опровергающий пример-это п 15, когда для выполнения бинарной процедуры требуется 6 умножений, хотя мы можем вычислить у х3 за два умножения и х1Ъ - уь еще за три умножения, получив в итоге требуемый результат всего за 5 умножений. Обсудим теперь несколько других процедур вычисления х, пригодных в тех ситуациях ( например, в оптимизирующем компиляторе), когда значение п известно заранее. [31]
Решение задачи получено путем использования сглаживающих кубических сплайнов. Приведены тексты двух процедур, с помощью которых определяются геометрические параметры как традиционных оболочек вращения, так и оболочек вращения сложной формы. Отметим, что все разработанные авторами процедуры реализованы на алгоритмическом языке PL / I в версии PL / I ( О), которая является входным языком оптимизирующего компилятора PL / I операционной системы ОС ЕС ЭВМ. Использование языка PL / 1 ( О) особенно целесообразно в тех случаях, когда численные расчеты выполняются на малых ЭВМ. [32]
![]() |
Функция в логическом выражении. [33] |
Применение функций в логических выражениях имеет одну тонкость. Логическое выражение не всегда обязательно вычислять целиком. Возможно, что по некоторой начальной части выражения уже можно сделать вывод об итоговом значении. Оптимизирующий компилятор достаточно разумен для таких действий. То есть, если логическое выражение содержит функции, то нельзя гарантировать, что все они будут вызваны. [34]
А, В и С, например, массивы размера 20 на 20), или же если он делает это, то утрачиваются все удобства использования многомерных массивов. С другой стороны, довольно трудно отлаживать программу, если компилятор до некоторой степени переупорядочил исходную последовательность команд. Поэтому многие поставщики программного обеспечения имеют две. Поэтому оптимизирующим компилятором компилируются только полностью отлаженные программы, готовые для производственной эксплуатации. [35]
Теперь о том, как используется динамически распределяемая память. Глобальные переменные размещаются в сегменте данных адресного пространства и доступны в течение всего времени выполнения приложения. Локальные переменные размещаются в стеке в момент вызова функции или процедуры, в которой они объявлены, и удаляются из стека, освобождая память, в момент выхода из функции или процедуры. Впрочем, оптимизирующий компилятор может удалять их и ранее, если они больше не нужны. [36]
Методы формулирования запросов, используемые в реляционной алгебре и реляционном исчислении, внешне выгладят совершенно по-разному. Мы изучим эти различия и рассмотрим несколько способов преобразования запросов из одного представления в другое. Эти преобразования нужны, в частности, для оптимизации запросов путем переписывания их в форму, подходящую для эффективной обработки вычислительной системой. Такая концепция встречалась в так называемых оптимизирующих компиляторах, которые меняют порядок подвыражений в длинных операторах и устраняют избыточные вычисления. Однако при этом экономятся всего лишь микросекунды, тогда как в случае сложного запроса к базе данных оптимизация может уменьшить количество обращений к внешней памяти на порядок, а это очень большая разница. [37]
Хорошим примером здесь могут служить системы для измерения программ. Опыт показывает, что почти все программисты неправильно представляют себе, где на самом деле находятся узкие места в их программах; неудивительно, что попытки оптимизации так часто оказывались бесплодными, ес - - ли программисты не имели информации о реальном распределении времени счета по строкам программы. Подобные усилия напоминают попытки молодой пары составить рациональный семейный бюджет, не имея понятия о ценах на продукты, - одежду и домашнюю утварь. Единственное, что предоставлялось программисту, - это оптимизирующий компилятор, который проделывает нечто таинственное над транслируемой программой, но никогда не объясняет, что же он делает. К счастью, наконец-то забрезжила надежда на появление систем, которые шее же предполагают наличие у пользователя кое-какого интеллекта; они автоматически предоставляют инструментовку программы и соответствующие указания о реальном распределении затрат. Поэтому я убежден, что такие системы обязательно станут стандартным элементом программного обеспечения - это - лишь вопрос времени. В моей статье в журнале Computer Surveys [21] можно найти дальнейшее обсуждение этого вопроса, а также некоторые соображения по поводу того, как интерактивные программы могут способствовать более полному удовлетворению программистов-пользователей. [38]