Практическое задание 1 (2018 и раньше)

Цель: оценить максимальную производительность микропроцессора на заданных операциях.

Постановка задачи

  • Написать программу, выполняющую многократно (в цикле) заданную арифметическую операцию.
  • Замерить время выполнения цикла. По результатам замера получить оценку производительности микропроцессора на заданной операции (в тактах процессора):
    • латентность (используя последовательность зависимых операций),
    • темп выдачи результатов (используя последовательность независимых операций).
  • Сравнить полученные результаты с теоретическими.

Для корректности теста необходимо добиться того, чтобы после компиляции внутри цикла не было обращений в память, и все вычисления проходили на регистрах. Нужно убедиться в этом путём анализа ассемблерного листинга. Кроме того, необходимо следить, чтобы компилятор не устранил из кода нужные операции. При необходимости можно использовать для тестирования модификацию ассемблерного листинга, сгенерированного компилятором.

Варианты заданий

  1. целочисленное умножение,
  2. векторное целочисленное умножение,
  3. целочисленное деление,
  4. векторное целочисленное деление,
  5. вещественное сложение,
  6. векторное вещественное сложение,
  7. вещественное умножение,
  8. векторное вещественное умножение,
  9. вещественное деление,
  10. векторное вещественное деление,
  11. вещественное вычисление квадратного корня,
  12. векторное вещественное вычисление квадратного корня,
  13. преобразование из целочисленного значения в вещественное (плюс вещественное сложение),
  14. векторное преобразование из целочисленного значения в вещественное (плюс векторное вещественное сложение).
  15. ...

Для целочисленных операций использовать тип int, для вещественных - тип double. Векторные операции реализовать с помощью intrinsics. Для замера времени использовать счётчик тактов процессора.

Отчёт

Отчёт высылайте преподавателю на почту. В отчет необходимо включить:

  • Фамилию И.О.
  • листинг программы на Си,
  • весь листинг на ассемблере или фрагмент кода с циклом,
  • полученные оценки производительности, их сравнение с теоретическими,
  • вывод по результатам выполнения задания.