Генерация высококачественного кода для программ, написанных на СИ - [10]
¦3.9/3.7 ¦3.9/2.8 ¦!1.0/0.9!¦3.3/3.8 ¦3.9/3.4 ¦3.4/3.4 ¦
¦ ¦ ¦ ¦ ¦ ¦ ¦
¦51.3/51.5¦28.6!27.7!39.8/39.8¦40.0/40.0¦40.0/40.0¦51.2/51.3 ¦
¦ ¦ ¦ ¦ ¦ ¦ ¦
¦21.0/26.0¦12.5!11.0!16.0/15.2¦14.8/15.7¦16.1/16.0¦19.2/20.1 ¦
+---------+---------+---------+---------+---------+-----------+
¦ ¦ ¦ ¦ ¦ ¦ ¦
¦4.7/4.7 ¦2.6/2.6 ¦2.6/2.1 ¦!1.7/1.7!¦3.1/3.0 ¦1.8/1.8 ¦
¦1.3/1.3 ¦1.1/1.1 ¦1.1/1.2 ¦1.0/1.0 ¦1.2/1.3 ¦!0.9/0.9! ¦
¦1.9/1.9 ¦1.3/1.3 ¦1.1/1.2 ¦1.1/1.1 ¦1.3/1.4 ¦!1.0/1.0! ¦
+---------+---------+---------+---------+---------+-----------+
¦ Компиляторам задавались ключи для оптимизации по ¦
¦ скорости, использования непосредственных инструкций ¦
¦ процессоров 80286 и 80287. Все тесты, интенсивно ¦
¦ использующие процессор, были выиграны компиляторами ¦
¦ WATCOM и Microsoft. Не нашлось компилятора, код которого ¦
¦ для тестов ввода/вывода выполнялся бы во время, близкое к ¦
¦ лучшему, в малой и в большой моделях памяти одновременно. ¦
L--------------------------------------------------------------
При сравнении результатов в таблице 1 и в номере за февраль 1988 необходимо отметить одно изменение. Два теста с использованием регистровых переменных (использования указателей и "решето"-sieve) в феврале были измерены для 100 итераций, а не для 20-ти. Поскольку полезно непосредственное сравнение тестов с использованием регистровых переменных и без их использования, тесты с регистровыми переменными в данном случае запускались с 20-ю итерациями. Также заметьте, что численные тесты, присутствующие в таблице 1, выполнялись для прямого кода процессоров 80x87 в малой и большой моделях памяти, а не с помощью программного эмулятора.
Поскольку текст теста оптимизации предназначен для проверки наличия или отсутствия отдельных типов оптимизации, он состоит из набора отдельных, не связанных фрагментов программ, и не представляет собой целостное, проблемно-ориентированное тело программы. Тест организован как основная функция (main), содержащая большинство фрагментов кода для оптимизации, и несколько отдельных функций, с аргументами или без них. Эти функции демонстрируют не только отдельные методы оптимизации, но также оптимизацию пролога и эпилога выполняемых функций. С целью обеспечения максимальных возможностей для оптимизации, основанной на времени жизни отдельной переменной, большинство переменных теста являются глобальными. Многие возможности обеспечены специально для общих методов оптимизации, таких как удаление лишних сохранений (присваиваний), размножение констант и размещение переменных в регистрах.
Процесс оптимизации кода сложен, и степень повышения эффективности зависит не только от типа и изощренности методов оптимизации компилятора, но также и от того, как исходный текст программы написан и структурирован. Результат также зависит от того, как в исходном тексте используются переменные и выражения.
В таблице 2 собрана информация о том, какие приемы оптимизации выполнялись каждым компилятором на тексте теста. Каждый компилятор из рассматриваемого набора выполняет простейшие приемы оптимизации, такие как свертка констант и алгебраические упрощения. Большинство применяют методы оптимизации некоторого промежуточного уровня, включающего снижение мощности и удаление общих подвыражений. Некоторые выполняют оптимизацию высокого уровня, такую как вынесение инвариантного кода и удаление переменных индукции циклов. Ни один не выполняет успешно слияние циклов, и только Datalight Optimum-C делает попытки, далеко не удовлетворительные, применения глубокого удаления общих подвыражений.
--------------------------------------------------------------¬
¦Таблица 2: Результаты теста оптимизации ¦
+-------------------------T---T---T---T---T---T---T---T---T---+
¦ КОМПИЛЯТОР ВЕРСИЯ ¦ 1 ¦ 2 ¦ 3 ¦ 4 ¦ 5 ¦ 6 ¦ 7 ¦ 8 ¦ 9 ¦
+-------------------------+---+---+---+---+---+---+---+---+---+
¦МЕТОДЫ ОПТИМИЗАЦИИ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
¦Свертка констант (целых) ¦ * ¦ * ¦ * ¦ * ¦ * ¦ * ¦ * ¦ * ¦ * ¦
¦Свертка констант (плав.) ¦ * ¦ * ¦ * ¦ * ¦ * ¦ * ¦ * ¦ * ¦ * ¦
¦Размножение констант ¦ ¦ ¦ * ¦ ¦ ¦ * ¦ * ¦ ¦ * ¦
¦Размножение копий ¦ * ¦ * ¦ * ¦ * ¦ * ¦ * ¦ * ¦ ¦ * ¦
¦Алгебр.упрощения ¦ * ¦ * ¦ * ¦ * ¦ * ¦ * ¦ * ¦ * ¦ * ¦
¦Подавление деления на 0 ¦ ¦ * ¦ ¦ ¦ ¦ * ¦ * ¦ ¦ * ¦
¦Удаление подвыражений ¦ ¦ ¦ * ¦ * ¦ * ¦ * ¦ * ¦ ¦ * ¦
¦Снижение мощности ¦ * ¦ * ¦ * ¦ * ¦ * ¦ * ¦ * ¦ * ¦ * ¦
¦Удаление излишних ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
¦ загрузок/сохранений ¦ * ¦ ¦ * ¦ * ¦ * ¦ * ¦ * ¦ ¦ * ¦
¦Удаление недостижи- ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦

Java Enterprise Edition (Java EE) остается одной из ведущих технологий и платформ на основе Java. Данная книга представляет собой логичное пошаговое руководство, в котором подробно описаны многие спецификации и эталонные реализации Java EE 7. Работа с ними продемонстрирована на практических примерах. В этом фундаментальном издании также используется новейшая версия инструмента GlassFish, предназначенного для развертывания и администрирования примеров кода. Книга написана ведущим специалистом по обработке запросов на спецификацию Java EE, членом наблюдательного совета организации Java Community Process (JCP)

Что такое ГЕЙМДИЗАЙН? Это не код, графика или звук. Это не создание персонажей или раскрашивание игрового поля. Геймдизайн – это симулятор мечты, набор правил, благодаря которым игра оживает. Как создать игру, которую полюбят, от которой не смогут оторваться? Знаменитый геймдизайнер Тайнан Сильвестр на примере кейсов из самых популярных игр рассказывает как объединить эмоции и впечатления, игровую механику и мотивацию игроков. Познакомитесь с принципами дизайна, которыми пользуются ведущие студии мира! Создайте игровую механику, вызывающую эмоции и обеспечивающую разнообразие.

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.

Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.