Организация
ЭВМ и систем
Лабораторная работа ©3
Изучение ассемблерного
листинга программы
(архитектура Itanium)
Цель:
1) познакомиться с программной архитектурой Itanium,
2) научиться читать ассемблерный листинг программы для архитектуры Itanium и проводить его простейший анализ.
Задание
Для тестовой программы (из первой лабораторной работы) сгенерировать ассемблерные листинги при компиляции с различными уровнями оптимизации. В программе использовать тип данных float. В каждом ассемблерном листинге:
1. Распознать вычислительную функцию, сопоставить команды языка Си с командами ассемблера.
2. Локализовать обращения в память, которые происходят при выполнении вычислительной функции. Определить позиции в исходной программе на Си, в которых происходят обращения в память. Посчитать общее число обращений в память при выполнении вычислительной функции (в зависимости от параметра задачи).
3. Определить, какие переменные и параметры вычислительной функции отображены на регистры, и какие размещены в памяти. Какие регистры используются для реализации вычислений (целочисленные, вещественные).
4. Описать видимые изменения в ассемблерном коде программы при переходе от одного уровня оптимизации к другому. Описать какие оптимизационные преобразования выполнил компилятор.
Для выполнения задания
использовать компилятор Intel C Compiler (icc)
со следующими ключами оптимизации: -O0, -O1,
-O2, -O3.
В отчет включить:
· Фамилия, группа,
· Текст вычислительной функции (на Си) и небольшое описание (что вычисляется),
· Для каждого ключа оптимизации указать:
· число обращений в память внутри вычислительной функции (функция от N),
· какие переменные размещены на регистрах.
· какие видимые изменения в коде программы произошли при переходе от предыдущего уровня оптимизации (текст в произвольной форме). Например:
- были убраны ненужные инструкции,
- переменные стали располагаться на регистрах,
- стали использоваться другие инструкции,
-
инструкции стали располагаться в другом порядке,
- цикл развернулся сколько-то раз,
- функция не вызывается с помощью call, а подставляется ее код,
- и т.п.
Где возможно, приводить конкретные примеры ассемблерных команд из листинга.