Цель: оценить производительность вычислительной системы при различных операциях с данными.
Постановка задачи
Выполнить оценку производительности заданной операции работы с данными. Для тестирования использовать массивы большого размера (порядка 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
Создать как можно более быструю функцию копирования блока данных по выровненным адресам. Использовать векторные типы данных, программную предвыборку, потоковую запись в память. Попробовать различные степени ручной раскрутки цикла, а также раскрутку, предлагаемую компилятором. В отчёте описать все предпринятые попытки улучшения с достигнутыми характеристиками (МБ/с).
Отчёт
Отчёт высылайте преподавателю на почту. В отчет необходимо включить:
- Фамилию И.О.
- постановку задачи,
- листинг программы на Си (возможно, ключевые фрагменты на ассемблере),
- полученные оценки производительности в таблице,
- вывод по результатам выполнения задания.