Практическое задание 2

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

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

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

Варианты 1-3

Оценить пропускную способность (МБ/с) канала передачи данных при использовании различного числа параллельных потоков (от 1 до 8). Построить временную диаграмму пропускной способности для каждого потока. Операции выполнять с использованием типа данных наибольшего размера. Варианты задания:

  • Вариант 1: Чтение данных,
  • Вариант 2: Запись данных,
  • Вариант 3: Копирование данных (чтение + запись). 
Вариант 4

Оценить скорость копирования данных (МБ/с, тактов/элемент) при использовании элементов различного типа: 1, 2, 4, 8, 16 (32) байт. Сравнить с функцией memcpy.

Вариант 5

Оценить скорость переупорядочения данных (МБ/с, тактов/элемент): копирование данных из нескольких одномерных массивов в массив структур:

  • double x[N], y[N]; --> struct { double x,y; } p[N];
  • double x[N], y[N], z[N]; --> struct { double x,y,z; } p[N];
  • double x[N], y[N], z[N], u[N]; --> struct { double x,y,z,u; } p[N];
  • и т.д. до 12 массивов.
Вариант 6

Оценить скорость переупорядочения данных (МБ/с, тактов/элемент): копирование данных из массива структур в нескольких одномерных массивов:

  • struct { double x,y; } p[N]; --> double x[N], y[N];
  • struct { double x,y,z; } p[N]; --> double x[N], y[N], z[N];
  • struct { double x,y,z,u; } p[N]; --> double x[N], y[N], z[N], u[N];
  • и т.д. до 12 массивов.
Вариант 7

Оценить скорость копирования (МБ/с, тактов/элемент) элементов массива, представленного в виде std::vector, используя различные типы элементов данных: 1, 2, 4, 8, 16 (32) байт. Копирование выполнять двумя способами:

  • перебирать элементы с помощью итератора,
  • с помощью оператора присваивания всего контейнера.
Вариант 8

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

Отчёт

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

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