Организация ЭВМ и систем

 

Лабораторная работа ©3

Изучение ассемблерного листинга программы

(архитектура Itanium)

 

Цель:

1)      познакомиться с программной архитектурой Itanium,

2)      научиться читать ассемблерный листинг программы для архитектуры Itanium и проводить его простейший анализ.

 

Задание

Для тестовой программы (из первой лабораторной работы) сгенерировать ассемблерные листинги при компиляции с различными уровнями оптимизации. В программе использовать тип данных float. В каждом ассемблерном листинге:

1.      Распознать вычислительную функцию, сопоставить команды языка Си с командами ассемблера.

2.      Локализовать обращения в память, которые происходят при выполнении вычислительной функции. Определить позиции в исходной программе на Си, в которых происходят обращения в память. Посчитать общее число обращений в память при выполнении вычислительной функции (в зависимости от параметра задачи).

3.      Определить, какие переменные и параметры вычислительной функции отображены на регистры, и какие размещены в памяти. Какие регистры используются для реализации вычислений (целочисленные, вещественные).

4.      Описать видимые изменения в ассемблерном коде программы при переходе от одного уровня оптимизации к другому. Описать какие оптимизационные преобразования выполнил компилятор.

 

Для выполнения задания использовать компилятор Intel C Compiler (icc) со следующими ключами оптимизации: -O0, -O1, -O2, -O3.

 

В отчет включить:

·        Фамилия, группа,

·        Текст вычислительной функции (на Си) и небольшое описание (что вычисляется),

·        Для каждого ключа оптимизации указать:

·        число обращений в память внутри вычислительной функции (функция от N),

·        какие переменные размещены на регистрах.

·        какие видимые изменения в коде программы произошли при переходе от предыдущего уровня оптимизации (текст в произвольной форме). Например:

-     были убраны ненужные инструкции,

-     переменные стали располагаться на регистрах,

-     стали использоваться другие инструкции,

-     инструкции стали располагаться в другом порядке,

-     цикл развернулся сколько-то раз,

-     функция не вызывается с помощью call, а подставляется ее код,

-     и т.п.

Где возможно, приводить конкретные примеры ассемблерных команд из листинга.